原理
SQL注入,简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程。
思路
(1)找注入点,构造特殊语句 (2)收集后台数据库信息,判断数据库类型,确定注入的方式。 (3)通过构造的特殊语句返回的结果,查询表名、列名、字段名以及字段值,猜解用户名和密码。 (4)找到后台可以登录的地址,进一步提权,入侵Web服务器和数据库服务器等。
注入类型
这里按照执行之后的效果来分,一般有四种: (1)联合查询注入 基本语句select 语句 union[union选项] select 语句; 所谓联合查询注入即是使用union合并两个或多个SELECT语句的结果集,所以两个及以上的select必须有相同列、且各列的数据类型也都相同。联合查询注入可在链接最后添加order by 9基于随意数字的注入,根据页面的返回结果来判断站点中的字段数目。但是这个前提是页面要有显示位 (2)报错注入 这种方法页面没有显示位,当echo mysql_error();函数输出了错误信息的时候,就可以使用,但是此种方法语句比较复杂 (3)时间盲注 盲注,顾名思义适合页面不显示任何数据查询结果,基于时间的盲注用于不管执行的SQL语句正确与否,页面都不会给任何提示的情况,只能通过时间判断。比如可以通过判断页面响应时间来猜数据库名的长度等。一般有用到延时函数sleep(),if(c,a,b),如果c为真执行a,否则执行b。
(4)布尔型盲注 这种方法和时间盲注类似,但是页面有正常和不正常两种情况,通过true和false来猜解数据,速度比较慢,基于bool的盲注通常用函数length(),返回长度,ascii(),返回ASCII值,substr(string,a,b),返回string以a开头,长度为b的字符串,count(),返回数量。
SQL注入相关例题
点击维护通知,有显示位,发现有参数id=1,考虑联合查询注入,用sql语句order by 1到9查字段数,发现是4 接着,and 1=2 UNION SELECT 1,2,3,4查看出错的字段,在2,3处, 验证数据库的类型及名称,利用数据库information_schema 的 schemata 、table、column表查表 、列查表进而查看它的值, 最后查数据,两串数据都尝试一下
试了试,还是登不进去,考虑加密,最后终于成功,
|