前言:
> 学习CTF已经有一段时间了,陆陆续续也做了不少题。为了准备前段时间的全国大学生信息安全大赛,又把许多题目重新看过一遍。现在也终于闲下来一两天,正好趁这个机会把在bugku靶场做出的题目整理一下。
web1
打开看到一大堆滑稽,F12查看网页源代码就能发现flag,明显的送分题。
web2
题目描述输入验证码即可得到flag,正常输入发现只能输入1位,F12,将maxlength=”1”改为maxlength=”2”即可正确输入,得到flag。还是送分题。
代码语言:javascript复制flag{ea008b7aaab0d3ea27c8580df13f52c3}
web3
根据题意构造url即可得到flag
代码语言:javascript复制http://114.67.246.176:14287/?what=flag
flag{45240136ecbcb3c6db9d1dcb756ced4b}
web4
跟上一道题类似,只不过这次是post,使用Firefox插架Max HackBar输入what=flag得到flag
代码语言:javascript复制flag{1e7a6931002d229ac37085a846d21e6d}
web5
题目描述矛盾,打开链接看到相应php代码描述。if=($num==1) 意思就是num等于数字1就会打印flag 但是is_numeric函数检测数字意味着,既要是数字1,又不能是数字。 在评论区有这个介绍。
PHP一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较。PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。 在PHP中,== 会先进行类型转换,再进行对比,而===会先比较类型,如果类型不同直接返回不相等。
题目中正好使用的是==号我们可以构造类似1a的数字加字母的组合。 构建url得到flag: flag{2b16dd84ae5d35c74fe16c759849b871}
web6
直接查看网页源代码,得到unicode编码解码得到相flag。 flag{f41c9ed6534a088591cfc7cb118d8b46}
web7 你必须让他停下来
右键查看源代码,然后一直刷新源代码的页面,就能得到flag,当然有burpsuit抓包,然后sendtorepeter,一直send也一样,在第10张jpg的响应里边就有flag. 这两种方法本质上是一样的。
代码语言:javascript复制flag{222c6ea6e3f1b78d0e47688932d6c097}
在补充一点提交flag时要记得把代理关上。
web8 文件包含
代码语言:javascript复制 <?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
?>
审计PHP代码得到以下信息。
request函数表明可以任选get或post方法提交 helloeval() 函数把字符串按照 PHP 代码来执行 show_source用来返回文件内容 include函数会将flag.php包含在该文件中
由此我们可以构建url /?hello=show_source(‘flag.php’)或者?hello=file(‘flag.php’)均能得到flag。flag{e5d1a21b2cf1819415ce4ba106e868d9}
web9
代码语言:javascript复制error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^w $/",$args)){
die("args error!");
}eval("var_dump($$args);");}
?>
php代码实际上就是最大的提示。
flag in the variable:提示flag在变量里面 preg_match:使用正则表达式匹配,/^w $/ 表明只能输入数字和英文字母及下划线 说明此时只能用全局变量查看GLOBALS
构造?args=GLOBALS得到flag: flag{6ee63ee40bbaf7d0992a373217f73f43}
web10 头等舱
我觉得这道题真的是送分的,F12查看网络在响应头里就能得到flag。当然抓包也一样但是麻烦了。
web 11 网站被黑
描 述: 网站被黑了 黑客会不会留下后门
既然提示了后门的存在就用,扫描工具扫描下。利用御剑扫描,扫出来两个.php一个是那个黑页,另一个是一张登录界面。 在得到网址后进项抓包,直接用burp suit自带的爆破功能爆破下就OK了。(注burp suite的社区版爆破功能好像不是很全,推荐去找一个别人破解的专业版)
web 12 本地管理员
查看网页源代码在一堆n后面有个base64,解码得到管理员密码,账户盲猜admin登录,提示IP禁止访问,请联系本地管理员登陆,IP已被记录.使用本地管理员登录,就要进行IP伪造,编辑消息头,X-Forwarded-For:127.0.0.1。得到flag
game1
一道游戏题,正常来说游戏应该是杂项吧,这一次的游戏题有一说一竟然让我忘了我是来做题的。 在评论区得到大佬的提示,这一道游戏题分数上限是99999,使用burp suite抓包,在最后出成绩时能看到
GET /score.php?score=200&ip=223.104.190.201&sign=zMMjAw== HTTP/1.1
sign=zMMjAw像是base64加密,但是直接解算不出来,多玩几次游戏,发现zM是一直都有的,对后面的部分解码正是游戏得到的分数。构造url
score.php?score=99999&ip=223.104.190.201&sign=zMOTk5OTk==
得到flag。flag{78544bfa1e21dcf4dcbd7488870b267f}
web13 看看源码吧
代码语言:javascript复制var p1 = 'function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b';
var p2 = 'aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;';
eval(unescape(p1) unescape('54aa2' p2));
使用在线工具解码得到三段url按照要求进行拼接
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;
中间那一段就是要在网页上提交的东西,提交得到flag;
flag{f51a5a7335f538b979ac5eaf43e4cad6}
web14
怎么说呢?这道题考察了文件包含&PHP伪协议这个作者整理的很好,可以去借鉴借鉴。 构造一个url
代码语言:javascript复制php?file=php://filter/read=convert.base64-encode/resource=index.php 读取目标服务器文件内容,并讲这些内容进行base64编码,我们只需要解码就可以了。
DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2U4M2VlOWM2YWY5MjdkYWFmMjAyMTExNjE1ZWJjOWYxfQ0KPz4NCjwvaHRtbD4NCg
对着一长串进行解码得到
代码语言:javascript复制<?php
error_reporting(0);
if(!$_GET[file]){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 "Oh no!";
exit();
}
include($file);
//flag:flag{e83ee9c6af927daaf202111615ebc9f1}
?>
</html>
得到flag。