首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySql延时注入

写点延时MySql延时注入的东西,介绍下SQL延时注入以及手工注入的思路webug有个基于时间的盲注点,故拿来举例

首先访问该页面,发现有提示

根据提示在url后面输入type=1尝试,发现页面内容变了

据题意猜测type参数存在注入,于是乎进行注入尝试,首先肯定是单引号,发现网页内容又变了。

然后根据SQL注入的一般思路继续尝试,发现是数字型注入,然后判断是盲注还是报错注入,经过测试发现,当输入and 1=1时,名称处值为1,当输入and 1=2时,名称处值为,到这一步可以初步确认该注入类型为基于布尔的盲注

上一步确认是基于布尔的盲注,那就跟布尔盲注的注入方法进行注入,先看数据库用户是否是root,测试其长度。

然而,事实并并不是这样,尝试了两个POC之后,发现不对,名称的值并不会改变,无法通过布尔来判断SQL语句是否执行成功。因此尝试是否可以用基于报错的注入来查询数据,使用updatexml()函数注入看是否可以通过报错来进行注入,发现页面提示变了,依旧行不通。

然报错也行不通,那就只有最后一条路了,基于时间的盲注,对其进行延时注入尝试,在and后面跟sleep()尝试,敲下回车时发现页面出现了延时,证明我插入SQL语句执行成功了

此确认了该注入是延时注入,这里介绍下延时注入,延时注入也叫基于时间的盲注,就是说在SQL注入时,网站页面不会返回SQL语句执行是否成功的提示

,这时候可以插入一些SQL时间函数根据页面返回是否延时,来判断插入的SQL语句是否执行成功。一般注入POC为’ andif(1=1,1,sleep(5)) #

在MySql延时注入里用到函数为:

sleep(*)延长查询时间,延长*秒

if(exp1,exp2,exp3)如果exp1为真,那么执行exp2,否则执行exp3

ascii()==ord()将字符传转化为ASCII码

substr()==mid()截取字符串

这里使用延时注入方法继续注入,这里测试数据库用户长度使用的POC为

and if(length(user()>1),1,sleep(5))

测试数据库用户长度,测试时发现页面返回未出现延时,证明数据库用户长度大于1

续测试,发现将数字调为20时,服务器又出现了延时,因此判断数据库长度为1-20之间。

过一番测试,发现数据库用户长度为14,其实mysql数据库使用root用户连接时,查询到的就是14位,用户为

root@localhost

这里验证下MySql数据库是不是root@localhost,将root字符串的ASCII全部找出来如下

r ----- 114

o ----- 111

t ----- 116

测试r时发现服务器并未出现延时,证明第一个字符确实是r,下面测试第二个字符

未出现延时,以及第三个第四个,那么确认了,用户为root

接下去就可以根据常规盲注的方法进行注入了,思路就是这种,下面就不一一测试了,其实可以用sqlmap直接跑,那样会很快,我在这里只是想介绍延时注入的本质,以及MySql延时注入手工注入的方法。

总结:

基于时间的盲注也叫做延时注入,其实说白了就是根据服务器返回时候延时来判断我们注入的查询语句是否执行正确。出发点就是回到基于布尔的SQL盲注,也就是构造查询语句来判断结果是否为真。

在注入时,当页面不会有任何提示,无法判断是否注入成功时使用延时注入。

使用IF(查询语句,1,sleep(5)),即如果查询语句为真,那么直接返回结果;如果查询语句为假,那么过5秒之后返回页面。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208G0XQ2700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券