二进制安全学习-最简单的pwn

本文介绍了如何使用Pwn工具(如pwntools和pwndbg)进行栈溢出控制,包括基本操作、溢出漏洞利用(如gets函数),并通过IDA进行静态和动态调试。还详细描述了一个实际的栈溢出攻击案例,包括payload构建和目标地址覆盖。
摘要由CSDN通过智能技术生成

栈溢出控制执行流的关键,是让控制执行指令最关键的寄存器eip,

去载入攻击代码的地址,而能控制eip的关键,回忆栈的工作过程

便是在于栈帧中ruturn address

 

pwn工具:

 

pwntools是python自带的pwn工具

pwndbg是gdb中的增强模块

Checksec检查文件的保护措施

 

idapro的基本使用,f5进入将汇编代码变为c语言代码

左侧function windows可以看到所有使用的函数,除了用户

写的函数,许多函数在系统内是已经写好的,其中白色部分是写死的

静态代码,而粉色部分则是需要在用到时去动态链接库中寻找使用的。

gets函数的出现往往代表着有溢出的漏洞,因为gets设计之初没有

考虑安全问题,读入的字符串是无上限的。

 

Pwntools:

1.本地建立连接:io = process("./文件名")

远程连接 : io = remote("ip",port)

2.接收 io.recv() io.recvline()

3.发送 io.send(\n)   == io.sendline()

 

题目:

1.tools:直接用pwntools的io.recv()接收可以得到b'Pwntools is such an awesome python module, right?\nTell you a secret (only smart baby can see it) :\nZmxhZ3tuMHRfZjRzdGVyX3Q2YW5feTB1fQo=\rMaybe I will tell you again when you clever than ELSEpush ......\n'其中的转义字符也输出就把本来被删去的/r前的一段给显示出来时base64编码

用echo ZmxhZ3tuMHRfZjRzdGVyX3Q2YW5feTB1fQo= | base64 -d 解码得到flag

 

 

 

Pwndbg:

例题:ret2text:return to text

 

 

 

屏幕剪辑的捕获时间: 2024/3/17 16:52

 

 

最简单的栈溢出情况,ida已经标识出ebp的距离为10h字节,16字节,

有时也不可靠,最可靠的还是动态调试

在ida中发现main下的vulnerable函数里存在栈溢出

同时存在get_shell的后门函数可以直接访问/bin/sh

接着在 gdb ret2text进入pwndbg下

用b (breaking point) 命令 b main在main处打下一个断点

然后r(run),进入调试界面,用n来到vulnerable函数用s进入

再n进入gets输入八个字符则得到

 

 

发现eax和ebp的距离确实为16个字节,ebp下四个字节则为return address

目标是覆盖这个区域让其跳到后门的函数,则拿到shell

用python写exp脚本,开启服务后,查看getshell的地址如下写payload

Payload = b'A'* 16 + b'bbbb'+ p32(0x8048522)

前面为20个垃圾字符,p32将地址变为字节流

Io.sendline(payload)然后io.interactive开启交互

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值