MOCTF-WEB-writeup

MOCTF-WEB-writeup

好菜,除了简单的几个题,自己会做,难的都是看老大WP完成的,太菜了

啥姿势都不会,就此记录一下,供日后查看及反省。菜鸡的自我修养

0x01 一道水题

题目链接:http://119.23.73.3:5001/web1/

直接F12了解一下,get flag:moctf{easy_source_code}

0x02 还是水题

题目链接:http://119.23.73.3:5001/web2/

F12查看源码。

修改之后,输入moctf提交就可以行了。get flag:moctf{break_the_html}

0x03 访问限制

 题目链接:http://119.23.73.3:5001/web3/

BP抓包,将代理的浏览器设置为NAIVE,重新发包。get flag:moctf{http_header_1s_easy}

0x04 机器蛇

 题目链接:http://119.23.73.3:5001/web4/

F12查看源码

然后访问robots.txt

最后访问图中的地址,即可获得Flag

get flag:moctf{g0Od_r0bots_txt}

0x05 PHP黑魔法

题目链接:http://119.23.73.3:5001/web5/

这题,输了index.php,看不到任何东西,也不会跳转到其他页面,题目给的提示也没说php~

我太难了

根据大佬们之前做的,访问index.php~,查看源码

<!DOCTYPE html>
<!--html lang="zh-CN">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head>
<body>
<?php

    $flag="moctf{**************}";
    
    if (isset($_GET['a'])&&isset($_GET['b'])) {
        $a=$_GET['a'];
        $b=$_GET['b'];


        if($a==$b) 
        {
            echo "<center>Wrong Answer!</center>";
        }
        else {
            if(md5($a)==md5($b)) 
            {
                echo "<center>".$flag."</center>"; 
                echo "By:daoyuan";
            }
            else echo "<center>Wrong Answer!</center>";
        }
        
    }
    else echo "<center>濂藉儚灏戜簡鐐逛粈涔�</center>"; 
?>
</body>
</html-->

根据源码,知道需要GET传参的a和b不能相等,而且md5之后的a=b,从这    if(md5($a)==md5($b))  中的==可以知道,可以利用MD5特性来解决

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

可以用两种方法绕过

1、直接将需要传参的值赋成如下就行了,md5之后是相等的:

QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
sha1(str)
sha1('aaroZmOk')  
sha1('aaK1STfY')
sha1('aaO8zKZF')
sha1('aa3OFF9m')
//比如说URL传参为
//http://119.23.73.3:5001/web5/index.php?a=240610708&b=QNKCDZO

2、利用MD5不能处理数组的特性绕过也行

//这里根据题意,a,b不相等,md5($a)==md5($b),如下传参也行,URL中的69,自己随意改,不相等就行
http://119.23.73.3:5001/web5/index.php?a[]=6&b[]=9

最后的flag为:moctf{PHP_1s_b4st_language}

0x06 我想要钱

题目链接:http://119.23.73.3:5001/web6/

打开得到源码

<?php
    include "flag.php";
    highlight_file(__FILE__);

    if (isset($_GET['money'])) {
        $money=$_GET['money'];
        if(strlen($money)<=4&&$money>time()&&!is_array($money))
        {
            echo $flag;
            echo "<!--By:daoyuan-->";
        }
        else echo "Wrong Answer!";
    }
    else echo "Wrong Answer!";
?>

Wrong Answer!

代码审计。想要获得Flag,需要满足三个条件:

//money的长度小于4、money的值大于time、最后不能为数组

if(strlen($money)<=4&&$money>time()&&!is_array($money))

money使用科学计数就可以了,长度小,也得以很大

比如?money=3e9

get flag:moctf{I_ne4d_much_m0ney}

0x07 登录就对了

题目链接:http://119.23.73.3:5002/index.php

构造万能密码,直接就可以登录成功,登录成功之后,F12查看源码即可获得Flag,get flag:moctf{SQLi_Log_1n_4asy}

这里讲的万能密码还不错:https://www.freebuf.com/column/150063.html

0x08 文件包含

题目链接:http://119.23.73.3:5001/web8/index.php?file=welcome.txt

查看源码,发现有一个flag.php,根据题目文件包含,可以用php://filter伪协议来读取flag的内容

payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php

关于php://filter伪协议的相关知识,这里说的不错   https://www.leavesongs.com/PENETRATION/php-filter-magic.html

打开之后会得到一串字符,直接base64解码即可看到flag

get flag:moctf{f1le_includ4_e5sy}

0x09 暴跳老板

题目链接:http://119.23.73.3:5006/web1/

hint:老板暴跳如雷,骂道:你怎么又没有按照我的意愿发邮件?

发啥都不管用,只会这样弹窗

BP抓包试试

根据题目提示,安装他说的发送,以及弹窗,应该用Dear的名义发送MyBoss过去

get flag:moctf{00.oo_BBoo_0os}

0x10 Flag在哪?

题目链接:http://119.23.73.3:5001/web7/

打开网页,有一个getflag的链接,点击去啥也没有,There is no flag!

御剑扫一波,扫不到东西,BP打开,抓包试试。可以看到Response里面

Location有新的链接地址,复制发包,最后又回到了最开始的位置,果然

人不能忘了初心,如果人人都初心哥,是不是可以迎娶白富美了(嘤嘤嘤)

想不到,看看表哥们的姿势。

emmmmmmm    歌曲?

好吧,将之前得到的组合一下flagfrog.php,访问,即可获得flag

之前获得的

/where_is_flag.php
/flag.php
/I_have_a_frog.php
/I_have_a_flag.php
/no_flag.php

get flag:moctf{wh4re_1s_The_F149}

0x11 美味的饼干

题目链接:http://119.23.73.3:5001/web9/

登录页面,直接使用admin登录就可以登录成功,密码都不需要。BP抓包看看

而且题目为美味的饼干     emmmm  cookie?

多次登录BP,发现这里的Cookie是一个定值

%3D   是等号(=),base64解码一波

发现里面的字符都是0-9,a-f,MD5解密,解密之后为user,前面用户输入的是admin,这里解密出来为user,那么将admin先进行md5加密,再base64加密,然后添加到cookie继续发包即可获得flag

 

get flag:moctf{Co0kie_is_1nter4sting}

0x12 没时间解释了

题目链接:http://119.23.73.3:5006/web2/index2.php

御剑扫描,发现新大陆。

访问试试

提交之后,得到一串字符:Flag is here,come on~ http://119.23.73.3:5006/web2/uploads/1338ecebb918f207a7de77008477d150d892c8d4/flag

访问之后,Too Show,不管提交什么,他前面的地址都一样,但是访问的时候,又看不到,应该是提交之后,服务器再很短的时间又给删除了。

所以,去访问的时候总是得不到想要的。本题考查的是条件竞争,直接利用BP里面的Intruder模块进行爆破,来获取

需要进行两次抓包,同时发送包,来达到短时间获取

先抓提交页面的包

然后设置Payload,选择Null payload,下面的continue indefinitely就是持续发送,一直请求设置完成之后,开始攻击(start attack)

开始攻击之后,放在后台,让他持续发送。接下来继续抓第二个包。

和上面一样的设置,然后发送攻击。

get flag:moctf{y0u_n4ed_f4st}

0x13 死亡退出

题目链接:http://119.23.73.3:5003/

代码审计

<?php
  show_source(__FILE__);
  $c="<?php exit;?>";
  @$c.=$_POST['c'];
  @$filename=$_POST['file']; 
  if(!isset($filename))                    
  {                                       
    file_put_contents('tmp.php', ''); 
  }                                 
  @file_put_contents($filename, $c);
  include('tmp.php');
?>

先看看代码

首先先定义可一个变量c,里面为一个php代码,退出功能。

接着是以post的方式获取变量c,这里 .= 表示他会和上面变量c的内容链接起来。

除了post变量c,下面还post了file,那么就是需要同时传c和file来获取flag吧

接下来是函数  file_put_contents:

file_put_contents()函数把一个字符串写入文件中。

该函数访问文件时,遵循以下规则:

1.如果设置了FILE_USE_INCLUDE_PATH,那么将检查* filename *副本的内置路径
2.如果文件不存在,将创建一个文件
3.打开文件
4.如果设置了LOCK_EX,那么将锁定文件
5.如果设置了FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容
6.向文件中写入数据
7.关闭文件并对所有文件解锁

如果成功,该函数将返回写入文件中的字符数。如果失败,则返回错误。

未完待续

0x14 火眼金睛

0x15 unset

0x16 PUBG

0x17 网站监测

0x18 Code Revolution

0x19 简单注入

0x20 简单审计

0x21 EasySQL

猜你喜欢

转载自www.cnblogs.com/mortals-tx/p/11280004.html