NSSround#28Team_Web_WP
这篇文章的目录
ez_ssrf
代码分析
1 |
|
curl函数
- 初始化 →
curl_init() - 配置 →
curl_setopt() - 执行 →
curl_exec() - 关闭 →
curl_close() - 检查→
curl_errno()
思路
这题实际上就是访问/flag文件就可以,但是过滤了127.0.0.1和::1并且因为使用了函数 $ip = gethostbyname($host);先进行域名解析再进行过滤,环回绕过也无法使用,但因为没有过滤0.0.0.0,所以可以使用0 来进行本地借口访问
为什么http://0/flag行
若系统将
"0"视为特殊主机名,直接返回0.0.0.0。若系统尝试 DNS 查询,但
"0"无法解析为有效域名,可能返回0.0.0.0或保持原值(依赖环境配置)。0.0.0.0是 IPv4 的默认路由地址,表示“监听所有本地网络接口”(包括环回接口127.0.0.1和物理网卡接口)当服务器程序绑定到
0.0.0.0时,它会接收来自所有网络接口的请求(包括本地服务)。绕过逻辑:
若黑名单仅禁止127.0.0.1和::1,但未包含0.0.0.0,攻击者通过构造http://0/flag,使得解析后的 IP 为0.0.0.0,从而绕过校验。
light_pink
思路
这里刚开始做的时候还是思路不清晰,先直接用?id=1 ?id=1' ?id=1"输入,看有没有报错,如果有报错,再用%23闭合,通过逻辑方式来检验
流程
1 | #查库名 |
ez_php
1 |
|
is_numeric($password)绕过
- 作用:检查输入是否为合法数字,常用于防止注入攻击或非法输入。
- 常见实现方式
- 正则表达式:如
/^\d+$/(仅整数)或/^[-+]?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?$/(支持科学计数法)。 - 语言内置函数:如PHP的
is_numeric()、Python的str.isdigit()。 - 类型转换检测:尝试将输入转换为数字(如
float(input)),捕获异常。
- 正则表达式:如
绕过方法及原理
1 科学计数法
- 示例:
1e3(等价于1000)。 - 适用场景:函数支持科学计数法(如PHP的
is_numeric())。 - 后续利用:若输入被转换为数字,可能触发计算或类型转换漏洞。
2 十六进制/八进制
- 示例:
0x1a3(十六进制)、0777(八进制)。 - 适用场景:函数允许非十进制格式(如PHP的
is_numeric()接受0x前缀)。 - 后续利用:十六进制可能被解码为ASCII字符串(如
0x414243→ABC),导致注入。
3 类型转换漏洞
示例:
"123abc"在弱类型语言(如PHP)中可能被强制转换为123。绕过逻辑
1
2// PHP示例:is_numeric("123abc")为false,但弱类型比较可能通过
if (is_numeric($input) && $input == 123) { ... }防御缺陷:未严格使用全等(
===)进行比较。
4 空格与特殊字符
- 示例:
" 123"、"123\n"。 - 绕过逻辑:若函数未做
trim处理,可能通过正则检测(如/^\d+$/不匹配,但is_numeric()允许空格)。
5 小数点与符号
- 示例:
+123、-123.45。 - 适用场景:函数允许符号或浮点数,但后续代码预期整数。
6 Unicode与特殊编码
- 示例:全角数字
"123"、Unicode数字字符"①"。 - 绕过逻辑:函数未正确处理Unicode或字符集转换。
7 空字节截断
- 示例:
"123\0x00abc"。 - 适用场景:C语言或低级语言中处理字符串时,空字节可能截断输入。
8 超大数字溢出
- 示例:
"99999999999999999999"(超出整型范围)。 - 后续利用:整数溢出可能导致逻辑错误或内存问题。
方法
因为这里第一要输入不完全为数字,而且要被识别为123456,所以可以用3.类型转换漏洞 输入123456a,被识别为123456.
md5===绕过
用数组绕过就可以,之后写一篇完整的吧
include()读取文件
file=php://filter/convert.base64-encode/resource=level2.php用php伪协议读取即可
