
Thinkphp代码审计
文章平均质量分 93
同事共享文章
Jeromeyoung666
散文随笔--by Jeromeyoung
展开
-
终章:学习路线
希望认真读完的你有所收获,希望直接滑到低的你不要对一个认真分享经验的学徒嗤之以鼻。希望你学完能有自己的理解和想法,自信的说出:“RCE?也不是很难”。终。原创 2023-01-06 19:06:28 · 1242 阅读 · 1 评论 -
ThinkPHP5漏洞分析之SQL注入(七)
返回到了$instance变量中,这时控制器这块已经基本上处理完了,think\App实际上就是thinkphp\library\think\App.php这个php文件里的App类(在MVC架构中,某些类也是可以叫做控制器),think是一个命名空间。命名空间的概念百度一下就知道了。相信很多人在不懂原理的情况下,看这一串payload是感觉很nb的一个paylaod(因为它长,需要的参数多),像我本人之前就纳闷这payload中为啥还会有反斜杠,s参数名是啥?接下来就是获取方法,调用反射执行类的方法。原创 2023-01-06 19:04:41 · 2076 阅读 · 0 评论 -
ThinkPHP5之文件包含审计分析(六)
在开启debug模式时,这条method调用链会在调用任意方法后,执行$request->param()方法,而这个方法里就有调用input()。设置默认过滤器 system,直接请求,参数名xx=whoami即可执行命令(业务影响未知,大概率影响)注意第二种payload必须要按照上面的顺序,不然filterValue会进入我们不期望的流程,5.x的RCE漏洞修复较简单,只是用if校验了一下方法白名单。数据,那么组合起来就是执行method方法可以控制类的成员变量的值。的任意方法调用,调用构造函数。原创 2023-01-06 19:01:08 · 1439 阅读 · 0 评论 -
ThinkPHP5之文件包含审计分析(五)
这个漏洞个人认为文件包含是小事,因为重点是在最后的变量覆盖。而且那条代码还是一个经典的变量覆盖漏洞案例。如果是从审计来看,定位到extract函数,注意到这里设置了EXTR_OVERWRITE,那么只要第一个参数可控就可以完成变量覆盖了,include只是完美利用了变量覆盖这个功能。全局搜索也是很容易搜到调用位置的,这里有两处,另外一处是display方法,试了下也是可以完美利用的,它在调用View类下的fetch方法的时候会传入。原创 2023-01-06 18:58:25 · 744 阅读 · 0 评论 -
ThinkPHP5漏洞分析之SQL注入(四)
代码分析,重在一个思考。写代码分析流程,重在记录思考。共勉。原创 2023-01-06 18:56:39 · 980 阅读 · 0 评论 -
ThinkPHP 之 SQLI审计分析(三)
这次分析并没有那么细,也没有想太多,只是根据payload和测试代码的流程过了一遍。并不是严格意义上的白盒审计,很多程序没有进入的代码并没有认真去分析,不知道其他代码做了什么就很可能还存在漏洞点。还是一样的感觉:目前所学习的代码审计就是一个跳过某段代码和进入某段代码的过程,也就是所谓的“链”。至于绕过过滤这些,感觉不是代码审计的重点,只能算是一种奇巧的思路吧。加油。原创 2023-01-03 12:30:55 · 278 阅读 · 0 评论 -
ThinkPHP 之 SQLI审计分析(二)
审计原创 2023-01-03 12:25:40 · 396 阅读 · 0 评论 -
ThinkPHP5之SQLI审计分析(一)
index控制器是默认的TP框架程序的入口,该测试代码在index控制器下新建了一个index方法(实际上本来的index方法是tp的欢迎页面,这里是覆盖替换掉原来的)。至此,整个处理流程基本上就分析完了,满足SQL注入漏洞的前提条件:①参数用户可控②参数直接拼接到SQL语句中,无任何有效过滤。的值:(这里可以随便传个参数比如username=1进去,因为主要是为了知道调用的哪里)根据不同的值进入不同的三个分支,但是可以看到每个分支的处理都是直接拼接。定义的SQL语句模型,返回生成好的SQL语句。原创 2023-01-03 12:06:52 · 1109 阅读 · 0 评论 -
ThinkPHP3.2.3_SQLi
虽然是跟完了,但是如果能想一想这开发者为什么会这样写的话,会让我们对程序的代码逻辑更加亲切,也是一种提高审计能力的方法。我想:给where处理写一个解析数组的功能,肯定是为了迎合多个条件的where的情况,但是这里因为测试代码中只传入了一个条件所以没办法从这个漏洞跟一遍它的完整功能,但是看对exp进行的相关操作,开发者的原意应该是可以让“输入”去控制where条件中的判断逻辑符,比如‘>,原创 2023-01-03 12:01:54 · 531 阅读 · 0 评论 -
PHP的反序列化
php反序列化原创 2023-01-03 11:59:37 · 295 阅读 · 0 评论 -
TP可能用到的函数
注:curl_setopt( resource $ch, int $option, mixed $value) : bool 第二个参数是int型,这意味着所有的选项实际上都是PHP内部定义的一个整型值,比如CURLOPT_URL实际上是。,执行后数组的key值作为变量名,数组的value赋值给对应Key的变量,这样可以直接通过Key变量去访问,不用数组加key去访问。parse_str是。,译注:因为这首先是 PHP 的字符串,经过转义后,是两个,再经过正则表达式引擎后才被认为是一个原文反斜线)。原创 2023-01-03 11:59:03 · 461 阅读 · 0 评论 -
TP相关知识
例如,如果当前脚本是通过 URL http://www.example.com/php/path_info.php/some/stuff?例如,在地址为 http://example.com/foo/bar.php 的脚本中使用 $_SERVER[‘PHP_SELF’] 将得到 /foo/bar.php。数组中有相同的键名(不管是不是数字),则会把最先出现的值作为最终的返回,而把后面的数组拥有相同键名的那些值 抛弃掉,数字索引不会重新排序。__call() //在对象上下文中调用不可访问的方法时触发。原创 2023-01-03 11:49:26 · 433 阅读 · 0 评论 -
ThinkPHP总结
介绍:这是一篇tp的漏洞总结,以及一些自己遇到过或思考过的tricks,查找漏洞建议直接页面搜索版本号,例如这些关键字:5.1、5.0、3.2。确定控制器是否需要渲染模板,如果需要模板但没有则访问报错。全局搜索THINK_VERSION确定版本。RCE的洞,黑盒测试的话直接上工具就行吧。条件:目标数据库账户必须是root。问题:TP框架审计初始准备?问题:如何判断TP版本?原创 2023-01-03 11:46:36 · 355 阅读 · 0 评论 -
TP5反序列化利用链
首先是Windows类,直接全局搜索即可找到这个类,它继承了一个抽象类Pipes,学过一点PHP反序列化的你知道 要用到的类一定要写对了,毕竟反序列化的时候可是真正的去调用它的。,这也是一个可控值,并会传入input方法,熟知input方法中会调用filterValue这个tp自带的RCE触发点,并且它还需要$this->filter这个成员变量的值作为call_user-func中调用的函数,流程清晰了之后你根据链条中的调用位置,开始构造一些必须的值。好多的引用顿时让你有点头大,你不会想一个一个去看的。原创 2023-01-03 11:42:21 · 340 阅读 · 0 评论 -
Thinkphp5框架简单理解
ThinkPHP5中支持5种定义方式定义格式方式1:路由到模块/控制器‘[模块/控制器/操作]?额外参数1=值1&额外参数2=值2…’方式2:路由到重定向地址‘外部地址’(默认301重定向) 或者 [‘外部地址’,‘重定向代码’]方式3:路由到控制器的方法‘@[模块/控制器/]操作’方式4:路由到类的方法‘\完整的命名空间类::静态方法’ 或者 ‘\完整的命名空间类@动态方法’方式5:路由到闭包函数闭包函数定义(支持参数传入)原创 2023-01-03 11:30:25 · 734 阅读 · 0 评论