重新来写这个总结。
发现以前写的太机械,其实在做题过程中,很多种情况有不同的方法。
我之前写的感觉不像ctf方向,这次就从 ctf方向 写起。
一些心得(无前后顺序)
1.看页面代码,一般里面会有一些特殊的信息。
2.判断是否直接打印出query结果,这很重要,在我看来,如果直接打印就比较方便,可以很快得出你想要的结果。但是如果不是,可能需要通过盲注等方法获取
3.一些存着的语句,其实每次sql打字都很费时啊,要是直接可以复制粘贴岂不是美滋滋。
|
|
其实以上语句只是为了给我方便,但很多时候他都需要有一些灵活的改变,比如id那里可能本身他就是整数类型,也可能这个程序他过滤了引号等等等等。所以还是需要根本情况而定,耐心很重要。
4.一些注意点,关于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的使用。