首页 > 其他分享 >安洵杯2019——eazy——web-md

安洵杯2019——eazy——web-md

时间:2022-10-02 10:44:20浏览次数:46  
标签:匹配 这里 cmd 安洵 eazy 转义 2019 echo md5


title: 安洵杯2019——eazy——web.md
date: 2022-10-02 10:11:51
tags:

[安洵杯 2019]easy_web

image-20220930143000275

绷不住了。。。。

看题把 上面get这里应该是可以获取文件 cmd是什么现在还不知道

那可以读文件 直接读flag?

试试把

上面这个应该是base64 加密

解密后

image-20220930143142145

应该还需要再解密

image-20220930143204530

这啥玩意 经过不懈努力 发现这给是十六进制。。。(其实是看别人wp的 哈哈哈哈)

image-20220930143327943

然后 那直接读flag 黑黑黑

image-20220930143406697

先十六进制

然后两次base64

TW1ZMk5qWmpOakUyTnc9PQ==

image-20220930143534197

应该是过滤了flag把

反正就是不能读

这里思路有开阔 反正可以读文件了 我们就来读读文件把 看看代码执行的逻辑

十六进制 然后二次base64

之后为

TmprMlpUWTBOalUzT0RKbE56QTJPRGN3

读出index.php

<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd'])) 
    header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));

$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {
    echo '<img src ="./ctf3.jpeg">';
    die("xixi~ no flag");
} else {
    $txt = base64_encode(file_get_contents($file));
    echo "<img src='data:image/gif;base64," . $txt . "'></img>";
    echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i", $cmd)) {
    echo("forbid ~");
    echo "<br>";
} else {
    if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
        echo `$cmd`;
    } else {
        echo ("md5 is funny ~");
    }
}

?>
<html>
<style>
  body{
   background:url(./bj.png)  no-repeat center center;
   background-size:cover;
   background-attachment:fixed;
   background-color:#CCCCCC;
}
</style>
<body>
</body>
</html>

分析一下代码逻辑把

解码之后只能匹配 a-z A-Z 0-9 和 .

不能匹配到flag

下面定义了非常多的黑名单

然后经过一个md5强比较 就

echo `$cmd`

这里有个知识点 这个`` 里面的东西 可以当作系统命令来执行

这里试验一下

image-20220930144508961

所以我们就只需要绕过md5 和 上面的过滤就可以了

这里也有一个知识点就是 \ 反斜线在linux 对一些命令没有影响

image-20220930145629982

看到这里是没什么影响的

那再试一下cat

image-20220930145722940

还有一个知识点就是

正则中的 反斜线 了

先看这里面的正则匹配模式

/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i

这里它明明对 \ 和 \ 进行了过滤啊 没什么没有被检测呢

image-20220930150336365

先来看一下这个东西

因为这个 \ 是一个转义符 然后 把后面的引号转义成字符串了 所以就没有闭合 所以报错

image-20220930150453397

这样子 我们把\ 利用转义符 \ 转义成字符串了 所以它就会正常输出 \

那看如果是三个呢

image-20220930150547267

它又会报错 原因也很简单 就是 前面一个字符串 \ 和一个转义符 \ 这个转义符就把后面的" 转义成字符串了 所以就报错了

image-20220930150810439

这个我就不说了

那我们刚刚的猜想是正确的啊 它明明是过滤了 \ 和

\\

但是为什么没有被检测呢

这里同样是做实验来看

实验代码

<?php
$content = 'Aha! Can you type backslash characters? Yeah! Here is a \ ';
$pattern="\\";
$result=preg_match($pattern,$content);
echo $result;

image-20220930151309380

英语不好 翻一下

image-20220930151354999

这里它是说分隔符不能是字母数字或反斜杠 这里说的就剩 / 了 所以php报了一个没有结束分隔符的错

这里就是上面的那个东西 虽然已经被转义成字符串 \ 但是 它到正则解释器中又会变成 转义符 \ 所以我就就必须要四个转义符

\\\\

才可以

image-20220930151701879

正常匹配了

为什么呢 因为这里再 php解释器中 把四个转义符转义成了两个

\\

然后再正则解释器中

\\

这两个有转义了一次 就变成一个字符串 \ 了

但是 这里 我们输入三个反斜杠的时候 他们有报错 。。。不知道为什么了

image-20220930152507254

反正他匹配上了

image-20220930152540975

这里反正它两个反斜杠 和四个反斜杠的时候都没有匹配上

image-20220930152648348

八嘎 实验的时候匹配上了 但是 为啥放里面就匹配不上了呢 。。。不理解

image-20220930152817401

......

标签:匹配,这里,cmd,安洵,eazy,转义,2019,echo,md5
From: https://www.cnblogs.com/kkkkl/p/16748366.html

相关文章

  • 警告⚠️Exchange 2013/2016/2019在野可利用的0 Day漏洞
       2022年9月29日第三方网站批量Exchange2013/2016/2019存在一个在野0Day漏洞,该漏洞目前已经得到微软证实,确实存在,并且CVE评分为8.8。该漏洞目前还没有修复补丁,并且......
  • P5658 [CSP-S2019] 括号树
    P5658CSP-S2019括号树先考虑线性的情况.....(....)如果是(则将其左边的答案加入栈,这个点的答案为0如果是)则将栈顶左边的答案+1作为贡献(答案)每个点的答案为以这个......
  • Docker部署SQL Server 2019 Always On集群
    Docker部署Alwayson集群SQLServer在2016年开始支持Linux。随着2017和2019版本的发布,它开始支持Linux和容器平台上的HA/DR、Kubernetes和大数据集群解决方案。在本文中,我们......
  • VS2022/VS2019安装WinForm打包程序,Microsoft Visual Studio Installer Projects 2022
    问题:使用VS2022创建WinForm程序,完了需要打包成安装程序,这时候我去下载MicrosoftVisualStudioInstallerProjects2022插件,速度超级慢,恶心人。总算是下载下来了,我存到我......
  • [SWPU2019]EasiestRe-cnblog
    [SWPU2019]EasiestRe双进程保护,特殊的内存自修改,windows异常处理机制分析程序代码当int3+nop长度为5时,debugger传回了DBG_EXCEPTION_NOT_HANDLED(0x80010001)信号,告知......
  • 59、Window10+VS2019调用百度的API进行活体检测
    基本思想:给客户搞了个摄像头的人证比对历程,真艰辛;本以为很简单的一个事情,最开始是人证比对,客户搞成了照片测试;我又搞成了眨眼测试,客户用上了手机播放视频;我又又搞成了手机......
  • 49、使用Visual Studio 2019进行Mediapipe的封装调用
    基本思想:因为项目中使用mediapipe的检测框架,奈何google对其官方提供的tflite封装解析不开源,只能曲线救国,因此使用visualstudio2019进行封装调用一、先测试python版本的medi......
  • BUUCTF web 第一题[极客大挑战 2019]EasySQL
    BUUCTFweb第一题sql注入之万能密码[极客大挑战2019]EasySQL✔解题方法1.判断类型为:有回显、字符型sql注入当输入343、343)、343’‘、343’‘)当输入343‘时当......
  • [CSP-S2019] Emiya 家今天的饭
    P5664CSP-S2019Emiya家今天的饭容斥原理+DP答案=没有限制3的答案-∑某一列不满足性质3的答案,记号:行表示方案,纵表示食材第2类:不满足性质3的只有一种列(必须>k/2......
  • winserver2019 域迁移的思路
    忘记DS还原密码“开始”--“运行”输入:ntdsutil.exec:\windows\system32\ntdsutil.exe:setdsrmpassword重置DSRM管理员密码:resetpasswordonserverwindows2请键入DS......