最近重新看sql注入,做一下总结,然后说一下做题的思路吧。
sql注入,我们在找的时候,要找与数据库交互的点,也就是我们要找的注入点,如果没有与数据库进行交互,都不存在sql注入了,注入点找了过后我们要找它是数字型还是字符型,如果说是字符型我们还要找到闭合的方式,是怎么来进行闭合的,闭合比较难判断的,因为你不知道后端是怎么进行闭合的,闭合过后,我们要观察是否有明确的回显,如果有我们使用union select联合注入,回显不怎么明确的话,可以试试报错注入,如果有真假界面我们使用布尔盲注,如果都没有我们只要进行盲注了,时间盲注等等,去慢慢的猜数据。这就是大概的思路,但是说起来简单,实操却不是这样的。
比如说有过滤,我们要尝试绕过,就要去猜后端是怎么进行过滤的,大小写,重写,编码,替换等价的函数,拼接的操作这些方法能不能进行绕过,这些都是要靠经验的。
说这么多了开始实操一题
打开靶机开始做题
开始测试注入点还是常规操作?id=1 开始找注入点和闭合的方式 注意注释你可以试试
我一直习惯使用#来进行注释,但是这点不行,要使用--+来进行注释的
很明显是闭合的方式不对,明显的错误还是显示正常的回显,所以要尝试其他的闭合
然后在试试id=1)'这样的闭合去试试看 ,在测试过后发现是双引号进行闭合的。后面来进行操作
判断了注入点就开始注入,这个是字符型的,我们就开始注入。前面演示sqlmap来注入,一句话
sqlmap直接嗦 上截图 直接看 下面这张图是判断了有注入点
然后直接爆数据库名
然后是爆表名,flag一般是在ctftraining这个数据库中,然后开始进行操作
爆了表名爆列名
好了结束,直接看里面的flag
sqlmap直接爆完了,还是sqlmap直接嗦,flag出来了,但是还是要手工去试试看。
下面来看看手工进行的操作:以后手工还是要来使用的,手工绕waf哈哈哈
直接上图 我用的是报错注入我比较熟悉updatexml这个函数,所以我用的这个函数来进行的操作
爆到了当前的数据库,然后在进行深入,下面是表名的操作
下面是列名的操作
然后我随便选了一个列名里面的数据
上面是演示的数据,下面我们来进行找flag操作。
这个是演示,然后因为我们用sqlmap跑了知道了那个存在的flag的数据库,我们手工来进行爆一下
下面是列名
列名知道了,我们直接读取里面的数据
这点也是爆出来了,我还尝试了floor这个来进行爆数据库,但是我没有成功。
http://6e5af385-5557-4b47-ac4b-0b9abf87cfc9.node5.buuoj.cn/Less-6/?id=1" and union select 1,count(*),concat_ws('~',(select group_concat(table_name)from information_schema.tables where table_schema=database()),floor(rand(0)*2))as x from information.schema.tables group by x --+
如果有师傅知道可以给我说说,为什么没有成功 我才学floor这个函数,不怎么熟悉,感谢感谢。