攻防世界-练习题

目录

一.cat's gift

 二.base64

三. flag_in_your_hand1


没什么,就是最近不想学习,做下题吧,我准备学pwn结果倒好,直接卡死在安装kali的那步,其实之前是有安装好的,但是后来手贱把它删了,咋也安装不好了就,服了

一.cat's gift

(感觉这个题很新颖啊,应该不太好做就是说)

 leibniz,听起来怎么这么像莱布尼兹公式呢,就是说自己虽然知道是莱布尼兹公式,但是没有一点思路,所以还是看了人家的wp

 

 二.base64

(有点想摆烂,做点简单的题目吧)

 

 附件就是一串编码,他都告诉你base64了,那就按照他的来吧

 简单的一批!

三. flag_in_your_hand1

前端输入的加密题

这个题的难点在于分析它所给的代码

 

 

 会发现每输入一次他就换一次下面的编码

 浅看一下源代码

 

 好了,感觉没有什么思路了就是说,看看大佬的wp吧

见鬼,这是一道前端输入加密的题,哦吼又没接触过,要死,看不懂,算了,一点点解吧

代码逻辑就是输入一个字符串,然后经过计算对比得到正确的flag

 输入框的id=“secToken”,值保存在token变量中,先调用checkToken(token)函数检查token
查看checkToken()函数:

 它在script-min.js只有这一处声明,是个假的TOKEN返回给ic变量,下面showFlag()函数也是根据ic变量的值判断输出flag的
之后的fg = bm(token);就是根据输入的字符串计算得到一个最终的结果,之后在前端最下面显示出来
注意这里的ic变量的值和fg变量的值是没有关系的,但是最终输出flag的时候他们都要求是正确的值
先求flag字符串的内容的过程:fg变量
查看bm(token)函数:

 它层层嵌套,调用了3个函数str2rstr_utf8(s)、rstr()、rb()来处理输入的字符串
先看str2rstr_utf8(s)函数:

 这个函数只是将我们输入的字符串转换成utf-8编码格式
直接在控制台输入str2rstr_utf8(s)函数的代码之后
str2rstr_utf8(“123”);调用函数对字符"123"处理之后输入的结果是"123"

 也可以直接在chrome浏览器里面新增js代码来调用原有的str2rstr_utf8(s)函数
在chrome浏览器的Sources->Snippets中

之后就是rstr()函数:

依次调用了rstr2binl(s)、binl()、binl2rstr()函数
同样调用三个函数查看输出:

 

 

 发现他们对输入字符串做了复杂的处理,
查看rstr2binl(s)函数源代码:

 从代码我们可以看到根据输入的字符串,决定了输出的字符串,所以现在我们无法直接逆向这部分的代码。
接下来只能从ic变量去找突破口了,因为当我们输入的字符串是正确的字符串的时候,ic变量的值会被赋为true

 可以看到ic变量的初始值被设为了false,但最后输出正确的flag的时候,要求它的值是true,所以我们去看ic变量的值在哪被更改了:

 只有在ck(s)函数中有4次更改,也就是要输出正确的flag,ic的值就要在这被修改成true。
实际上ck(s)函数是被binl(x, len)调用的:

也就是上面的计算flag的值的过程中,调用了ck(s)函数去验证输入的字符串s,如果符合要求,就把ic的值设为true,然后在输出计算得到的flag。
我们接着分析ck(s)函数:

 就是把输入的字符串的字符的ASCII码和a[]数组中的数逐个比较,一旦出现不是相差3的字符就返回
return ic = false;
所有的字符和数字都相差3时就返回
return ic = true;
我们根据代码逻辑,写出逆向求输入字符串的代码:

 console.log(“结果是:%s”,s);
运行结果:

 

 得到输入的字符串就是security-xbu
将字符串输入到Token输入框中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值