题目预备知识
- mysql在查询不存在的数据时会自动构建虚拟数据,一般数据要么明文,要么MD5,源码上用的是md5加密了密码
- 当具备一定条件并且没有回显字段时,可以盲猜三个字段类型分别为id,username,password
1、经过题目名提示,猜测应该是SQL注入,进入题目,发现一个登录框功能板,确信应该就是SQL注入,开始注入;
这里分享一个小知识点:
- sql注入可能出现的功能点
登录页面,留言板,修改信息,获取http请求头(User-agent,referer,xff)等只要是和数据库存在交互的功能点都有可能存在。
开始尝试SQL注入万能密码与弱口令
sql万能密码知识点:
先尝试是否存在管理员账户“admin”
username:admin password:1' or '1'='1
回显:
查看源码发现:
这样一段字符串,这串代码的特征为纯大写+数字,就猜我们最常见的base32
这里推荐一个有着许多编码在线加解密的网址还有一个部分常用的编码特征总结,如果有啥更好的编码在线地址可以在下面评论留下哦
在线编码:
CTF在线工具-CTF工具|CTF编码|CTF密码学|CTF加解密|程序员工具|在线编解码http://www.hiencode.com/
常见编码总结--部分:
编码、解码、总结大全_晨辰.的博客-CSDN博客_核心价值观编码https://blog.csdn.net/zhangyunming666/article/details/123349624
解码后得到
base32解码后得到的数值结尾有两等于号,继续base64解密一下
代码意解就是索引检测你输入的usernam是否在它的数据库中存在
继续由上可知报错翻译为“传错了”,继续尝试使用万能密码登陆:
username:admin' or '1'='1 password:123
回显:
后面又试了几种万能密码都报错得”不要黑我“;
下面随便输个用户名和密码上去,看看报错是什么;
”错误的用户“,结合之前的”wrong pass!“,一开始的“传错了”表达不明显是否有admin,现在完全确定是有admin账户的
admin:MySQL数据库中的默认管理员权限账户
做完前提所需工作,现在正式开始进行使用sql注入语句联合查询,进行burp抓包,这样方便些;
开始猜测字段,输入语句:
1' order by 3#
回显如上,应该是过滤了啥,经过不断测试得到
过滤了or,尝试大小写绕过
成功绕过,继续猜测字段数
如上测到第四个字段报错,证明只有3个字段数,但没有回显字段名,来到本题考点:猜测三个字段是啥,一般是id、username、password,尝试;
用户名猜测正确,继续猜测第三个字段是否为password;
来到本题考点的另一个:mysql在查询不存在的数据时会自动构建虚拟数据,一般数据要么明文,要么MD5;
密码123经过md5 32进制加密得到:
构造payload:
name=1'+union+select+1,'admin','202cb962ac59075b964b07152d234b70'#&pw=123
得到
这里解释一下为什么name那不能等于admin,如果不等于admin才会往后查询,等于admin就不会查询后面了;
还有检测过滤字符的话我这是自己的一个办法,比较笨,也可以使用burp不断进行http请求--fuzz,选择好sql注入语句字典查看响应进行判断过滤字符;
题外话
如果想分享你的一些学习方法或想法可以在下方评论留言