做新房坐哪个网站好,怎样用dw做网站主页,网站大专,pc网站向手机站传递权重目录
适用版本
环境搭建
文件下载安装
配置文件修改
漏洞分析 适用版本
注#xff1a;thinkphp版本#xff1a;5.0.13ThinkPHP5.0.15 、 5.1.0ThinkPHP5.1.5
环境搭建
文件下载安装
在github上面下载相应版本#xff0c;下载think文件#xff0c;…目录
适用版本
环境搭建
文件下载安装
配置文件修改
漏洞分析 适用版本
注thinkphp版本5.0.13ThinkPHP5.0.15 、 5.1.0ThinkPHP5.1.5
环境搭建
文件下载安装
在github上面下载相应版本下载think文件下载framework文件然后将framework文件修改名字为thinkphp然后将修改后的framework放在think文件下然后将think放在网站目录下 配置文件修改
修改数据库连接文件这里需要提前创建一个数据库文件
修改你的控制器 $username request()-get(username/a);
这里是接收一个get传参然后username/a的意思是有username传参username的值就是传参的值没有的话就是默认是a db(users)-insert([username$username]);
这里就是将你输入的值传道数据库里
漏洞分析
漏洞我们可以在framework中的5.0.16版本去看因为后面的版本肯定是把前面的版本bug修复了。所以可以从里面看到bug是什么样子看一下5.0.16官方更新了什么东西到底是把什么修复了。 来看一下啊它的更新提交然后看看有啥子漏洞 在builder中会有一个修改的地方 下面我们来追一下这个代码首先输入注入语句
http://127.0.0.1:9999/thinkphp/think-5.0.15/public/index.php?username[0]incusername[1]updatexml(1,concat(0x7,user(),0x7e),1)username[2]1
这个需要开启调试模式注入成功将user回显了过来 在这里下断看他一步步执行步骤
首先username的值为0inc,1updatexml(1,concat(0x7,user(),0x7e),1),21
将断点打在插入语句 看一下他的insert这个函数数据传输是自己写的值 然后下一步追到builder上即上面的 $this-builder-insert() 最终调用的是 Builder 类的 insert 方法。 然后调用 parseData 方法来分析并处理数据 然后咱来看一下parseData的方法下图代码
这个代码中上面第一个红框将data数组中遍历然后val中就是data的值然后看第二个红框三个不同的参数对应不同的处理方式这三个处理方式都可以进行注入但是insert方法中会对exp进行过滤如果数据中存在 exp 则会被替换成 exp空格所以三种处理方式中选项等于exp的无法使用 然后经过parseData处理的数据返回到Builder中的insert然后下面的sql中的str_replace中的第一个数组被第二个数组中的值进行替换 上图代码中第二个数组的意思
$sql str_replace([%INSERT%, %TABLE%, %FIELD%, %DATA%, %COMMENT%],[$replace ? REPLACE : INSERT,$this-parseTable($options[table], $options),implode( , , $fields),implode( , , $values),$this-parseComment($options[comment]),], $this-insertSql);
$replace ? REPLACE : INSERT
replace有值就是INSERT没值就默认是REPLACE $this-parseTable($options[table], $options)
option中table是users
implode( , , $fields)
implode( , , $values)
将数组转换为字符串fileds是username、values就是你写的报错语句 $this-parseComment($options[comment])
数据库建表的时候允许你建一个注释comment就是这个注释这个注释没有的话就为空然后就插入到数据库中引起报错注入
回来以后数组的值经过替换后变成如下代码