bugku-ctf 第一题:web4 (看看源代码吧)
访问题目中链接
随便输入 111 点击Submit
听他的,看看源代码吧
那么明显的两行
进行 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
KEY{J22JK-HS11}
bugku-ctf 第二题:flag在index里
访问链接
点击后
注意到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
然后将得到的字符串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/
输入密码提示不正确,5位数,那就burp暴力破解
paobo 很明显的提示
burpsuite爆破截图没留,直接爆破出的答案是13579
输入后得出flag
flag{bugku-baopo-hah}
bugku-ctf 第四题:点击一万次
题目如下:
每次点击goal的分子会改变,右键查看源代码
主要查看js部分
抓包看一下,其实每次点击只是修改了click的值,并没有跳到新的网页
将头部get修改为post,加上click参数发过去
flag{Not_C00kl3Cl1ck3r}
bugku-ctf 第五题:备份是个好习惯
通过提示 关键词 ’备份‘ 可以联想到 → 备份文件
备份文件一般都是.bak结尾的
用工具扫一下
这里推荐大佬的工具 yihangwang/SourceLeakHacker
可以看到index.php.bak
访问一下试试
有一个bak备份文件 ,不多解释了,下载后打开
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入门题
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论