在我一系列常规的测试后发现,第五关和第六关,是属于报错注入的关卡,两关的区别是一个是单引号一个是双引号。。。当然我是看了源码的。。。。
基于报错注入的方法,我早就忘的差不多了,,,我记的我最后一次基于报错注入是在玩网络攻防平台第几关来着得,那个关卡时基于报错注入的,我当时还特地查了好多资料,学习了学习报错注入,当然在那段时间时,我看到我一个认为不错的团队开始收核心成员了,我就发了一份申请,果不其然,我被刷下来了,,,毕竟我还是菜么。。。。。
当时申请的时候,我就想过,团队不养闲人,毕竟菜,所以菜,我还是继续努力的学吧,虽说是抱着兴趣爱好的玩这个的,万一,我毕业了找工作,有这个机会,我是不是也能找到这个工作了?兴趣变成工作?
好了,话归正题,关于这关需要用到报错注入,而我早就忘的差不多了,,,那咋办了?回想了回想,我一开始玩SQL注入时,我看过习科的SQL手工注入的书,我还看过小迪的SQL注入,当然,,,人家的没教这个报错注入。。。。。还有cracer的我也看过,也没教报错的。。。。
我了个擦,想了好长时间,我还是直接找这个关的答案吧。。。。
搜了好长时间,我突然想开,我好像在某个平台上看过人家有关于这个SQL注入源码平台一系列教程,我赶紧去看了,,,,话说我的这个SQL报错分析,还是在那个平台学会的。。。
我把这个关的呢个教程看了两遍,人家很详细的介绍了报错注入原理,我就按着人家说的,我再总结一编,谁让这是我的专栏,开这个专栏不就是整理汇总知识?来学习的啊?再整理一遍,我就更加深刻的理解了。
不闲话了,正式开始,我先捋一遍报错的原理,然后再打这第五关和第六关。
首先我先把需要报错用到的SQL函数先列开。



然后展示 第二个函数, rand() 用于产生一个 0~1的随机数 。


然后我用这个 " floor() 向下取整 " 这个函数,我让他把随机数套在里面。
这样是不是就会只输出 0 ,1 ,这两个数?



然后我们开始展示 group by 依据我们想要的规则对结果进行分组。

恩,就是这个意思。。。。
好了函数都弄完了,开始构造报错语句了。
首先,我们连接一个数据库,我随便连接一个,比如 dvwa 。




上面那一堆显示头名的有点不好看,我们可以在后面取一个别名,我就写个 shiyan 吧。

下面我们把向下取整这个随机数加进去。



应该是这个意思,我也不是太懂,毕竟我对报错还是不咋熟,,,
我看人家视频上是这么说的。。。。就这样吧。。。
我们把这个规整下一下。


然后我们开始分组,以 shiyan 为标准开始分组。

然后我们再添加一个函数 count() ,这是统计的,我们来统计下一共有多少个0,多少个1.

然后再多试几遍。。。

然后我们把报错的信息换成 version() 看看能不能爆出点信息。。。

我们再换成 user() ,这个试试看。

虽说还是随机的靠运气才能出错,多试几遍还是可以的。
我们是不是还能在这个基础上,增加点查询语句?


再试一遍。

以后多试试几遍,还是可以爆出错误的,现在我们开始在 limit 0,1这里切换下试试。

这里报错的原理,详细大家已经有了一个简单的了解了吧?我自己也又加深了一遍。