1. 程式人生 > >sql注入之寬位元組注入

sql注入之寬位元組注入

Bugku上看到一道這方面的題,從網上看了不少資料,談一談自己的認識。

     

               當我們在位址列輸入單引號時頁面並沒有報錯,

        說明單引號應該被過濾了,轉義為 \'  防止注入 

                檢視原始碼

                     字元編碼為gb2312   

            注意: html中的編碼並不影響測試,本題應該是作為提示。 html編碼改成utf-8依然會實現注入

      字元編碼為gb2312  該編碼存在注入漏洞   可以繞過  \' 過濾

      儘管現在呼籲所有的程式都使用unicode編碼,所有的網站都使用utf-8編碼,來一個統一的國際規範。但仍然有很多,包括國內及國外(特別是非英語國家)的一些cms,仍然使用著自己國家的一套編碼,比如gbk,作為自己預設的編碼型別。

也有一些cms為了考慮老使用者,所以出了gbk和utf-8兩個版本。   

通常來說,一個gbk編碼漢字,佔用2個位元組。一個utf-8編碼的漢字,佔用3個位元組。

GBK 向下與 GB 2312 相容 ,可以理解為gbk是gb2312的擴充套件版本 。編碼漢字時16進位制範圍可能不同。

gbk 首位元組對應0×81-0xFE,尾位元組對應0×40-0xFE(除0×7F),剛好涵蓋了轉義符號\對應的編碼0×5C。

0xD50x5C 對應了漢字“誠”,URL編碼用百分號加字元的16進位制編碼表示字元,於是 %d5%5c 經URL解碼後為“誠”。

例如: 構造攻擊

    url提交為:www.baidu.com/test.php?username=aaa&passwrod=bbb %d5屬於首位元組大於128 可以構造範圍內的任意ascii碼

    www.baidu.com/test.php?username=aaa%d5' %20or%201=1%23&password=bbb      %20為空格 %23為註釋符號#號            

    url解碼後 username=aaa 0xd5 0×27 0×20 or 0×20 1=1 0×23

    資料庫呼叫過濾函式轉義字元單引號0x27 變成0x5c0x27 0x5c為 / 字元

    gbk編碼 0x5c0x27被認為是一個漢字 誠

強調一下 只要是前一個字元為大於(ascii碼)128即可 0x5c被通用 可以構造不同的16進位制

此時 查詢語句就為 select * from user where username=aaa誠' or 1=1 #&password=bbb

即 select * from user where username=aaa誠' or 1=1 永真 成功注入

當然 utf-8編碼不會出現這種情況 字元範圍和位元組數不同

我們再看sql注入這道題

當我們在url輸入 %df' 時頁面報錯

繁體字被寫入語句 所以開始構造,我們首先order by

頁面正常

繼續

開始聯合查詢

庫名為sql5 繼續聯合查詢

得到flag !

相關推薦

sql注入位元組注入

Bugku上看到一道這方面的題,從網上看了不少資料,談一談自己的認識。                      當我們在位址列輸入單引號時頁面並沒有報錯,         說明單引號應該被過濾了,轉義為 \'  防止注入                 

有趣的注入位元組注入

ctf:有趣的注入 (一)手注: url:http://ctf.cdusec.org:8086/sqli.php?id=1 實驗工具:火狐hackbar x001: 輸入:” ‘ “單引號無反應,再輸入" %df’ "(寬位元組注入,顯示報錯。) 截圖: x002判斷列數:判斷出

(學習)SQL注入--位元組注入

SQL注入–寬位元組注入 實踐: http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1 頁面顯示: 顯然執行的查詢語句是: select id,title from news where id = '1' 其

Sql 注入詳解:位元組注入+二次注入

sql注入漏洞 原理:由於開發者在編寫操作資料庫程式碼時,直接將外部可控引數拼接到sql 語句中,沒有經過任何過濾就直接放入到資料庫引擎中執行了。 攻擊方式: (1) 許可權較大時,直接寫入webshell 或者直接執行系統命令 (2) 許可權較小時,通過注入獲得管理

SQL注入教程——(四)位元組注入

前言 在mysql中,用於轉義(即在字串中的符號前加上”\”)的函式有addslashes,mysql_real_escape_string,mysql_escape_string等,還有一種情況是magic_quote_gpc,不過高版本的PHP將去除這個特

[轉載]sql位元組注入詳解

儘管現在呼籲所有的程式都使用unicode編碼,所有的網站都使用utf-8編碼,來一個統一的國際規範。但仍然有很多,包括國內及國外(特別是非英語國家)的一些cms,仍然使用著自己國家的一套編碼,比如gbk,作為自己預設的編碼型別。也有一些cms為了考慮老使用者,所以出了gbk

位元組注入例項

我們看一下html原始碼 看到編碼變化了 所以是寬位元組注入 所以我們要用%df來代替一個位元組 頁面正確 加個單引號頁面報錯 頁面報錯 存在注入 http://103.238.227.13:10083/?id=1%df' orde

深入探究位元組注入漏洞與修補原理

 0、前言 最近要為了自動化審計蒐集所有PHP漏洞,在整理注入的時候,發現寬位元組注入中使用iconv造成的漏洞原理沒有真正搞懂,網上的文章也說得不是很清楚,於是看了榮哥(lxsec)以前發的一篇

對於位元組注入字元的一些問題以及理解

   首先%df是url編碼形成的,查詢資料url編碼其實是ascii編碼的16進製表示,在前面加了一個%號,而對照ascii碼錶發現127號是%7F,中文的ascii碼是大於128,所以只要輸入的編碼ascii大小是大於128的,是可以測試成功的,比如說用%8F 這裡

sqli-labs————位元組注入(可以用於繞過濾了單引號或者\的WAF)

寬位元組注入的原理:原理:mysql在使用GBK編碼的時候,會認為兩個字元為一個漢字,例如%aa%5c就是一個漢字(前一個ascii碼大於128才能到漢字的範圍)。我們在過濾 ' 的時候,往往利用的思路

Spring高階注入Field值注入

filed數值(也就是靜態常量)注入是通過fieldRetrievingFactoryBean完成的,這個類用來獲取目標bean的filed數值 packageBean.superIOCfield;publicclassField...{publicstaticfina

Web漏洞處理--http host頭攻擊漏洞處理方案/檢測到目標URL存在位元組跨站漏洞/ 檢測到目標URL存在SQL注入漏洞

1.配置web 攔截器 <filter> <filter-name>XssSqlFilter</filter-name> <filter-class>com.enation.eop.Se

位元組SQL注入原理

0x01: 經典的SQL注入利用的是沒有任何防範措施的PHP使用SQL查詢語句時可以通過URL輸入造成該語句恆成立,從而可以獲得資料庫中的其他資訊。 舉個例子: <?php $name=$_GET['name'];

CFT每日一題簡單的SQL注入

首先,輸入1 嘗試一下 然後爆出ID 加 個 單引號 嘗試 ,出現報錯介面 然後 大概猜測程式碼是  select xx from XX where id='' 用and測試 發現了有過濾,經過多測實驗後,發現去掉空格就可以 然後開始構造,我們可以使用/**/

sql注入與防止SQL注入引數化處理

sql注入的兩種情況: 操作程式碼: import pymysql user = input('使用者名稱: ').strip() pwd = input('密碼: ').strip() # 連結 conn = pymysql.connect(host='localhost', user='ro

SQL注入騷姿勢小記 & 替換 繞過

https://mp.weixin.qq.com/s/ORsciwsBGQJhFdKqceprSw 1、IN之騷 這個我也偶然發現的,也不知前輩們有沒有早已總結好的套路了。w3school上對in操作符的介紹: http://www.w3school.com.cn/sql/sql_in.

SQL注入——sqli-labs-master 下載與安裝

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/84262285 注意事項,寫在前面。 php版本一定要設定成 7 以下,7之後的mysql_都改成了mysqli_**了,用7以上版本的話會報錯 **********

實驗吧Web-中-簡單的sql注入2

輸入union select、order by這些關鍵字會提示SQLi detected! 說明對於關鍵字有防護 輸入1 union也會提示SQLi detected! 但是如果去掉空格:1union,則會返回正常,1'and'1'='1(無空格)也返回正常 所以可能是過濾了空格。

實驗吧 | 簡單的sql注入3

模糊測試結果: 1)查詢成功返回 Hello ,查詢失敗無回顯。 2)查詢id = 1 ,2 ,3均有回顯。 2)再看一下現在在哪個庫裡面吧! payload3 = http://ctf5.shiyanbar.com/web/index_3.php?id=0

簡單的sql注入2WP

                     這裡我們會用到tamper,是python寫的,sqlmap一般自帶,主要的作用是繞過WAF 空格被過濾可以使用space2comment.py,過濾系統對大小寫敏感可以使用randomcase.py等等流程和簡單的sql注入之3是一樣的,不過加了–tamper而已