Author:m3d1t10n

前两天看到phithon大大在乌云发的关于ThinkPHP的漏洞,想看看是什么原因造成的。可惜还没有公开,于是就自己回来分析了一下。

0x00官方补丁(DB.class.php parseWhereItem($key,$val))
注意红色框框起来的部分
ThinkPHP 3.1、3.2一个通用的漏洞分析

0x01分析

 

 
 
 
 
 
PHP
 
1
2
3
//该正则没有起始符和终止符,xxxxinxxxxx等任意包含in的字符串都可以匹配成功,因而构成了注入
 
//同上

 

0x02验证

 

 
 
 
 
 
 
PHP
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
{
;
;
;
;
      
      
;
;
;
//   打印sql语句
;
// 打印数据
//  打印错误

 

1.1正常访问
ThinkPHP 3.1、3.2一个通用的漏洞分析
1.2poc
ThinkPHP 3.1、3.2一个通用的漏洞分析

0x03编写支持此注入的tamper (支持mysql)
3.1由于php中有这样一段话,会将我们插入的语句全变成大写,所以我们要将payloa做一个转换

 

 
 
 
 
 
 
PHP
 
1
;

 

3.2sqlmap mysql error based 注入语句

 

 
 
 
 
 
 
Transact-SQL
 
1
2
)
/**其中的0x3a7a61623a等十六进制字符会因为x变成大写而报错,所以我们需要将他们匹配出来变成小写的  **/

 

3.3sqlmap myql boolean blind 注入语句

 
 
 
 
 
 
Transact-SQL
 
1
2
3
4
5
6
7
8
9
10
11
12
13
51
 
 
51
/**
因为>会被thinkphp进行实体编码,所以我们需要将整条语句换成
floor(payload / num.5)
例如:
52>51==1 为真
floor(52/51.5)==1  为真
51>51==0 为假
floor(51/51.5)==0 为假 **/

3.4最后的tamper代码

 

 
 
 
 
 
 
Python
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#__author__ = 'm3d1t10n'
re
binascii
:
}
)
:
  
:
)
payload
subfix
)
#print payload
:
)
#print payload
payload

 

0x04sqlmap 本地测试
4.1boolean based
ThinkPHP 3.1、3.2一个通用的漏洞分析

ThinkPHP 3.1、3.2一个通用的漏洞分析

ThinkPHP 3.1、3.2一个通用的漏洞分析

thinkphp.py

相关文章:

  • 2022-01-10
  • 2021-05-16
  • 2021-10-31
  • 2021-05-19
  • 2021-06-09
  • 2022-12-23
  • 2022-02-06
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-05
  • 2022-12-23
  • 1970-01-01
  • 2022-12-23
  • 2021-11-10
相关资源
相似解决方案