SQLI-LABS(Less-7)

打印 上一主题 下一主题

主题 552|帖子 552|积分 1656

Less-7(GET-Dump into outfile-String)

打开Less-7页面,可以看到页面中间有一句Please input the ID as parameter with numeric value,那么先使用ID这个参数通过GET方式传入一个数值。

确定注入点

注入语句:?id=1。可以看出没有回显查询结果。

接着试一下?id=1',发现出错了,但是并不回显错误。也就是说我们无法从前端得知语法错误,这样就无法确定闭合符号。

接着尝试?id=1",看到没有页面显示正常,那么SQL语句可能是使用双引号进行闭合的。

使用注入语句:?id=1" --+看看是否能够正常闭合并注释,从下图看出是没有问题的。

接着尝试注入语句?id=1" and 1=1 --+和?id=1" and 1=2 --+,发现注入第一条语句时页面正常,注入第二条语句时居然也是正常的。说明之前的判断有误。

重新尝试常用的闭合语句:
  1. SQL语句原代码:
  2. '$id'
  3. "$id"
  4. ('$id')
  5. ("$id")
  6. (('id'))
  7. 闭合代码:
  8. 1' #
  9. 1" #
  10. 1') #
  11. ") #
  12. ')) #
复制代码
最后发现,本关使用的闭合语句为')),并且?id=1')) --+正常、?id=1')) and 1=1 --+正常、?id=1')) and 1=2 --+错误。由此判断此处存在注入点。

确定数据

既然本关是没有查询结果回显也不会显示语法错误信息,只能判断出存在成功和错误两种信息,那么可以考虑使用布尔型盲注,通过前端显示的是成功还是错误信息来判断注入的语句是否正确。
注入语句:?id=1')) and length((select database()))>5 --+,length()函数会返回括号内的字符串长度,例如length('abc')返回3,表示字符串长度为3,这样上述语句就变成了查询当前数据表是否存在id为1并且当前数据库名长度是否大于5,而我们知道当前数据库存在id为1的用户,那么整个注入语句就可以直接用来判断当前数据库名的长度是否大于5。


从上图中可以看出数据库名的长度是大于5的,接着判断是否当前数据库名是否小于10,使用:?id=1')) and length((select database()))

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表