二次編碼注入

2022-07-09 19:30:14 字數 1862 閱讀 2117

一般情況下,通過web瀏覽器提交的資料,php**會自動將其編碼回來,如admin%3d會變為admin=

不同的指令碼語言對編碼的處理方式不同

php:urldecode() %3d-->=

寬位元組注入和二次編碼注入:

都是在面對php**或配置,對輸入的單引號進行轉義的時候,在處理使用者輸入資料時存在問題,可以繞過轉義。

寬位元組注入:

gbk編碼處理編碼的過程存在問題,可構造資料消除反斜槓\

二次編碼注入:

urldecode()與php本身處理編碼時,兩者配合失誤,可構造資料消除\

正常處理流程

使用者輸入

php自身編碼

轉義帶入sql

結果id=1%27

id=1'

id=1\『

id=1\』 and

不能注入

!(php**中使用了urldecode()等函式,放在了乙個比較尷尬的位置,與php自身編碼配合失誤。

使用者輸入

php自身編碼

轉義函式編碼

帶入sql

結果id=1%2527

id=1%27

id=1%27

id=1'

id=1' and

可注入%25 轉換之後為 %

%25進行了編碼轉換,所以%27不會再進行編碼轉換。

php自身編碼處由於是%27,並沒有單引號出現,所以不會觸發單引號轉義。

而當在不恰當的時候**中使用函式進行編碼轉換,就會將%27還原為單引號,即可造成sql注入

常規注入:

使用者輸入【1%27】=>php自身編碼【1』】=>php檢查到單引號,觸發函式,進行轉義【1\』】=>帶入sql語句【select * from users where id=』1\』』】=>不能注入

二次編碼注入:

使用者輸入【1%2527】=>php自身編碼,%25轉換成%【1%27】=>php未檢查到單引號,不轉義【1%27】=>遇到乙個函式編碼,使**進行編碼轉換【1』】=>帶入sql語句=>能注入

關鍵:編碼函式的位置,必須在轉義函式之後,帶入sql語句之前,sql語句中%27並不會轉換成單引號,如圖

將該**放在sqli-libs目錄下:

doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "">

二次編碼注入title>

head>

​welcome    dhakkan font>

​​<?php

//including the mysql connect parameters.

include("../sql-connections/sql-connect.php");

error_reporting(0);

// take the variables

if(isset($_get['id']))

else

}else

​?>

font> div

二次編碼注入

原理 php 中使用了urldecode 等編譯碼函式,放在了乙個尷尬的使用位置,與php自身編碼配合失誤 自己編寫乙個二次編碼注入的 mysql real escape string在urlencode之前,所以不能解決由於urlencode帶來的編碼問題 25 23是被自身編碼解決了的,編碼成 ...

urldecode二次編碼

if eregi hackerdj get id get id urldecode get id if get id hackerdj 定義 語法 eregi pattern,string 傳入的id值,不能等於hackerdj 傳入的id值再經過urldecode解碼 如果此時,id值等於hack...

Bugku urldecode二次編碼繞過

今日份ctf。2018年10月25日 這是一道 審計的題目。所以先來看看 eregi hackerdj get id get id urldecode get id if get id hackerdj 來整理一下說明緣由。種類的eregi就是在字串中進行匹配 然後urldecode這個,因為最近就...