1009.CTF 题目之 WEB Writeup 通关大全 – 3

Web题目系列3

让我进去

题目链接

http://shiyanbar.com/ctf/1848

题目描述

相信你一定能拿到想要的
Hint:你可能希望知道服务器端发生了什么。。

格式:CTF{}

解题思路

用burpsuite抓包后,发现cookie里有一个字段source=0,修改为1后获取源码。

源码内容

<html>
<body>

<pre>
$flag = "XXXXXXXXXXXXXXXXXXXXXXX";
$secret = "XXXXXXXXXXXXXXX"; // This secret is 15 characters long for security!

$username = $_POST["username"];
$password = $_POST["password"];

if (!empty($_COOKIE["getmein"])) {
    if (urldecode($username) === "admin" && urldecode($password) != "admin") {
        if ($COOKIE["getmein"] === md5($secret . urldecode($username . $password))) {
            echo "Congratulations! You are a registered user.\n";
            die ("The flag is ". $flag);
        }
        else {
            die ("Your cookies don‘t match up! STOP HACKING THIS SITE.");
        }
    }
    else {
        die ("You are not an admin! LEAVE.");
    }
}

setcookie("sample-hash", md5($secret . urldecode("admin" . "admin")), time() + (60 * 60 * 24 * 7));

if (empty($_COOKIE["source"])) {
    setcookie("source", 0, time() + (60 * 60 * 24 * 7));
}
else {
    if ($_COOKIE["source"] != 0) {
        echo ""; // This source code is outputted here
    }
}
    </pre>
<h1>Admins Only!</h1>
<p>If you have the correct credentials, log in below. If not, please LEAVE.</p>
<form method="POST">
    Username: <input type="text" name="username"> <br>
    Password: <input type="password" name="password"> <br>
    <button type="submit">Submit</button>
</form>

</body>
</html>

从源码分析,可以看到flag的获取要求是:传进一个cookie getmein ,使其等于 secret+urldecode(username . password) MD5 加密后的结果且要求username为admin,password不能为admin。所以这里利用了hash长度扩展攻击,具体原理请参考文章0文章1文章2文章3,推荐查看文章0和3。

这里我给出一个最简单的方式,使用工具hashpumpy进行hash值进行构造,给出代码

#!/usr/bin/env python
#-*- coding: utf-8 -*-
"""
@Author : darkN0te
@Create date : 2018-07-10
@description : 哈希长度攻击
@Update date :
"""  

import hashpumpy

# def hashpump(hexdigest, original_data, data_to_add, key_length)
aaa = hashpumpy.hashpump("571580b26c65f306376d4f64e53cb5c7","admin","darkN0te",20)
print aaa

拐弯抹角

题目链接

http://shiyanbar.com/ctf/1846

题目描述

如何欺骗服务器,才能拿到Flag?
格式:CTF{}

解题思路

访问链接http://ctf5.shiyanbar.com/indirection/index.php/index.php,就可以直接获取到flag。

题目的意思就是通过改变地址栏访问index.php,但是限制了条件不能使用./ ../ \\而且只能使用小写字母,不可以在php后加点,这里我们可以利用伪静态技术,使用index.php后的index.php会被当做参数处理,所以服务器只会解析第一个index.php,满足条件成功绕过。

Flag: CTF{PSEDUO_STATIC_DO_YOU_KNOW}

Forms

题目链接

http://shiyanbar.com/ctf/1819

题目描述

似乎有人觉得PIN码是不可破解的,让我们证明他是错的。
格式:ctf{}

解题思路

进入题目后,点击提交,使用bp拿到包后,发现有一个showsource字段,修改为1然后看到源码,直接把-19827747736161128312837161661727773716166727272616149001823847填入pin提交拿到Flag。

<html>
<head>
<title>Forms</title>
</head>
<body>

<pre>
$a = $_POST["PIN"];
if ($a == -19827747736161128312837161661727773716166727272616149001823847) {
    echo "Congratulations! The flag is $flag";
} else {
    echo "User with provided PIN not found.";
}
    </pre>User with provided PIN not found.
<form action="" method="post">
    PIN:<br>
    <input type="password" name="PIN" value="">
    <input type="hidden" name="showsource" value=0>
    <button type="submit">Enter</button>
</form>
</body>
</html>

天网管理系统

题目链接

http://shiyanbar.com/ctf/1810

题目描述

天网你敢来挑战嘛
格式:ctf{ }

解题思路

进入题目后,打开网页源码,网页中有提示<!-- test=_GET[‘username‘]; test=md5(test); if($test==‘0‘) -->,很明显可以看到是一个Hash比较问题,具体内容请查看文章 PHP Hash比较缺陷,这里我们只需要找到以0e开头的md5,这样和0比较就是相等的。下面一个以0e开头的md5列表

QNKCDZO
0e830400451993494058024219903391

s878926199a
0e545993274517709034328855841020

s155964671a
0e342768416822451524974117254469

s214587387a
0e848240448830537924465865611904

s214587387a
0e848240448830537924465865611904

s878926199a
0e545993274517709034328855841020

使用s878926199a提交后给出了新的提示。

打开链接看到内容

$unserialize_str = $_POST[‘password‘];
     $data_unserialize = unserialize($unserialize_str);
     if($data_unserialize[‘user‘] == ‘???‘ && $data_unserialize[‘pass‘]==‘???‘)
     {
       print_r($flag);
     }
伟大的科学家php方言道:成也布尔,败也布尔。
回去吧骚年

这段语句首先对password字段进行了反序列化,然后让里面的user等于???,同时pass也等于???

但是我们不知道两处???到底是什么,因此无法考虑用php函数构造这样的值。别忘了还有一个提示: "伟大的科学家php方言道:成也布尔,败也布尔" ,bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。(a代表array,s代表string,b代表bool,而数字代表个数/长度)

构造password值为: a:2:{s:4:"user";b:1;s:4:"pass";b:1;}

在密码栏中提交构造的值,即可获取flag: ctf{dwduwkhduw5465}

忘记密码了

题目链接

http://shiyanbar.com/ctf/1808

题目描述

找回密码
格式:SimCTF{ }

解题思路

此题目有点脑洞,首先在step1.php页面提交邮箱,会给出step2.php页面,然后访问step2.php会马上返回step1.php。所以抓包看一下step2.php的内容。

<br />
<meta http-equiv=refresh content=0.5;URL="./step1.php">check error!<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="renderer" content="webkit" />
    <meta name="admin" content="[email protected]" />
    <meta name="editor" content="Vim" />
    <title>logic</title>

    </style>
</head>
<body>
    <form action="submit.php" method="GET">
        <h1>找回密码step2</h1>
        email:<input name="emailAddress" type="text" value="youmom"  disable="true"/></br>
        token:<input name="token" type="text" /></br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

找到了step2.php会将内容提交到submit.php。访问submit.php文件。给出提示

在step2.php的代码中刚好能找到``,构造包访问submit.php还是不可以。这里就是个坑,需要访问submit.php的缓存文件.submit.php.swp,这个文件是使用vim编辑时会留下的一个文件,访问后得到submit.php源码。

if(!empty($token)&amp;&amp;!empty($emailAddress)){
    if(strlen($token)!=10) die(‘fail‘);
    if($token!=‘0‘) die(‘fail‘);
    $sql = "SELECT count(*) as num from `user` where token=‘$token‘ AND email=‘$emailAddress‘";
    $r = mysql_query($sql) or die(‘db error‘);
    $r = mysql_fetch_assoc($r);
    $r = $r[‘num‘];
    if($r&gt;0){
        echo $flag;
    }else{
        echo "失败了呀";
    }
}

这段源码就给出了如何拿到flag,有两个条件:

1. token,长度必须等于10。

2. token要和0相等,这里又用到了php弱类型比较,只要用0000000000就可以绕过这两条限制。

得到payload : http://ctf5.shiyanbar.com/10/upload/[email protected]&amp;token=0000000000

flag is SimCTF{huachuan_TdsWX}

Once More

题目链接

http://shiyanbar.com/ctf/1805

题目描述

啊拉?又是php审计。已经想吐了。
hint:ereg()函数有漏洞哩;从小老师就说要用科学的方法来算数。
格式:CTF{

解题思路

点击题目页面View the source code,看到源码。

<?php
if (isset ($_GET[‘password‘])) {
    if (ereg ("^[a-zA-Z0-9]+$", $_GET[‘password‘]) === FALSE)
    {
        echo ‘<p>You password must be alphanumeric</p>‘;
    }
    else if (strlen($_GET[‘password‘]) < 8 && $_GET[‘password‘] > 9999999)
    {
        if (strpos ($_GET[‘password‘], ‘*-*‘) !== FALSE)
        {
            die(‘Flag: ‘ . $flag);
        }
        else
        {
            echo(‘<p>*-* have not been found</p>‘);
        }
    }
    else
    {
        echo ‘<p>Invalid password</p>‘;
    }
}
?>

本题目一共有三个条件限制,看如何绕过。

1. ereg ("^[a-zA-Z0-9]+", _GET[‘password‘]) === FALSE

===类型恒等于

== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。

=== 和 !== 只有在相同类型下,才会比较其值。

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false

这个判断限制了输入只能为只能输入字符和数字,但是该函数存在00截断漏洞。

  1. strlen($_GET[‘password‘]) 9999999,限制字符串长度小于8,值大于9999999。
  2. strpos ($_GET[‘password‘], ‘*-*‘) !== FALSE,限制输入的值必须包含*-*

所以给出paylload,1e8%00*-*1e9%00*-*

Flag: CTF{Ch3ck_anD_Ch3ck}

Guess Next Session

题目链接

http://shiyanbar.com/ctf/1788

题目描述

写个算法没准就算出来了,23333
hint:你确定你有认真看判断条件?
格式:CTF{}

解题思路

点击题目页面View the source code,看到源码。

<?php
session_start();
if (isset ($_GET[‘password‘])) {
    if ($_GET[‘password‘] == $_SESSION[‘password‘])
        die (‘Flag: ‘.$flag);
    else
        print ‘<p>Wrong guess.</p>‘;
}

mt_srand((microtime() ^ rand(1, 10000)) % rand(1, 10000) + rand(1, 10000));
?>

看一下按条件语句,需要session中的password值和用户传的一样,就可以打印flag,所以只需要删掉session值,或者修改session值为一个不存在的session,服务器获取不到session,则password为空,用户传一个空的password的进去即可拿到flag。

Flag: CTF{Cl3ar_th3_S3ss1on}

FALSE

题目链接

http://shiyanbar.com/ctf/1787

题目描述

PHP代码审计
hint:sha1函数你有认真了解过吗?听说也有人用md5碰撞o(╯□╰)o
格式:CTF{}

解题思路

点击题目页面View the source code,看到源码。

<?php
if (isset($_GET[‘name‘]) and isset($_GET[‘password‘])) {
    if ($_GET[‘name‘] == $_GET[‘password‘])
        echo ‘<p>Your password can not be your name!</p>‘;
    else if (sha1($_GET[‘name‘]) === sha1($_GET[‘password‘]))
      die(‘Flag: ‘.$flag);
    else
        echo ‘<p>Invalid password.</p>‘;
}
else{
    echo ‘<p>Login first!</p>‘;
?>

本题目给出了两个条件

1. 用户名密码不能相等

2. 用户名密码的sha1()要===

===只有在相同类型下,才会比较其值。sha1()函数默认的传入参数类型是字符串型,可以传入其他类型,使其返回值为false。如数组类型。

所以给出payload为,name[]=a&amp;password[]=b

Flag: CTF{t3st_th3_Sha1}

原文地址:https://www.cnblogs.com/yh-ma/p/10271788.html

时间: 2024-08-28 06:12:58

1009.CTF 题目之 WEB Writeup 通关大全 – 3的相关文章

1008.CTF 题目之 WEB Writeup 通关大全 – 2

Web题目系列2 登陆一下好吗?? 题目链接 http://shiyanbar.com/ctf/1942 题目描述 不要怀疑,我已经过滤了一切,还再逼你注入,哈哈哈哈哈! flag格式:ctf{xxxx} 解题思路 一个万能密码问题,多试试就可以了. username: ''=' password: ''=' who are you? 题目链接 http://shiyanbar.com/ctf/1941 题目描述 我要把攻击我的人都记录db中去! 解题思路 看到题目就想到修改x-forwarde

1010.CTF 题目之 WEB Writeup 通关大全 – 4

Web题目系列4 上传绕过 题目链接 http://shiyanbar.com/ctf/1781 题目描述 bypass the upload 格式:flag{} 解题思路 随意上传文件,发现提示只能上传图片文件,上传图片后,看到发送包的内容为 推测最后保存文件的名称为dir + filename,所以使用00截断来构造绕过php不能上传的问题. flag{SimCTF_huachuan} NSCTF web200 题目链接 http://shiyanbar.com/ctf/1760 题目描述

2017 redhat web writeup

2017 RedHat Web writeup1.thinkseeker2.PHPMyWIND3.后台 2017 RedHat Web writeup 1.thinkseeker 这题考两个点 1.用with rollup过前面两个if 2.用盲注找到flag 关于第一点在实验吧有原题:http://www.shiyanbar.com/ctf/1940 过滤方法稍有不同,用操作符代替关键字即可.token使用变量覆盖就可以. 第二点就是infoid这个参数有盲注,跑脚本可以拿到flag. 这是脚

ISCC 2017 Web writeup

ISCC 2017 Web writeupWeb签到题WelcomeToMySQL自相矛盾我们一起来日站I have a jpg,i upload a txt.where is your flagSimple sqli ISCC 2017 Web writeup Web签到题 这种签到题不能往难了想,首先理所当然的这样传参 hiddenflag=f1ag&flag=f1ag 这回显不一样了,试了很多方法,最后就是再加一个参数FLAG=f1ag,然后就成了,完全没有逻辑... WelcomeToM

ISG 2018 Web Writeup

文章目录 又一次感觉到了,作为一个CTFer,要想在比赛中有高的输出,只做Web是不够的 calc 首先看到题目后,在输入框中测试了一下,发现可以被执行 首先猜想是不是ssti,模板注入,但是平常遇到的模板注入题目中,python的居多,php的没怎么遇到过,有点怀疑如果是php的模板注入的话也不一定能搞得出来,这个时候扫一下目录 1 python dirsearch.py -u http://202.120.7.205:60003/ -e php -t 60 发现存在git源码泄露 直接上gi

最近面试的题目(WEB、Service、SQL、JavaScript)

整理一下最近面试被问到的主要题目.由于本人主要是做WEB及WEB SERVICE这块,使用的语言主要是C#,数据库主要用到的也是MSSQL.所以就分成这些块来整理(有些是在面试之后才意识到回答不对),也包括部分别人被问及的. 一.HTML.CSS position有哪几种值,各是怎么使用的? 一个左右部局,如何实现? 二.JAVASCRIPT, JS FRAMEWORK document.onload与jQuery中的ready有何区别? 什么是闭包?写一下. jQuery中有个叫"on&quo

ctf题目writeup(4)

2019.1.31 题目:这次都是web的了...(自己只略接触隐写杂项web这些简单的东西...) 题目地址:https://www.ichunqiu.com/battalion 1. 打开链接: 一看就是jsfuck了....这种形式的,可以在线工具,或者直接f12 复制粘贴到console里面执行: 出错了....检查一下:发现最后少了个匹配的] 加上后还是报错 那就干错把首位的那个去掉: not function... 那就把最后的括号去掉: 所以答案就是: flag{f_f_l_u_a

ctf题目writeup(8)

2019.2.3 继续做别的提.bugku的密码学和杂项都做完了,清清其他自己感兴趣(能蒙对)的. 1. 刚开始寻思是不是弄个字典,然后抓包或者python爆破下. 结果随便试 KEY{zs19970315}就对了... 2. 下载后是个伪加密zip. winhex改一下: 打开txt: 之后得需要社工库了...就没办法(得FQ.) 看了别人的直接用了: flag{15206164164} 3. 尝试百度 孤长离...啥都没有. 后来才知道 这是百度贴吧的一个东西: 提示是弱口令.而且这个邮箱好

JarvisOJ平台Web题目简单部分writeup

PHPINFO 题目地址:http://web.jarvisoj.com:32784/访问网址,页面显示: <?php //A webshell is wait for you ini_set('session.serialize_handler', 'php'); session_start(); class OowoO { public $mdzz; function __construct() { $this->mdzz = 'phpinfo();'; } function __dest