sql注入总结

重新来写这个总结。
发现以前写的太机械,其实在做题过程中,很多种情况有不同的方法。
我之前写的感觉不像ctf方向,这次就从 ctf方向 写起。


一些心得(无前后顺序)

1.看页面代码,一般里面会有一些特殊的信息。

2.判断是否直接打印出query结果,这很重要,在我看来,如果直接打印就比较方便,可以很快得出你想要的结果。但是如果不是,可能需要通过盲注等方法获取

3.一些存着的语句,其实每次sql打字都很费时啊,要是直接可以复制粘贴岂不是美滋滋。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
判断字段数:?id=0' union select * from 表名 order by 数字 #
判断字段数:?id=0' union select 1,2,3--+
得出数据库等信息:?id=0' union select 1,group_concat(schema_name),3 from information_schema.schemata--+
判断数据库版本:?id=1' and left(select version(),1)=4--+
判断数
据库名:?id=1' and left(database(),1)='u'--+
判断表名:?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1)))=数字(这些盲注很多可以利用burpsuite)
判断库名:?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(5))
利用时间盲注

其实以上语句只是为了给我方便,但很多时候他都需要有一些灵活的改变,比如id那里可能本身他就是整数类型,也可能这个程序他过滤了引号等等等等。所以还是需要根本情况而定,耐心很重要。

4.一些注意点,关于url及其他语言的小知识

1
2
若空格被过滤,可以用%a0或者/**/代替,注释--+也可以用%23代替
我们通常需要在尾部加注释,平常的注释用的是#或者是-- 但是在url里面使用--+


一些书本知识

一.识别数据库
识别DBMS是很重要的,因为不同的系统注入还是有差别的。
asp和.net一般用sql server 做后台数据库;php很可能是mysql;应用如果是java写的,一般是oracle或者mysql;安装IIS的很可能是sql server;运行apache和php的linux服务器很可能是开源的mysql。
如果DBMS处于非盲态,那通过错误反馈一般可以知道DBMS的类型,但是如果处于盲态,必须通过一些查询注入才能得知。
1.非盲态跟踪
加引号,sqlserver和mysql都会在错误反馈中直接显示,oracle则会显示ORA,因为oracle有一个oracle错误消息库
关于sql server的几个内置变量:
@@version 数据库版本 @@servername 安装sql server的服务器名称 @@language 当前所使用语言的名称 @@spid 当前用户的进程ID(记住这个我也不懂怎么注入sql server呀!)
2.盲跟踪
一些简单的语法知识就不讲了
详细讲一下union查询
用union查询最重要的一点就是必须要两条语句列数相同,从本篇最上面的猜解字段我们可以判断列数,easy~接着就是类型相同,大多是字符串类型,所以一般不需要太注意
三种DBMS都可使用order by,也可以使用select 1,2,3…不过前者速度更快,而且在数据库日志中留下的痕迹少…
哦,对了,%2B是加好的意思,因为加号在html里面会被注释
有些时候你必须保证这个数据是字符串类型,需要用到强制转换,虽然我觉得不怎么用到,反正我做了一点点注入是没遇到过,但是还是记录下。
sql server:select cast(‘123’,varchar)
mysql:select cast(‘123’,char)
oracle:select cast(1,varchar) from dual
还有一个注意点,就是如果是返回几行数据的,你需要注意,union前面的条件需要为假才能使你这个查询有效。


基于时间的盲注

基本套路:if(条件,ture怎么办,false怎么办)
sleep():从时间长度判断是否正确,一般加在false里面
无法基于布尔盲注的情况下采用时间盲注


burpsuite下的sql注入

burpsuite中的intruder:手工帮你爆破,在猜解数据库名,表名,字段数时尤为有用,不过便捷程度小于sqlmap


还有一些要补充的,比如绕过之类的,晚上回来重点学文件包含和sql注入绕过以及sqlmap的使用。