天天看點

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

目錄

  • 1. 環境
  • 2. 過程
    • 2.1 vulhub鏡像拉取
    • 2.2 漏洞利用
    • 2.3 webshell上傳
    • 2.4 哥斯拉Webshell連接配接
  • 3. 原理分析
  • 4. 踩坑
    • 4.1 Webshell連接配接不上

1. 環境

  kali linux

  docker+vulhub

  nginx(1.19.6)+php(7.4.15)

2. 過程

2.1 vulhub鏡像拉取

  vulhub安裝的話去官網上有安裝教程

  https://vulhub.org/

  安裝好之後進入到對應的目錄下

  運作

docker-compose up -d

  完成之後

docker ps -a

可以檢視容器資訊

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

2.2 漏洞利用

  正常通路80端口,是一個檔案上傳點,後面webshell就可以走這裡上傳

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  再去看看官網給出的示例,通路http://192.168.197.128/uploadfiles/nginx.png

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  使用Burpsuite抓包看看傳回值,發現圖檔後加了一句phpinfo

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  通路http://192.168.197.128/uploadfiles/nginx.png/.php

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  添加/.php後會被解析成php檔案,漏洞的成因下面會說,到這裡的話vulhub官網上的漏洞已經複現完成了,下面的内容主要是使用哥斯拉連接配接Webshell。

2.3 webshell上傳

  哥斯拉位址:https://github.com/BeichenDream/Godzilla/releases/tag/v1.00-godzilla

  這裡就不多介紹了,主要功能就是生成Webshell,連接配接Webshell(廢話),流量加密通信,以及後續的Shell管理。

  點選管理-生成就可以生成Shell,密碼的話就是通信時候的參數名稱,密鑰的話就是加密通信的密鑰,這兩個參數可以自定義,需要記好,後續連接配接webshell時需要提供。有效載荷的話就選擇PHP。

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  輸個檔案名選擇目錄就可以生成了

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  生成結果如下

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  檢視Webshell内容

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  Webshell生成好了之後下面就是上傳了

  ①首先直接修改檔案字尾上傳

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  上傳失敗,字尾與MIME的值都沒用

  ②制作圖檔

  既然字尾與MIME都不管用,那應該就是校驗的檔案頭(既然存在解析漏洞,其他的各種繞過就不去試了),直接做一個圖檔木馬

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  生成圖檔内容如下

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  直接上傳圖檔,傳回路徑

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

2.4 哥斯拉Webshell連接配接

  點選目标-添加,把之前的配置再輸一遍就行,注意url這裡填的的存在解析漏洞的路徑,也就是/.php,這裡使用http代理,走8080端口,這樣就可以用Burpsuite抓包了。

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  配置完之後右鍵點選進入,就連上了(實際情況在這裡猛踩坑)

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  成功界面如下

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  到這裡的話流程就走完了,拿到了Webshell,下一步就開始提權了,那就是另外的一回事了。

3. 原理分析

  這一漏洞是因為Nginx中php配置不當造成的,與Nginx版本無關

  ①

cgi.fix_pathinfo=1

  這個參數值為1,表示開啟,即當解析遇到不存在的路徑時,就會去掉該項,繼續依次解析,是以當

aaa.jpg/.php

被解析時,便會去掉

/.php

,繼續解析

aaa.jpg

  ②

security.limit_extensions = .php .jpg

  這個參數限制了可執行檔案的字尾,預設隻允許執行.php檔案,配置不當的話就會執行jpg檔案。

4. 踩坑

4.1 Webshell連接配接不上

  開心上傳Webshell後,竟然連不上去,用Burpsuite抓包檢視報了這個錯誤,具體的原因沒有深究,百度了一下解決方法就是修改php.ini配置檔案中的

session.auto_start = 1

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  之前的phpinfo内有相關路徑(/usr/local/etc/php/conf.d/php.ini)

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  

docker exec -t -i nginx_parsing_vulnerability_php_1

進入php容器

  進去之後發現conf.d目錄下沒有php.ini檔案,然後把上級目錄下的php.ini-development這個檔案拷貝過去

cp php.ini-development /usr/local/etc/php/conf.d/php.ini

  拷貝過去之後準備編輯檔案,發現docker沒有vim,然後一頓操作

apt-get update

apt-get install vim

把vim裝好

  修改其中的

session.auto_start = 1

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  (修改完之後準備開心連Webshell時,突然想起來這個配置要更新一下,但是之前很少使用docker,也不曉得怎麼重新開機容器内環境,就手賤docker restart了php容器,至此前面的所有工作全部白費,再重來一遍)

  由于安裝的是php-fpm,支援USER2信号,這個信号用于重新加載配置檔案

  容器内部執行

kill -USR2 10

  容器外部執行

docker exec -it nginx_parsing_vulnerability_php_1 ps aux

docker exec -it nginx_parsing_vulnerability_php_1 kill -USR2 10

  這裡的

1

這個值就是程序号了,使用

ps aux|grep php

檢視,這裡又出現了一個問題,docker内也沒有ps,是以想要在容器内部執行這條指令的話需要

apt-get install procps

安裝一下,如果是在容器外部執行指令的話應該沒這個問題

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  這裡看到程序号就是10,然後執行

kill -USR2 10

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  到這裡的話配置就更新完畢

  再次傳回Bursuite發包檢視傳回資訊,發現之前的WARNING變成了NOTICE

Nginx解析漏洞複現以及哥斯拉連接配接Webshell實踐

  再次使用哥斯拉就可以連上Webshell了