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


Nginx解析漏洞復現以及哥斯拉連接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可以查看容器信息

2.2 漏洞利用

  正常訪問80端口,是一個文件上傳點,后面webshell就可以走這里上傳

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

  使用Burpsuite抓包看看返回值,發現圖片后加了一句phpinfo

  訪問http://192.168.197.128/uploadfiles/nginx.png/.php

  添加/.php后會被解析成php文件,漏洞的成因下面會說,到這里的話vulhub官網上的漏洞已經復現完成了,下面的內容主要是使用哥斯拉連接Webshell。

2.3 webshell上傳

  哥斯拉地址:https://github.com/BeichenDream/Godzilla/releases/tag/v1.00-godzilla
  這里就不多介紹了,主要功能就是生成Webshell,連接Webshell(廢話),流量加密通信,以及后續的Shell管理。
  點擊管理-生成就可以生成Shell,密碼的話就是通信時候的參數名稱,密鑰的話就是加密通信的密鑰,這兩個參數可以自定義,需要記好,后續連接webshell時需要提供。有效載荷的話就選擇PHP。

  輸個文件名選擇目錄就可以生成了

  生成結果如下

  查看Webshell內容

  Webshell生成好了之后下面就是上傳了
  ①首先直接修改文件后綴上傳

  上傳失敗,后綴與MIME的值都沒用
  ②制作圖片
  既然后綴與MIME都不管用,那應該就是校驗的文件頭(既然存在解析漏洞,其他的各種繞過就不去試了),直接做一個圖片木馬

  生成圖片內容如下

  直接上傳圖片,返回路徑

2.4 哥斯拉Webshell連接

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

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

  成功界面如下

  到這里的話流程就走完了,拿到了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

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

  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 updateapt-get install vim把vim裝好
  修改其中的session.auto_start = 1

  (修改完之后准備開心連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
  這里的10這個值是PID,使用ps aux|grep php查看,這里又出現了一個問題,docker內也沒有ps,所以想要在容器內部執行這條命令的話需要apt-get install procps安裝一下,如果是在容器外部執行命令的話應該沒這個問題

  這里看到PID就是10,然后執行kill -USR2 10

  到這里的話配置就更新完畢
  再次返回Bursuite發包查看返回信息,發現之前的WARNING變成了NOTICE

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM