php框架审计,关于ThinkPHP框架的审计_PHP开发框架教程

下面由

thinkphp框架教程栏目给人人引见有关ThinkPHP框架的审计,愿望对须要的朋侪有所协助!

8a903c22248fe546d0a25c99e8b6b04e.png

ThinkPHP简介

ThinkPHP是一个免费开源的,疾速、简朴的面向对象的 轻量级PHP开发框架 ,创立于2006年终,遵照Apache2开源协定宣布,是为了迅速WEB运用开发和简化企业运用开发而降生的。ThinkPHP从降生以来一向秉持简约有用的设想准绳,在坚持精彩的机能和至简的代码的同时,也注意易用性。而且具有浩瀚的原创功用和特征,在社区团队的积极参与下,在易用性、扩大性和机能方面不停优化和革新,已生长为国内最抢先和最具影响力的WEB运用开发框架,浩瀚的典范案例确保能够稳固用于贸易以及流派级的开发。

破绽简述

只管ThinkPHP 5.0.x框架采用了参数化查询体式格局,来操纵数据库,但是在 insert 和 update 要领中,传入的参数可控,且无严厉过滤,终究致使本次SQL注入破绽发作。

以ThinkPHP框架 5.0.x sql注入破绽举行剖析

thinkphp官网下载5.0.15版本:http://www.thinkphp.cn/down/1125.html 。搭建好数据库,数据库为tp,表名为user,个中有两个字段id和username。

a63aeffeb87705c1dcdf2dbf11578848.png

修正数据库设置信息 application/database.php,在application/config.php 中翻开调试和trace。

08cea737abdc8f99a899bdda908bdf21.png

7e7e840c373485657f25daf8f80fd383.png

在 application/index/controller/Index.php 中Index类中增加要领:

public function testsql()

{

$username = input('get.username/a');

db('user')->where(['id'=> 1])->insert(['username'=>$username]);

}

我们本次的 payload 为:

http://127.0.0.1/thinkphp5.0.15/public/index.php/index/index/testsql?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1

诠释以下:

http://127.0.0.1/thinkphp/ public/ index.php/ index/ index/ index

域名 网站目次 对外接见目次 进口文件 前台 控制器 要领名

扩大:

个中关于 updatexml 函数UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String花样,为XML文档对象的称号,文中为Doc

第二个参数:XPath_string (Xpath花样的字符串) ,假如不相识Xpath语法,能够在网上查找教程。

第三个参数:new_value,String花样,替代查找到的相符前提的数据

作用:转变文档中相符前提的节点的值

接见payload,就能够触发破绽了。

966aa32fffbc6de3b344300de1ada1a4.png

破绽剖析

起首,我们晓得 insert 要领存在破绽,那就检察 insert 要领的细致完成。

经由过程input获取到参数后,username变量状况以下:

56e9356bc14c819d31d70f86af15a019.png

跟入insert,thinkphp/library/think/db/Query.php

c2fcfc02ae7d5a1c99f51ba9afce4d70.png

然后实行insert语句

$sql = $this->builder->insert($data, $options, $replace);

跟入 thinkphp/library/think/db/Builder.php

b36f7592e318fb28596c5ca0e5782a45.png

跟入parseData至 thinkphp/library/think/db/Builder.php

e55432b8b9f21083768cef843300f9e7.png

能够看出$val是数组,且依据$val[0]值为inc,会经由过程switch语句进入到’inc’:

此处的parseKey,即thinkphp/library/think/db/builder/Mysql.php

3a2f5941d72463defc4e70b6f3ccb0b9.png

此处并未对传入的$key举行更多的过滤与搜检,将其与前面经由parseKey的效果举行拼接后返回给result

至此注入胜利。

破绽修复

https://github.com/top-think/framework/commit/363fd4d90312f2cfa427535b7ea01a097ca8db1b

947440678d67a7cb08420fe66421bec5.png

在举行dec和inc操纵之前对$val[1]的值举行了再次确认。

总结

第一次审计Thinkphp框架 ,连系Thinkphp5.0手册以及网上教程完成此次破绽的审计。

以上就是关于ThinkPHP框架的审计的细致内容,更多请关注ki4网别的相干文章!

收藏 | 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值