您的位置:首页 > Web前端 > JavaScript

#CTFWEB#对一道入门题的思考

2017-08-05 23:56 609 查看

天,这博客的编辑器为什么这么容易崩溃呢?

第三次手撸,再崩溃真的要本地写md了

感想不想重新打了,直接上题目了

题目传送门

**

0x01

**

直接看到第一关题目



一开始以为是道注入题,然后直接看源代码

主要代码:`

<body>
<form action="" method="post">
Username:  <input type="text" name="username" value="john" disabled /><br />
Password:  <input type="password" name="password" id="s287fg" /><br />
<input type="submit" value="Submit" />
</form>
<script>
var _0xc7f1=[
"\x73\x32\x38\x37\x66\x67",
"\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64",
"\x76\x61\x6C\x75\x65",
"\x69\x5F\x63\x61\x6E\x5F\x6D\x61\x6E\x69\x70\x75\x6C\x61\x74\x64\x5F\x68\x74\x6D\x6C\x5F\x65\x6C\x65\x6D\x65\x6E\x74\x73",
"\x69\x64",
"\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65"
];
f= document[_0xc7f1[1]](_0xc7f1[0]);
f[_0xc7f1[2]]= _0xc7f1[3];
f[_0xc7f1[5]](_0xc7f1[4]);
</script>
</body>


`

是段js混淆。

然后我们把题目转义过来,主要还是js段:

var _0xc7f1=[
"s287fg",
"getElementById",
"value",
"i_can_manipulatd_html_elements",
"id",
"removeAttribute"
];
f= document.getElementById("#s287fg");
f.value= "i_can_manipulatd_html_elements";
f.removeAttribute(id);


这样就看的很清楚了,然后直接随便输入一下看提示

There’s a typo in the password

ps:英语不太好,就直接挂google翻译,大概意思就是密码有个拼写错误

然后把

i_can_manipulatd_html_elements

丢到google翻译,发现是可以直接译出来的:

我能操控html元素

就很奇怪,这里卡顿了几分钟

然后拿 manipulatd 这个丢到有道才发现这个译不出来。。。

正确是 manipulate

拼回原句,密码便是

i_can_manipulate_html_elements

**

0x02

**

来到第二关,看到



点击下拉框到print flag,直接点击submit

提示 Error: You need privilege level 0 to print the flag.

源码:

<body>
<noscript>Error: You need to enable JavaScript in order to complete this challenge.<p></noscript>

<form action="" method="post">
Username:  <input type="text" name="username" value="john" disabled /><br />
Password:  <input type="password" name="password" id="s287fg" /><br />
<input type="submit" value="Submit" />
</form>
<script>var _0xc7f1=["\x73\x32\x38\x37\x66\x67","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x76\x61\x6C\x75\x65","\x69\x5F\x63\x61\x6E\x5F\x6D\x61\x6E\x69\x70\x75\x6C\x61\x74\x64\x5F\x68\x74\x6D\x6C\x5F\x65\x6C\x65\x6D\x65\x6E\x74\x73","\x69\x64","\x72\x65\x6D\x6F\x76\x65\x41\x74\x74\x72\x69\x62\x75\x74\x65"];f= document[_0xc7f1[1]](_0xc7f1[0]);f[_0xc7f1[2]]= _0xc7f1[3];f[_0xc7f1[5]](_0xc7f1[4]);</script>

</body>


看到这些就头大,硬是照着转义得到:

<script>
var _0xb506=[";","cookie","=","split","length","shift",";","pop","#04jt32","privilege","0","do nothing","val","submit","form","id","removeAttr"];
function getCookie(_0x2b2dx2){
var _0x2b2dx3=";" + document.cookie;   // ;privilege=0
var _0x2b2dx4=_0x2b2dx3.split(";" + "privilege" +  "=");
if(_0x2b2dx4.length == 2){
return _0x2b2dx4.pop().split(";").shift();
}
}
f= $("#04jt32");
$(form).submit(function(){
if(getCookie("privilege") == 0){
f.val("do nothing");
}
});
f.removeAttr(id);
</script>


这样就比较好了,接下来就是js函数的调用了。

于是那就根据hint弄cookie让privilege=0呗。

只是在做的时候,弄懂了全部代码,最后还是没什么思路。

然后就慢慢弄,发现还是得绕过最后的判断,于是想到了弱相等

""           ==   "0"           // false
0            ==   ""            // true
0            ==   "0"           // true
false        ==   "false"       // false
false        ==   "0"           // true
false        ==   undefined     // false
false        ==   null          // false
null         ==   undefined     // true
" \t\r\n"    ==   0             // true


然后把cookie

Cookie:PHPSESSID=lch8u9vmruf97i9inpmk24j2q4; privilege=1

改成了

privilege=0
privilege=
privilege= (ps:这里是空格)
privilege=false
privilege=null
privilege=\t


等等都不行,最后随便试了一个

privilege=00

莫名其妙就过了~拿到flag

Congratulations!
flag{y0u_H4v3_m@5teR3d_t3h_ba5!cS}


**

0x03

**

这道题不是很难,但是自己技术不行,做的很慢。这里提供第二关的另一种解法,这种解法是大佬给的,感觉也挺黑科技的~

首先还是得改cookie,让privilege=0,然后还是得绕过最后的一个判断。

于是,花式绕过开始了。

直接开chorme F12,然后编辑html,剪切掉select段代码,点击页面,这样页面就没有select了。

然后再把select粘贴回去!没错就是粘贴回去!

然后,然后选print flagsubmit,拿到flag。

**

0x04

**

大佬给的方法当时我试了挺久才弄出来,主要是自己的理解以及基础不够扎实可以这么说吧,不敢确定自己的想法,不敢确定自己的知识。

主要谈谈收获吧,这道题还是受益匪浅,特别是大佬的方法,一开始非常不理解,这拿出来又放进去,不是没有用吗?

不是的,首先看源码,submit那是一个匿名函数,事件绑定如果用的是匿名函数的话是可以删掉的,两个明文一样的元素不一定是绑定同一个事件,就如这题重新贴进去以后的select已经不是f了,这两个select不是同一个select,但是form的提交还是会把select提交上去,所以就可以绕过f.val那个方法。

从这题个人也可以看出自己的基础不是很牢固,很多原理的东西没弄清楚,今后打算重新看一遍基础的东西,顺便加上原理的深入理解。

至于00的弱判断,今后再加以分析。

2017年8月6日 00:41:40
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript