实验吧_简单的sql注入_1、2、3
看着这个简单的界面,一时间没有特别好的思路,先输入一个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