BUUCTF——WEB(7)

目录

[[ACTF2020 新生赛]BackupFile 1](#[ACTF2020 新生赛]BackupFile 1)

[[极客大挑战 2019]BuyFlag 1](#[极客大挑战 2019]BuyFlag 1)

[ACTF2020 新生赛]BackupFile 1

寻找文件,尝试目录扫描

发现index.php.bak

下载查看

复制代码
<?php
include_once "flag.php";		#include_once(文件引入函数),作用是把flag.php文件的内容加载到当前脚本中,且仅加载一次(避免重复引入导致变量 / 函数重复定义报错)。

if(isset($_GET['key'])) {		#判断变量是否存在且不为 null
    $key = $_GET['key'];		#把 URL 中传入的key参数值,赋值给本地变量$key
    if(!is_numeric($key)) {		#is_numeric(),作用是检测变量是否为数字或数字字符串
        exit("Just num!");		#如果用户传入的key不是数字 / 数字字符串(比如key=abc),脚本直接停止,输出 "Just num!"(意思是 "只能是数字!"),后续代码不再执行。
    }
    $key = intval($key);		#intval(),作用是把变量强制转换为整数类型
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

代码审计

核心语法==是 PHP 的松散比较 (弱类型比较),区别于===(严格比较,要求值和类型都相等)。

漏洞核心 :当用==比较整数字符串时,PHP 会自动把字符串转为整数后再比较,转换规则是 "提取字符串开头的连续数字,直到遇到非数字字符为止"。

本例中$str是字符串,转整数的结果是123(只取开头的 123,后面的字母忽略);

只要$key(整数)等于 123,$key == $str就会返回 true

[极客大挑战 2019]BuyFlag 1

f12查看网页源码,发现一个文件地址,其他没有发现

跳转访问

页面提示说必须是CUIT学生

cookie代表身份标识,在编程中0代表假,1代表真, 所以猜测这里的user对应的数值代表是不是CUIT学生

f12查看源码

post传参需要password和money两个参数

money

传参money=100000000时长度过长

改用科学计数法输入money=1e10

password

复制代码
<!--
	~~~post money and password~~~
if (isset($_POST['password'])) {
	$password = $_POST['password'];
	if (is_numeric($password)) {		#检测变量是否为数字 / 数字字符串
		echo "password can't be number</br>";		#比如404、"404"、404.0、"404.0"都返回true,输出密码不能是数字
	}elseif ($password == 404) {		#password 不是数字 / 数字字符串 "404a"、"a404"返回false
		echo "Password Right!</br>";	#密码正确
	}
}
-->

burpsuite抓包,修改访问方式

要求 password不是数字 / 数字字符串,但又要求和整数 404 相等。利用弱类型比较可轻松绕过,具体方法:

  • 提交 POST 参数password=404a(或404abc404.0a等)

  • 验证过程:

    • is_numeric("404a")false(不是纯数字 / 数字字符串),跳过第 6 行;

    • "404a" == 404 → PHP 把字符串转成整数 404,比较结果true

    • 最终输出 "Password Right!"

关键漏洞是==弱类型比较:非数字字符串只要开头是 404,转整数后就等于 404,可绕过is_numeric的限制;

$password = "404a" → 转整数是 404 → "404a" == 404→ true;

$password = "404abc123" → 转整数是 404 → 比较结果true;

$password = "a404"→ 转整数是 0 → 比较结果false

因此传入password可为"404a

也可以使用cookies结合hackerbar来做

相关推荐
liann1192 小时前
3.1_网络——基础
网络·安全·web安全·http·网络安全
独行soc2 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
独行soc3 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
ESBK20253 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec4 小时前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf
七牛云行业应用4 小时前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云
原来是你~呀~5 小时前
Strix:AI驱动的全自动安全测试平台,LinuxOS部署
网络安全·自动化渗透测试·strix
fendouweiqian5 小时前
AWS WAF(配合 CloudFront)基础防护配置:免费能做什么、要不要开日志、如何限制危险方法
网络安全·aws·cloudfront
乾元5 小时前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
Whoami!6 小时前
⓫⁄₁₃ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 利用Windows计划任务提权
网络安全·信息安全·利用windows计划任务提权