sql注入篇2
一、前言
上一篇:sql注入篇1
二、基于回显的注入类型判断
1、有结果的注入
例如下图:

(sqlllab less-1)可以看到有正常结果返回,对于的利用方式就是老套路了,先order by查询出当前语句查询的列数,在使用union查询一一爆数据,当然,也可以使用脚本直接脱库。


2、基于布尔值的注入
通俗来说,就是盲注,回显的页面不会出现任何有关数据的结果,但会显示一些特殊的显示,可以判断我们猜测正确与否。例如下图(sqllab less-5):


上面两张截图中,第一张id=1,第二张id=-1,但在数据库中id这个参数是没有-1这个值的,所以第二张截图中,页面返回空(之所以出现sql语句,是我更改了源码显示在页面,方便研究学习用的),而在第一张截图中id=1,结果为真,页面返回来you are in....这个特殊的标志,我们可以理解为出现you are in...为真,反之,页面不返回任何东西为假。基于此,我们可以猜测出整个数据库中的数据(一般直接跑sqlmap 或者写脚本跑,下图是sqlmap结果)

当然,我们也可以手动注入,在手动注入之前,先介绍一下一些用于注入的相关函数,常用于基于布尔注入的函数有mid,substr,length等等,更多的就不在这里说了,想要了解更多的或者想要了解其用法的可以百度或者谷歌,个人觉得这篇文章写得挺好的,感兴趣可以去看一下或者百度。
介绍完相关函数后,针对sqllab less-5这一关,我们可以实际动手来尝试一下手动注入:
利用http://127.0.0.1:9001/sqllab/Less-5/?id=1%27%20and%20mid(database(),1,1)=%27s%27%23猜测出当前正在使用的数据库名字第一个字母为s(当然,这里只是演示,一般常规注入步骤是先猜解出数据库名字长度,在一一猜解出来),剩下的常规的漫长道路了,当然,这种需要大量手动数据猜测的,建议使用自动化的工具,如sqlmap或者动手能力强的直接写脚本爆破(笔者的脚本不知道丢到哪里去了,所以以后找到了或者重新写一次之后再放出来吧)。

3、基于报错的注入
通俗来说,就是页面不回显任何有关数据的结果,包括真假值,但是通过使用一些函数会显示报错信息,从而暴露了数据库的相关信息。
a、floor注入
(1)、原理
原理讲解语文水平能力不行(逃。。。),这里附上一遍文章链接,对floor报错注入原理讲得非常清楚。
(2)、利用
poc: select * from users where id=1 and(select 1 from (select count(*) ,concat(database(),floor(rand(0)*2))x from users group by x)a)

b、extractvalue()报错注入
(1)、原理
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
作用:从目标XML中返回包含所查询值的字符串
函数的XPath_string必须满足Xpath语法,否则就会报错,这样我们就可以利用此报错来爆出我们想要的信息。
(2)、利用
以wuzhicms为例,poc: http://192.168.116.129/index.php?m=promote&f=index&v=search&_su=wuzhicms&fieldtype=place&keywords=%27%20and+extractvalue(1,concat(0x7e,(select database())))%23(192.168.116.129是笔者自己搭建用作搭载wuzhicms的虚拟机服务器),如图所示:

成功爆出当前数据库wuzhicms。(更多有关wuzhicms(cve-2018-14515)参见笔者的这篇文章)更多有关extractvalue()报错注入可以参见这篇文章,这篇博客写得挺详细的。
c、UpdateXml报错注入
(1)、原理
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
参数Xpath_string的要求与EXTRACTVALUE函数相同。
(2)、利用
updatexml函数使用语法和extractvalue()差不多,这里就不在讲了。
d、关于爆错注入其实远不止这上面所说的三种,还有很多,这里只写了常见的三种,对其余报错注入有兴趣的可以自己去百度。
4、基于时间的注入
基于时间注入通过判读页面返回时间长短来得到数据。常用的函数有sleep()、benchmark().
(1)、sleep()
以sqllab less-9为例,poc如下:http://127.0.0.1:9001/sqllab/Less-9/?id=1%27%20and%20if((mid(database(),1,1)=%27s%27),sleep(5),1)%23(poc解释:如果当前数据库名字第一个字母为s,执行sleep(5),否则执行1)。

从截图返回的结果中,我们可以看到返回时间为6.03秒,说明当前数据库名字第一个字母为s,其余数据查询也一样,这里不再做过多说明。
(2)、benchamark()
benchmark()有两个参数,第一个是执行次数,第二个是要执行的表达式,这里还是以sqllab less-9为例,poc如下:http://127.0.0.1:9001/sqllab/Less-9/?id=1%27%20and%20if((mid(database(),1,1)=%27s%27),benchmark(10000000,md5(123)),1)%23(poc解释:如果当前数据库名字第一个字母为s,执行benchamark函数,执行1000000次md5(123),否则执行1),截图如下:

可以看见页面返回时间为3.31秒,说明当前数据库名字第一个字母为s(如果返回时间不明显,可以增加benchmark函数中执行次数的量级),其余数据的猜测就是常规操作了,这里不再讲解。
三、结束语
对sql注入的讲解就到这里,sql注入的知识其实远不止这些,感兴趣的可以百度或者谷歌,如果上述有不对的地方,还请谅解,毕竟作者还是一菜鸟,完结,撒花。

sql注入篇2的更多相关文章
- [转载] 我的WafBypass之道(SQL注入篇)
我的WafBypass之道(SQL注入篇) Web安全 作者:先知技术社区 2016-11-23 7,566 [本文转自安全脉搏战略合作伙伴先知技术社区 原帖地址 安全脉搏编辑huan97 ...
- sql注入篇1
一.前言 学习了感觉很久的渗透,总结一下sql注入,系统整理一下sql注入思路. 二.关于sql注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到 ...
- Java审计之SQL注入篇
Java审计之SQL注入篇 0x00 前言 本篇文章作为Java Web 审计的一个入门文,也是我的第一篇审计文,后面打算更新一个小系列,来记录一下我的审计学习的成长. 0x01 JDBC 注入分析 ...
- Sql server之sql注入篇
SQL Injection 关于sql注入的危害在这里就不多做介绍了,相信大家也知道其中的厉害关系.这里有一些sql注入的事件大家感兴趣可以看一下 防范sql注入的方法无非有以下几种: 1.使用类型安 ...
- 我的WafBypass之道(SQL注入篇)
原帖地址:https://xianzhi.aliyun.com/forum/read/349.html 0x00 前言 去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常 谈的话题 ...
- 什么,有狗快跑!慢着,这次手把手教你怎么过安全狗!(sql注入篇)
前言 在记忆里上次绕安全狗还是在上次,开开心心把自己之前绕过狗的payload拿出来,发现全部被拦截了,事情一下子就严肃起来了,这就开整. 环境 本次环境如下sqli-lab的sql注入靶场 网站安全 ...
- SQL注入篇——sqli-labs各关卡方法介绍
主要是记下来了每关通过可以采用的注入方式,可能部分关卡的通关方式写的不全面,欢迎指出,具体的获取数据库信息请手动操作一下. 环境初始界面如下: sql注入流程语句: order by 3--+ #判断 ...
- SQL注入篇——sqli-labs各关卡方法介绍|1-65
主要是记下来了每关通过可以采用的注入方式,可能部分关卡的通关方式写的不全面,欢迎指出,具体的获取数据库信息请手动操作一下. 环境初始界面如下: sql注入流程语句: order by 3--+ #判断 ...
- WAF Bypass 笔记(SQL注入篇)
0x01 背景 waf Bypass 笔记 0x02 服务器特性 1.%特性(ASP+IIS) 在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF ...
随机推荐
- php身份证号的验证
//身份证号验证 03 protected function checkIdCard(){ 04 if(empty($_POST['idcard'])){ 05 return false; 06 } ...
- Android开发之旅(1) 之 Android 开发环境搭建
工作室原创出品,欢迎转载,欢迎交流. 转载请注明原文:http://www.cnblogs.com/wangleiblog/p/6019063.html Android开发之旅目录 1 前言 很多朋友 ...
- SQL Server 2012设置某用户对某些表的记录限制其删除操作
第一步:用sa用户进入SSMS: 第二步:在安全性---用户上面点击右键---"属性": 第三步:在选择页中选择”安全对象“,点击”搜索“,弹出添加对象页面,这里默认为特定对象不用 ...
- Hadoop 学习之路(一)—— 分布式文件系统 HDFS
一.介绍 HDFS (Hadoop Distributed File System)是Hadoop下的分布式文件系统,具有高容错.高吞吐量等特性,可以部署在低成本的硬件上. 二.HDFS 设计原理 2 ...
- 系统学习 Java IO (十三)----字符读写 Reader/Writer 及其常用子类
目录:系统学习 Java IO---- 目录,概览 Reader Reader 类是 Java IO API 中所有 Reader 子类的基类. Reader 类似于 InputStream ,除了它 ...
- Python解释器安装教程以及环境变量配置
Python3.6安装 打开官网:http://www.python.org,下载python3.6.如下图: 下载完成后进行安装.如下图: 验证环境是否配置成功 打开cmd,输入python,按回车 ...
- JS的第一天,精彩内容
1.JS 介绍 js的全称是JavaScript,它是一门前台语言 Java是一门后台语言 ,它们两个之间毫无关系 JavaScript的作者是布兰登,艾奇 前台语言:运行在客户端 后台语言:与数据库 ...
- 使用SQL行转列函数pivot遇到的问题
背景:对投票的结果按照单位进行汇总统计,数据库中表记录的各个账号对各个选项的投票记录.马上想到一个解决方案,先根据单位和选项进行Group By,然后再行转列得出单位对各个选项的投票情况. with ...
- Smobiler实现手机弹窗
前言 在实际项目中有很多场景需要用到弹窗,如图1 那么这些弹窗在Smobiler中如何实现呢? 正文 Smobiler实现弹窗有两种方式:1.MessageBox.Show 2.ShowDialog和 ...
- Java的一些基础知识,现在回顾一下,毕竟学了那么久!
一.基础知识:1.什么是JVM.JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性,java语言是跨平台,jvm不是跨平台的,jv ...