注入学习之sqli-labs-6(第五次)

前言

上一次课讲解的是sql基于布尔型盲注,紧接着这节讲基于时间的盲注

布尔型盲注,是在我们判断网站是否存在注入的时候,网页不会暴漏错误信息,但会返回正确的页面或者错误的页面,我们基于这种情况,用猜测的办法去获取的我们想要的信息

0x01 开始测试

但是现在有一种情况,不管你在url后面如果构造,也没永远返回一个,也就是说不会报错

如下图

正常的页面

随便在url后面加单引号

两个页面返回的是一模一样的,所以这样我们就没办法用布尔型盲注了

那怎么办呢?

道高一尺,魔高一丈

先来学几个函数

0x02 函数

1 sleep函数

Sleep()括号里面直接带上要延时的时间,比如10s就是sleep(10),效果如图

2 mysql 的if语句(函数)

格式:IF(Condition,A,B)

意义:当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。

把if 和 sleep 组合使用,如图

其实到这一应该就可以看出来,我们通过if 和sleep两个函数去组合,构造出类似我们上一节课布尔型盲注的效果。

布尔型盲注返回的是正确或者错误

时间盲注返回的是延时或者不延时

所以道理是相通的

这里直接带入第九关卡这道题目

用sleep函数去判断sql查询语句的形式

http://127.0.0.1/Less-9/?id=1 and sleep(5) --+ 直接返回页面

http://127.0.0.1/Less-9/?id=1’ and sleep(5) --+ 延时5秒才返回页面

http://127.0.0.1/Less-9/?id=1 ”and sleep(5) --+ 直接返回页面

所以我们判断该sql查询语句为

Select * from tables where id = ‘numbei’

单引号类型的查询语句

把上一节课的语句拿出来,通过if和sleep来构造

http://127.0.0.1/Less-9/?id=1' and (select if((select ascii(substr(database(),1,1))=115),sleep(10),null)) --+

115 对应的是数据库security的首字母‘s’,所以我们测试的时候,整个页面缓冲了10秒

所以,根据上面的结果

我们就可以参照上一课的盲注,利用猜测ascii的方式,来判断数据库名,表名,字段名

比如

我们猜测 当前数据库的第一个字符的ascii的值大于116

http://127.0.0.1/Less-9/?id=1' and (select if((select ascii(substr(database(),1,1))>116),sleep(10),null)) --+

执行该语句后,因为有if语句的判断,判断结果是错误的,所以返回空,页面会直接返回,那说明我们的猜测是错的

我们再猜测

http://127.0.0.1/Less-9/?id=1' and (select if((select ascii(substr(database(),1,1))>114),sleep(10),null)) --+

执行该语句后,因为有if语句的判断,判断结果是正确的,所以执行sleep(10),页面会延时10秒再返回,所以我们的猜测是对的

我们猜测当前数据库的ascii码值为114 和116之间

我们再继续猜测,就能得出正确的ascii码了,也就知道正确的字符了

余下的查询表名和字段名,除了多加if和sleep两个函数,其余的就跟上一节课一样的了,这里就不再阐述。

0x03 总结

这节演示的是第九关卡的,其实第十关卡的跟这一节几乎是一样的,除了sql查询语句是双引号类型这点不同而已。

Select * from tables where id = “numbei”

我们构造的语句只要能把双引号闭合,剩下的就都是一样的了。

所以第十关卡就不再另外讲解了。

同样的,只要我们能正确判断出该页面存在的是哪一种类型的sql注入,我们就可以借助sqlmap去处理,省事省力。

原文发布于微信公众号 - 网络安全社区悦信安(yuexin_an)

原文发表时间:2017-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

go语言的sql包原理与用法分析

go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。...

30740
来自专栏恰童鞋骚年

Hadoop学习笔记—7.计数器与自定义计数器

  在上图所示中,计数器有19个,分为四个组:File Output Format Counters、FileSystemCounters、File Input...

11920
来自专栏冰霜之地

高效的序列化/反序列化数据方式 Protobuf

上篇文章中其实已经讲过了 encode 的过程,这篇文章以 golang 为例,从代码实现的层面讲讲序列化和反序列化的过程。

62650
来自专栏Android 研究

OKHttp源码解析(五)--OKIO简介及FileSystem

okio是由square公司开发的,它补充了java.io和java.nio的不足,以便能够更加方便,快速的访问、存储和处理你的数据。OKHttp底层也是用该库...

25830
来自专栏耕耘实录

Linux三大剑客之awk

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

17940
来自专栏程序员叨叨叨

【PHP】Propel的使用,看这一篇就够了

本文为学习Propel框架使用的笔记,默认已经安装好Propel环境,若有读者不知如何安装Propel,可参考《听说你PHP配置Composer遇到了一些困境》...

47750
来自专栏浪淘沙

Spark工具包

10720
来自专栏架构师之路

一分钟学awk够用(产品经理都懂了)

1分钟懂awk-技不在深,够用就行 1.什么是AWK (1)Aho、Weinberger、Kernighan三位发明者名字首字母; (2)一个行文本处理工具; ...

28350
来自专栏wannshan(javaer,RPC)

dubbo通信消息解析过程分析(1)

由于rpc底层涉及网络编程接口,线程模型,网络数据结构,服务协议,细到字节的处理。牵涉内容较多,今天就先从一个点说起。 说说,dubbo通过netty框架做传...

52660
来自专栏JavaEE

做Java开发,你需要了解这些前言

在开发中,我们写的代码肯定是越少越好,代码层次越清晰越好。那么下面就介绍一些可以减少代码量、可以让结构更清晰的好东西。本文涉及vo、dto的使用、全局异常处理、...

15730

扫码关注云+社区

领取腾讯云代金券