原理
原理这里先拿自己环境演示下,可以看到图中有id、user、pass三列,我们假设不知道列名,但我们还是想注出pass这个字段下的hello这条数据
假如他后端的语句是这样写的,1是我们传的参数
select `3` from (select1,2,3unionselect*from users)x;
后面x代表给这张虚拟表命名,反单引号是为了区别列名3和普通字符3
select c from (select1as a,2as b,3as c union select * from users)x;
再重新给列名赋值
-1unionselect1,(select `3` from (select1,2,3unionselect*from users)x limit 1,1),3;
这里根据实际情况来来调整回显位和想查询哪列的数据,limit控制第几条
在mysql中order by默认排序是按照升序的规则
如果排序的是1,2,3很明显就是 123 这样的排序
如果是'at'和'nt',则会比较第一位字符的ascii码来进行排序
如果第一位相同,则会比较第二位
如果是数字和字符串,那么数字永远会在前面
ctf案例
下载下来是有5个文件,register.php、index.php、profile.php、config.php、flag.php
首先关注下flag.php,前端访问是这样
源码如下
这里有两个条件,captcha这个参数的md5值要等于他给的那四个字符才行,这里每提交一次就会随机生成,这个比较简单,然后兑换码要等于数据库中的才行
打开config.php文件看一下,secret就是兑换码,是动态生成的
使用再来看下profile.php文件(就是登录之后存在sql注入的地方),随机生成的36位兑换码,当你请求次数为140次,这个兑换码就会重置
captcha就写个小脚本从1开始计算md5值的前四位就行,然后提交弹出flag
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...