IDF CTF训练营之不难不易的js加密

题目链接:http://ctf.idf.cn/game/web/28/

(1)打开链接,要求输入flag的值

1

随便输入当然是提示错误

1-1

(2)查看源代码,发现有js加密后的数据

2

将数据进行eval解密,推荐解密站点

js解密http://tool.lu/js/

解密之后的JS代码是这样的

3

(3)分析JS代码

需要输入满足条件的a的值才能成功,根据代码需要反推a的值

根据代码需要本地改写测试

根据代码第6行,改写代码如下

4

得到c的值是md5(e)的值,md5解密得到

e = jiami = a[8:5]

根据代码第7,8行

f = a[0:7] ;

f[5:2] = js = a[5:2]

md5(f[0:4]) = md5(a[0:4]) = d0154d5048b5a5eb10ef1646400719f1

解密得到:

a[0:4] = wctf

a[5:2]  = js

目前得到的a的值为

a = wctf?jiami?js

共计13个字符

根据9-14行代码,有如下结果

r = a[13:]

r[1] – 25 = r[2] – 25 = r[1] – 25 = r[0] = a[13]

g = oo

r[3:6] = ooeasy

并且a的值符合XX_XX_XXX的格式

基于以上表达式,得到

a = wctf?jiami_js_xxooeasy

然后根据flag格式的特点,?处应该是{

然后根据代码19行和代码14行得到

a[4:1] = { = charcode(123)

str(a.length) = ‘123’-‘1′ = ’23’    //字符型

综合以上所有条件,最终得到a的值

a = wctf{jiami_js_xxooeasy}

总结:

题目不再是简单的等于某个值然后输出flag了,而是根据已有条件反推出输入的a的值,比较有意思。

 

您可能还喜欢...