thinkphp5.0.15 sql注入漏洞复现与详细分析
z3
- 关注
thinkphp5.0.15 sql注入漏洞复现与详细分析

thinkphp5.0.15sql注入
复现
搭建环境
漏洞复现
漏洞分析
漏洞出在这句$res = DB::table('users')->insert(['name'=>$name]);
跟进insert看下
和上一篇有点像,跟进builder->insert看下
parseData生成了注入语句
在parseData中,如果传入参数是数组,通过switch判断第一个参数,如果是inc,则直接拼接第二第三个参数到
然后直接将生成好的键值替换到模板insertSql语句中,,生成了注入语句name=updatexml(1,concat(0x7,user(),0x7e),1)+1
protected $insertSql = '%INSERT% INTO %TABLE% (%FIELD%) VALUES (%DATA%) %COMMENT%';
同样的,update也使用了parseData函数,所以也会导致注入
回过头来看一下,不仅可以用inc,也可以用dec
上一篇是由于预处理导致的可以执行user()等函数,比较鸡肋
但这次是真实的,通过了预处理,将sql语句交给了数据库执行
所以可以通过报错注入查看数据
总结
parseData函数未对用户输入进行过滤,用户输入的数据控制了代码的执行
exp,inc,dec这些本应在sql语句生成过程中由代码生成,用户设置自增或自减
但未考虑用户输入
如何修复
看5.0.24
只对val[1]拼接,并且会将val[1]强制转换为floatval类型,这样就不能构造语句了
但根本问题还是没有解决啊!用户输入的数据控制了代码的执行!还是会产生未预期的情况
假设场景,用户注册,权限0是管理员,1是普通用户
普通用户注册时,应是1的权限,但是由于用户输入了含有'dec'的数组,导致在插入数据时,让用户权限减一,造成了提权。
本文为 z3 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏

相关推荐
Java 反序列化回显链研究:漏洞检测工程化
2022-04-01
Z3专栏 | CommonsCollections3分析
2022-03-19
MeterSphere未授权导致的rce漏洞分析、复现、exp编写
2022-02-11