实验吧_简单的sql注入_1、2、3

简单的sql注入1

看着这个简单的界面,一时间没有特别好的思路,先输入一个1',发生了报错

初步猜测这是一个字符型的注入,他将我们输入的语句直接当成sql语句执行了,按题目的意思后面肯定过滤了很多注入语句,我就先来尝试一些基本的语句

难道把union select都给过滤了?一阵绝望后接着试,试了好多后完全没思路

接着大概就是传说中的运气吧

这两个现象让我猜测过滤的是两个空格以及空格中间的字符串,绕过空格有好多方法:+,/**/,%0a,这里我用/**/代替空格构造一个查询语句:

拿到数据库,接下来就是常规的注入语句,具体可见之前写的注入关

嘿嘿,你以为是常规语句就能解决的,怕不是活在梦里

经过一番测试,table_schema都被和谐了,这还怎么玩,突然想到之前有个字符串拼接的方法赶紧来试试

好像并没有什么卵用,算了,去看wp吧。

后来发现原来要把limit以及后面的东西都给去掉,这个我实在是不知道原因,请知道的大佬招呼一声。

出现了flag表,继续注入

貌似column_name也被和谐了,确认之后确实是的,还是老方法绕过,发现还有东西被过滤,试了一试是information_schema.columns,再绕一次

flag就是我们想要的字段啊

太累了,但也学到了不少东西

简单的sql注入之2

瞎试一通后发现还是过滤了空格嘛,同样的手法还能连用两题的啊,继续深入

气死了,database()被过滤了,那就查所有的数据库

还是熟悉的配方,熟悉的web1,继续走

又让我找到了flag表,继续

最后一步

跟上一题一模一样,跟捡的一样。

简单的sql注入之3

一开始老套路先给个1'肯定是会报错的

先拿个基于时间的盲注语句试试水

返回了一个don't,尝试了语句中的每个指令,原来是sleep()被过滤了

突然想到了一开始看到的报错信息,那就再试试报错注入

又过滤了floor()函数,我就知道不会这么简单

 经过1=1与1=2的对比,我猜测当后面的sql语句成功执行就会返回hello,否则就无回显。

这就跟基于时间的盲注一个原理么。原理猜到了,但由于对数据库命令并不熟,我还是去查看了wp。

原来这边除了上面这点还要利用一下报错:

?id=1' and (select count(*) from 表名)>0 %23

表名不存在时,报错

由此我们得知数据库名为web1,

接下里跑表的语句还是?id=1' and (select count(*) from 表名)>0 %23

这里因为我没有表名字典,所以也没啥可跑的,求表哥们赏我一份字典吧

只能简单的拿?id=1' and (select count(*) from flag)>0 %23测试一下,返回了hello说明flag表存在

猜列的手法如出一辙

?id=1'union select 列名 from flag %23可以拿个字段字典放burp里跑,我这里还是进行简单的测试

?id=1'union select flag from flag %23后返回了hello,说明存在flag列

接下来就是最重要的一步——猜字符

?id=1'and ascii(substr((select flag from flag),1,1))=ASCII%23原理就是这条语句

对ASCII码进行爆破,值从30到127

这里贴上我参考过的大佬的wp

【实验吧】CTF_Web_简单的SQL注入之3

原文地址:https://www.cnblogs.com/Ragd0ll/p/8529402.html