一些常见的sql注入手段
联合查询注入
这主要是针对页面可以对于输入的内容进行有效的回显。
常用的类似语句会有一下几种。
?id=-1'union select 1,2,3--+
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
盲注
盲注主要是由于输入的数据,页面无法进行有效的回显。就是说,无法从页面中得到我们想要的信息。这个过程中,我们主要是一些sql语句中的函数,比如 sleep() updatexml() floor() 这些函数。以及我们许多时候还会搭配 burp 进行暴破操作。
时间盲注
这主要是针对页面没有返回内容,主要是通过时间上的差异进行注入操作,很多时候会先通过 sleep()函数,进行切入。
布尔盲注
这种的使用途径,是对于页面对于不同的情况有返回内容,但是没有具体的信息,以及报错信息的情况。我们可以输入不同的内容,观察返回页面的不同,来进行注入操作。
常用的函数有
length(); substr(); ascll();
报错盲注
这主要是页面无法回显有效内容,但是可以有报错信息的时候进行的操作。常用的有 updatexml() extractvalue() floor() 这些之类的。
使用顺序
在盲注这一块,我的考虑顺序一般是,报错 --> 布尔-->时间 这个顺序,进行思考的,这东西,感觉更多的是个人习惯问题,还是有很多人喜欢,测试一来就用 sleep() 函数的。
堆叠注入
这种注入手段的使用场景我感觉还是有点少见,(有很大可能是我菜的原因。)这种手段如果想成功注入的话需要当调用数据库函数支持执行多条sql语句时才能够使用。其可能受到API或者数据库引擎,又或者权限的限制。但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行。
这种手段,我记得是sql labs的page 3部分有接触到过,当时印象不太深,后面在一道CTF题目上接触到过。才有了较为深刻的印象。
这个部分,废话 多了点,主要是这种注入手段,大家接触的可能会稍微少点,我就多说了几句。
原理的话,还是比较简单的,就是个;分隔,成堆的执行sql语句,例如
select * from users;show databases;
就同时执行以上两条命令,所以我们可以增删改查.如果可以权限的话,这种注入姿势,我感觉还是很6的。
sqlmap
一款基于python开发的一款sql注入扫描工具,还可以进行注入,功能强大。
总结
我在打靶场以及做题的中,大概碰到的SQL注入手段,大概就这些吧。在实际的注入过程中,应该还有涉及到一些绕过姿势的问题。现在很多网站都会有一道WAF