SQL注入2

开卷看题

开幕雷击,打击我的自信心,BUT我是你能打击的人ma?

又是一个登录框,肯定不简单

寻找线索

CTF三剑客:看源码、看响应、扫目录

源码和响应都没什么内容,扫扫目录

意外收获还真不少,站点存在.DS_Store文件和一个flag文件

追寻真理

既然存在.DS_Store了,你懂得(老规矩:不想折腾环境直接上kali)

与扫描目录的结果一致

访问flag文件康康

我靠,直接拿下???

不甘平凡

  虽然说flag获得的出人意料,但是个人猜测是作者不小心搞错了文件名字导致flag文件可以直接下载(或者作者就是想告诉我们一个道理:通往罗马的路不止一条)接下来按照正常套路尝试一下

既然是登录框,很有可能是暴破或者SQLI

尝试暴破

随手测试两个用户:admin 123 和 123 123

根据提示,可以确定存在admin账户,所以接下来只需暴破admin的密码即可

  暴破发现大量密码都可以登录至后台,这显然不正常,推测后台的处理逻辑为:如果当前会话已登录则直接跳转至admin首页不再进行二次验证

  如果推测正确,那么第一个验证成功的应该就是正确的密码,查看一下数据包发现序号是从小至大的,由此可以判定admin123就是正确的密码,尝试登录

成功登录,此时我们发现系统提示我们输入ls,那就输入喽

拿到flag(好像随便输入点什么就可以得到flag)

尝试SQL注入

  从系统的提示信息推断,后台先判断用户名是否正确然后再判断密码是否正确,结合前端源码(一般前端的name属性值和后台的SQL字段基本一致)

结合以上信息,猜测后台处理逻辑为

1
2
3
4
5
6
7
// WAF过滤参数

SELECT `passwd` FROM `users` WHERE `uname`=input_name;

if (input_passwd == passwd) {
// 登录成功
}

先测试uname字断,fuzz(模糊测试)一波,话不多说直接上图

说明:增加illegal匹配是因为WAF拦截时会提示illegal character

字典:传送门(随便找的一个)

看着结果,总感觉不对劲。。。

这特么还真是提示,给的都是合法的。。。。思维定式害死人

艰难的攻坚战

合法字符:!、!=、=、+、-、^、%

没有逗号,UNION查询凉凉

可以用异或查询

函数记载:

  • ASCII()函数返回字符的ASCII码值
  • MID() 函数用于从文本字段中提取字符
  • REVERSE函数:反转字符串