SQL各种参数类型下的注入测试

数字型-sqlilabs less2

前面文章已演示过

字符型-sqlilabs less1

前面文章已演示过

搜索型-自写测试

如:

www.test.com/index.php?id=1

www.test.com/index.php?id=abc

(搜索型,一般产生在网站的搜索框)http://www.test.com/search.php?q=1

区分参数类型的原因:

当参数类型为数字时,sql语句拼接可以不用引号或其他符号进行概括,而参数类型为字符串时,sql语句拼接必须使用引号或其他符号进行概括,从而由此分析,在进行sql注入时,如果出现符号,那么注入也要考虑符号的干扰!

本地计算机在进行文件搜索时,会经常使用通配符:"*" 星号

在数据库中搜索遍历的通配符:"%" 百分号

select * from emails where email_id like '%com%'

从上图可以看出,数据库通配符%和计算机搜索通配符*使用方法差不多

数字型和字符型的SQL语句:

选择库,表

数字型选择列,无单引号

字符型选择列,有单引号

SQL各种报错方式下的注入测试

此类报错注入旨在解决无回显下的注入测试

参考文章:

https://www.wandouip.com/t5i158282/
http://blog.sina.com.cn/s/blog_1450cc4c60102vraq.html

mysql sql语句中空格可以使用"+",“/**/”等取代

url中绕过空格使用"%20","+",“/**/”等取代

注:MySQL 5.1.5版本后才包含ExtractValue()和UpdateXML()这2个函数

updatexml报错-sqlilabs less5

updatexml()函数是MYSQL对XML文档数据进行查询和修改的XPATH函数

updatexml()函数与extractvalue()类似,是更新xml文档的函数。

语法:updatexml(目标xml文档,xml路径,更新的内容)

如:

select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))

报错方式相同:

如:

select username from security.user where id=1 and (updatexml(‘anything’,concat(‘~’,(select database())),’anything’))

可构造如下payload:

?id=1' and 1=(updatexml(1,concat(0x3a,(select version())),1))--+

?id=1' and 1=(updatexml(1,concat(0x3a,(select table_name from information_schema.tables limit 0,1)),1))--+

updatexml的爆错原因很简单,updatexml第二个参数需要的是Xpath格式的字符串。我们输入的显然不符合。故报错由此报错

updatexml的最大长度是32位的,所以有所局限(PS:但是应对大多的已经足够。)

如果密码长度超过了32位就不会被显示出来。

payload分析:

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据

extractvalue报错-sqlilabs less5

extractvalue()函数也是MYSQL对XML文档数据进行查询和修改的XPATH函数

可构造payload:

?id=1' and extractvalue(1,concat(0x7e,user()))--+

?id=1' and extractvalue(1,concat(0x5c,(select table_name from information_schema.tables limit 1)))--+

payload分析:

ExtractValue(xml_frag, xpath_expr)

ExtractValue()接受两个字符串参数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。

第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径

例如:SELECT ExtractValue('<a><b><b/></a>', '/a/b'); 就是寻找前一段xml文档内容中的a节点下的b节点,这里如果Xpath格式语法书写错误的话,就会报错。这里就是利用这个特性来获得我们想要知道的内容。

floor报错-sqlilabs less5

构造payload:

?id=1'+and+(select+1+from+(select+count(*),concat(version(),floor(rand(0)*2))x+from+information_schema.tables+group+by+x)a)--+

?id=-1' and(select 1 from (select count(*),concat((select table_name from information_schema.tables limit 3,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

文章分析payload ,详细讲解双查询注入:

https://blog.csdn.net/lixiangminghate/article/details/80466257

当在一个聚合函数,比如count函数后面如果使用分组语句(group by)就会把查询的一部分以错误的形式显示出来

可以在database()替换要查询的函数

SQL各种查询方式下的注入测试

select 查询数据

在网站应用中进行数据显示查询操作,前面演示的很多都是

insert 插入数据-sqlilabs less18

在网站应用中进行用户注册添加等操作

在登录界面输入的用户名需要进数据库查询,有这用户才可以进行下一步执行

用admin账号密码登录一下

同时用seay审计工具的mysql监控插件,监控SQL命令的执行

可以看到有个insert的SQL语句,把它复制到MySQL命令行执行

从SQL命令中插入的参数中,有useragent,ip,username插入了数据库

username参数想要插入到数据库,就先要通过数据库里面正确的账号密码插入,数据库没有的就不能通过,所以在这两个框中不能进行语句注入

但是看到这里有ip和useragent插入数据库,我们可以在这上面注入,加个单引号报错了:

猜想在数据中的sql语句为:INSEERT INTO table VALUES('User-Agent','Ip','Username')

接下来我们尝试在User-Agent的位置进行注入测试,我们修改User-Agnet的值使其符合整个INSERT INTIO 的语法,闭合后就应该为

INSEERT INTO table VALUES('1' ,1,1)#','Ip','Username'),成功绕过

运用payload:

delete 删除数据

后台管理里面删除文章删除用户等操作

update 更新数据

数据同步缓存等操作

通过以上查询方式与网站应用的关系,可以由注入点产生地方或应用猜测到对方的SQL查询方式

深入浅出带你玩转sqlilabs(四)-updatexml(),floor(),extractvalue()报错注入的更多相关文章

  1. 深入浅出带你玩转sqlilabs(三)--GET,POST,COOKIE,万能密码注入

    常见提交方式下的注入漏洞 WEB应用在数据传递接受中,针对SQL注入安全漏洞,由于数据大小,格式等原因,脚本在接受传递时会有多种传递方式,传递方式的不同将影响到安全测试的不同 第一点:数据常见提交方式 ...

  2. 深入浅出带你玩转sqlilabs(二)

    MYSQL高权限注入 mysql跨库注入 详情请看上一篇:深入浅出带你玩转sqlilabs(一) mysql文件操作注入-sqlilabs less7 可能用到的函数: into outfile()函 ...

  3. 深入浅出带你玩转sqlilabs(一)

    一.MySQL数据库结构分层 1.1库名,表名,列名,数据库用户等 Mysql数据库结构示例: 数据库A zblog = www.zblog.com 表名 列名(字段) 数据 数据库B dede = ...

  4. sqli-labs lesson5-6 布尔盲注 报错注入 延时注入

    LESSON 5: 典型的布尔盲注. 盲注:sql注入过程中,sql语句的执行结果不回显到前端,这个时候就只能用一些别的方法进行判断或者尝试,这个判断或者尝试就叫做盲注.盲注又分为:1.基于布尔SQL ...

  5. 深入浅出带你玩转sqlilabs(五)-布尔/延时盲注与二次注入

    SQL测试-基于布尔,延时盲注 布尔,延时注入常用到的判断语句 regexp regexp '^xiaodi[a-z]' 匹配xiaodi及xiaodi...等 if if(条件,5,0) 条件成立 ...

  6. updatexml , extractvalue 报错注入

    过滤了union, < ,> = 空格过滤,()没有被过滤 updatexml没有被过滤 那么就不能用布尔类型注入 数据库名 username=admin'or(updatexml(1,c ...

  7. 大哥带我走渗透4(中)----oracle报错注入

    5/30 报错注入 0x01 准备阶段 1. 基础知识今天了解了,但是,只能看懂和最基本的理解,不能自己上路.所以,还是要不停学习基础.并且及时总结.这有一篇很详细的文章:https://www.cn ...

  8. SQL注入汇总(手注,盲注,报错注入,宽字节,二次编码,http头部){10.22、23 第二十四 二十五天}

    首先什么是SQL注入: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. SQL注入有什么危害? 危害:数据泄露.脱库 ...

  9. sql报错注入:extractvalue、updatexml报错原理

    报错注入:extractvalue.updatexml报错原理 MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue.updatexml 名称 描述 Ext ...

随机推荐

  1. CMDB项目要点总结之中控机

    1.基于paramiko对远程主机执行命令操作 秘钥形式 private_key = paramiko.RSAKey.from_private_key_file('c:/Users/用户名/.ssh/ ...

  2. LZZY高级语言程序设计之169页**5.17

    import java.util.Scanner;public class MQ3 { public static void main(String[] args) { Scanner sc = ne ...

  3. Gevent高并发网络库精解

    进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程.多线程.协程和异步. 多进程编程在python中有类似C的os.fork,更高层封装的有multiprocessing标准库 多线程 ...

  4. Cookie与Session的安全性

    说到cookie与session我们首先要说一下为什么要引入这两个东西,这两个多西到底是干什么的 起源 由于HTTP协议使无状态的: 每一次请求都是新的请求,不会记得之前通信的状态 客户端与服务端的一 ...

  5. PTA 数组循环右移

    6-2 数组循环右移 (20 分)   本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>)个整数,将每个整数循环向右移m(≥)个位置,即将a中的数据由(a​0​​a​1​​⋯ ...

  6. 【Linux学习笔记1】-centos6.9部署django

    一,centos6.9部署django ​ 部署套件:centos6.9+nginx+mysql+uwsgi+python3+django ​ 首先还是要明白这几个部分之间的关系(自己也是初学者,希望 ...

  7. 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API

    上一篇写的是使用静态基类方法的实现步骤:  http://www.cnblogs.com/cgzl/p/8726805.html 使用dynamic (ExpandoObject)的好处就是可以动态组 ...

  8. webpack核心模块tapable源码解析

    上一篇文章我写了tapable的基本用法,我们知道他是一个增强版版的发布订阅模式,本文想来学习下他的源码.tapable的源码我读了一下,发现他的抽象程度比较高,直接扎进去反而会让人云里雾里的,所以本 ...

  9. js数组reduce解析及使用示例

    reduce() 简单说,reduce()可以对数组中的每个元素执行一个由您提供的reducer函数(升序执行),函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后将其结果汇总为单个返 ...

  10. 第三单元总结——JML契约式编程

    OO第三单元博客作业--JML与契约式编程 OO第三单元的三次作业都是在课程组的JML规格下完成.完成作业的过程是契约式编程的过程:设计者完成规格设计,实现者按照规格具体实现.作业正确性的检查同样围绕 ...