記一次歷史業務安全測試

  • 2019 年 12 月 12 日
  • 筆記

來源:http://www.51testing.com

最近在對公司歷史遺留的老業務進行安全測試,簡單記錄一下測試的過程。

  子域名是http://upload.xxxx.com/

  主頁是一個phpinfo的頁面,首先對網站進行文件掃描。

  wfuzz -w common.txt -z list,-.php-.html –hw 76 http://upload.xxxx.com/FUZZFUZ2Z

********************************************************  * Wfuzz 2.3.4 – The Web Fuzzer *  ********************************************************  Target: http://upload.xxxx.com/FUZZFUZ2Z  Total requests: 13839  ==================================================================  ID Response Lines Word Chars Payload  ==================================================================  003313: C=200 5 L 11 W 203 Ch "crossdomain.xml – "  006047: C=200 562 L 2593 W 46219 Ch "index – .php"  006058: C=200 562 L 2593 W 46219 Ch "index.php – "  008776: C=301 0 L 0 W 0 Ch "php – "  012639: C=200 86 L 179 W 2315 Ch "uploadfile – .html"  Total time: 131.0165  Processed Requests: 13839  Filtered Requests: 13834  Requests/sec.: 105.6279

掃描結果中index.php為首頁的phpinfo頁面,另外掃描發現了php目錄和uploadfile.html文件。

  訪問php目錄返回401錯誤:

  pic2

  http://upload.xxxx.com/uploadfile.html 為空白頁

  pic3

  查看源代碼有所發現:

  pic4

  這裡猜測phpPath為php目錄,結果證實了我的猜想:

  pic5

  構造參數:

  pic6

  上次文件,查看返回:

  pic7

  圖片成功上傳,另外發現了一個命名疑似圖片裁剪的文件phpcutPhoto.php

  先測試了文件上傳漏洞,發現服務器進行了圖片驗證,然後強制改後綴,此路不通

  訪問http://upload.xxxx.com/php/phpcutPhoto.php 發現文件不存在,這裡走了些彎路

  後面測試發現地址應該是http://upload.xxxx.com/php/cutPhoto.php

  前面uploadHead.php中phpPath參數值為php,所以後面文件名誤加了php,這裡應該是以前的代碼有bug

  pic8

  訪問後提示打開失敗,明顯是缺少了圖片地址的參數,這裡可以使用WAScan、Arjun等工具進行參數爆破。我這裡就簡單用burpsuite fuzz爆破一下:

  pic9

  參數名可以考慮使用https://github.com/s0md3v/Arjun/blob/master/db/params.txt 里的參數名。

  這裡我自己簡單構造了一些常見的,沒包括首字母大寫的情況:

img  image  images  imgpath  img_path  file  filename  path  file_path  filepath

  參數Fuzz爆破結果:

  pic10

  返回中可以看到,雖然報了錯誤,但是圖片剪切後的文件成功生成了:

  pic11

  訪問同服務器的圖片域名,發現文件存在:

  pic12

  現在我們可以來測試這個接口的本地文件讀取和ssrf漏洞

  先測試本地文件包含:

  pic13

  path=/etc/passwd,返回/etc/passwd.jpg.jpg打開失敗

  把path改成一個不存在的文件:

  pic14

  path=/etc/test,返回/etc/test打開失敗

  當path為一個存在目錄的情況:

  pic15

  測試發現讀取一個存在的非圖片後綴文件或目錄時,會自動把path加上.jpg.jpg

  這樣的話我們只能通過這個接口探測服務器的文件或目錄,但無法進行正常的文件讀取的操作

  另外我測試了ssrf,發現無法直接訪問外部鏈接

  pic16

  突然發現忘記了php偽協議的操作

  pic17

  php://input沒戲,另外嘗試了其它協議配合截斷讀取的方法,也都以失敗告終。

  但當我測試到path=php://filter/read=string.tolower/resource=http://m3rryz.com/ 返回有了數據

  pic18

  並且我的blog獲取到了服務器的請求:

  pic19

  可以看到服務器請求了http://myblog.com/.jpg.jpg 並返回了404

  那麼當我在blog上,構造一個x.jpg.jpg的文件,內容為/etc/passwd

  然後讓path=php://filter/read=string.tolower/resource=http://m3rryz.com/x

  是否就可以繞過之前的限制,進行本地文件讀取呢?

  然而現實很殘酷:

  pic20

  這裡path必須為真實圖片,否則無法進行cut操作。:(

  不過過程還是有點意思的,對文件讀取和ssrf漏洞了解更深了一些。

星雲測試

http://www.teststars.cc

奇林軟件

http://www.kylinpet.com

聯合通測

http://www.quicktesting.net