Mysql注入小tips --持续更新中

 

  学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入。OWASP中,Sql注入危害绝对是Top1。花了一点时间研究了下Mysql类型的注入。

    文章中的tips将会持续更新,先说说这些天研究的

    这里博主以数字类型注入类型进行讲解,字符类型同理,这里不在敖述。

    我们的环境:phpstudy+mysql+php

      我们的测试代码如下:

          

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
$id= $_GET[‘id‘];//接受get传递的参数名x的值并赋值给变量id
$conn = mysql_connect(‘127.0.0.1‘,‘root‘,‘root‘);//连接mysql数据库
mysql_select_db(‘shop‘,$conn);//选择$conn连接请求下的test数据库名
$sql = "select * from product where pid=$id";//定义sql语句并组合变量id
$result = mysql_query($sql);//执行sql语句并返回给变量result
while($row = mysql_fetch_array($result)){//遍历数组数据并显示
echo "ID:".$row[‘pid‘]."</br>";
echo "pname:".$row[‘pname‘]."</br>";
echo "info:".$row[‘pdesc‘]."</br>";
}
mysql_close($conn);//关闭数据库连接
echo "<hr>";
echo "Sql=";
echo $sql;
?>

    这里sql语句直接代入查询,没有进行过滤,所以存在sql注入。

    Sql注入的测试过程我是这样理解的,从安全测试不影响企业的角度考虑出发,不从渗透测试角度出发。

    过程如下:

    判断数据库类型--->针对数据库类型进行Sql注入探测判断是否存在Sql注入--->简单注入证明出数据库名/版本号等--->提交安全漏洞

       在实战测试中,需要大家去进行判断数据库类型然后针对性注入。本篇文章都是以Mysql数据库为例子那么咱们就没必要浪费时间了。

      大家测试sql注入都知道,如果是数字类型的,我们一般都会尝试

          

  通过and 1=1和and 1=2进行简单测试。

    但是随着安全的快速发展,现在很少能遇到and 1=1和and 1=2就能简单判断出的sql注入,多数都有过滤。那么我们这时候就需要花样式的tips的进行简单的探测是否存在sql注入。

      发现漏洞你成功了70%,写出漏洞证明你就完善了后面的30%,所以发现Sql注入这个环节很重要。

      以数字类型为例子

        在Mysql注入中有哪些语句可以代替and 1=1和and 1=2进行判断的?

        这里先从if开始讲起~

        语法:select if(expr1,expr2,expr3)

        解释:当expr1为true,则执行expr2,反之执行expr3

        在Mysql中我们知道0 =false和null=true,非0的数字代表true

        那么我们可以这样判断:

            

    通过这种方法去判断是否存在sql注入,继续衍生下去,还可以怎么玩?

      

通过if我们的组合利用将会变得多种多样,这里不一一举例子了。

      Mysql中盲注有基本的两种姿势

          1.and sleep(3)

          2.and BENCHMARK(10000000,ENCODE(‘hello‘,‘mom‘))

        如果存在注入,这两个语句都会产生延迟

              

  在前面讲了if,以sleep(3)延迟为例子,benmark延迟同理不讲解了。     

        

可以通过这种方法进行盲注测试,然后再if上继续延生下去:  

  在Mysql中和and差不多意思的语句是哪个? like?

  使用like进行判断:

      

  如果把顺序换下会怎么样?

      

    如果过滤了and怎么办?我们如何进行Sql注入判断?

    

使用xor,xor用法详细:https://blog.csdn.net/csdn_0_001/article/details/79515643

这样判断等同于and 1=1和and 1=2

    因为不想文章内容太过啰嗦,先介绍几个关系点

    1.and和like用法相近

    2.or和xor用法相近

and,like,or和xor这几个都是运算符,所以可以随便调换,所以在下面的文章中比如:and if(1,1,0)也可以like if那么同理也可以xor if(),也可以or if

    就是sql语句稍微有点差别罢了

        

继续往下:

    and /or/xor/like都能为我们所用,那between呢?事实证明可以。

    演示下:

    利用between进行盲注  

       陷入循环延迟中。。。这个延迟时间很长。。。

        

  这样也是可以判断sql注入的,那么还能怎么玩?

      

进行这样进行sql注入判断。。

      写到这里我有点累。。继续吧。。

        还是从Mysql if开始说起吧。。。

       Mysql中小数不代表false我们还可以怎么玩?

          

    通过这样尝试绕过某些限制。。

      好吧有点扯淡了。再一个要介绍Myql中的<>

    简单演示下,也能判断注入

      

那么之前就说过能and ,就能like,就能xor,就能or进行sql注入判断,实在是举例子起来太多。。

xor比较复杂点,以xor为例子吧。。。

    

  认真写一篇文章真的好累。。

      如果过滤了if我们还能怎么办。。好吧我们还有亲戚[想不到吧?]

       语法: ifnull(expr1,expr2)

       解释:如果expr1不是null就是expr1,如果expr1是null就是expr2

      简单演示下:

      

还是以xor为例子演示一遍,or like不说了

    

如果ifnull也过滤了怎么办?还有好基友帮忙:

    语法:nullif(expr1,expr2)

    解释:如果expr1等于expr2返回null,如果expr1不等于expr2返回expr1

    以xor为例子

      

然后还能测试盲注。

  

改成1试试。

  

先写这么多,等会继续写。。。

        

        

 

      

            

            

    

    

    

原文地址:https://www.cnblogs.com/piaomiaohongchen/p/9526006.html

时间: 2024-10-21 11:39:10

Mysql注入小tips --持续更新中的相关文章

MySQL 重复索引探讨(持续更新中...)

资料参考:http://xiezhenye.com/2015/01/%E6%89%BE%E5%88%B0-mysql-%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%AD%E7%9A%84%E4%B8%8D%E8%89%AF%E7%B4%A2%E5%BC%95.html <一> 创建'有问题的'表 1.创建表test1 CREATE TABLE test1 (   id int(11) NOT NULL,   f1 int(11) DEFAULT NULL,   f2 in

golang 小知识-持续更新中

Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, func . 相比 Java,Python,Javascript 等引用类型的语言,Golang 拥有类似C语言的指针这个相对古老的特性.但不同于 C 语言,Golang 的指针是单独的类型,而不是 C 语言中的 int 类型,而且也不能对指针做整数运算.从这一点看,Golang 的指针基本就是一种引用

Office 中的各种小tips(更新中)

1.Word 中打字输入会擦掉之后原有字符,出现“吃字”的情况? 要将“改写”切换为“插入”,最简单的方法就是点击键盘上小键盘旁边的“insert”键. 其实仔细观察的话,在word文档下方,会看到如图所示提示,这表示目前该文档的输入方法为“插入”,如果要改成“改写”,只需要点击一下[插入]就行了. 还有一种就比较复杂了,点击[开始]-[选项],[高级]右侧[使用insert控制改写模式]下方,有[使用改写模式],勾选即改写,不勾就是插入.如方法一不起作用,需要将[使用insert控制改写模式]

一些实战中的小技巧 (持续更新中)

经常使用的目录或命令,使用alias,减少打字数量 # 显示所有的别名 alias -p # 创建 alias gopro='cd /root/username/dir/project' alias pidpy='ps -ef | grep python' # 取消 unalias gopro 原文地址:https://www.cnblogs.com/wangjiale1024/p/11293772.html

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与目录(持续更新中...)

演示地址 帐号:admin 密码:admin123 请不要删除用户避免他人无法体验(文章中已经附带源码,源码开放到17讲下载) 快捷地址(QQ群37509873也有相应的下载):   第2讲源码下载  密码:wg0i 最新代码生成器+17讲源码下载 密码:n2ji SwfUpload在MVC4下多文件上传 密码:0ntz 也可以有偿获取一份最新源码联系QQ:729994997价格500 -------------------------------------------------------

MySQL数据库知识点整理 (持续更新中)

一.修改用户密码 格式(在命令行下输入):mysqladmin -u 用户名 -p旧密码 password 新密码 1. 给root添加密码ab12:  mysqladmin -uroot -password ab12 2. 将root的密码修改为djg345:    mysqladmin -uroot -pab12 password djg345 二.添加新用户 格式:grant 权限 on 数据库名.表名 to 用户名@登录主机  identified by "密码" 1. 增加一

阿里笔试题(2015)持续更新中

第一次做阿里笔试题,除了ACM题之外从来没有做过校招网络题呀,完全是裸考,总体感觉吧,对于我来说,感觉时间不够用,不是题不会,感觉时间紧,大脑很混乱,总结这一次的笔试题 废话不多说,直接上题和答案 平均每个人逗留时间为20分钟,那么开场前20分钟一共来了400人,且有20个人逗留时间已经到,但他们不一定出去,注意是平均时间,所有博物馆最少应该容纳500人 双向循环列表,从任何一个元素开始可以遍历全部元素 先和后面的元素相连 s->next=p->next; p->next->pre

MySQL乱码收集_持续更新

1.在mysql中执行下句成功,可添加中文的. insert into book(bookName,author,publish) values('好','hao','hao'); 但是在jsp中执行这个insert 语句就会出现乱码. 解决方案:在url后面加上?useUnicode=true&characterEncoding=utf-8 2.导入txt文件中的sql语句,乱码. 先是执行show variables like '%char%'; +---------------------

【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包含:数组类.浏览器类.日期类.函数类.数学类.媒体类.节点类.对象类.字符串类.类型检测类.正则表达式类等内容. 使用方法 1. 引入Bable transpiler以保证支持ES6 <script type="javascript/text" src="./browser