前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JDCTF-web writeup

JDCTF-web writeup

作者头像
安恒网络空间安全讲武堂
发布2019-09-29 14:10:32
6310
发布2019-09-29 14:10:32
举报
文章被收录于专栏:安恒网络空间安全讲武堂
看了就要关注我,喵呜~

偶然看到的刷一刷

签到题~

进入题目

既然签到题F12一下

真的发现了,有提示打开那个js

跑一下就有flag了

你知道正则么?

源码审计

代码语言:javascript
复制
<?php 
highlight_file(__FILE__); 
include('flag.php');  
if (isset ($_GET['jdctf'])) { 
    if (@ereg ("^[1-9]+$", $_GET['jdctf']) === FALSE) 
        echo "must input number!"; 
    else if (strpos ($_GET['jdctf'],'#biubiubiu') !==FALSE) 
        die('FLAG:'.$flag); 
    else 
        echo 'try again'; 
} 
?>

总共两个判断 第一个函数是 ereg可以用%00绕过 第二个函数 strpos用来判断该字符串中有没有 #biubiubiu 因为#在url中有特殊含义所以得用url编码 payload: http://jdctfweb.ngrok.xiaomiqiu.cn/web3-re/?jdctf=123%00%23biubiubiu

还记得hash么?

还是源码

代码语言:javascript
复制
<?php 
error_reporting(0);  
include_once('flag.php');  
highlight_file('index.php');   

$md51 = md5('QNKCDZO');  
$a = $_GET['b'];  
$md52 = md5($a);  
if(isset($a)){  
if ($a != 'QNKCDZO' && $md51 == $md52) {  
    echo $flag;  
} else {  
    echo "false!!!";  
}}  
?>

很简单呀=。= 就是拿一个经常用的 240610708

皮皮更健康~

进题目

进入之后 发现是jsfuck

跑一下 出来一串 3D45353D39333D38383D45353D39333D38383D45353D39333D38383D45353D39333D38382C3D45343D42443D41303D45383D41323D41423D45393D41413D39373D45343D42413D38362C3D0A3D45343D42383D38443D45363D39383D41463D45383D42463D39393D45343D42383D41412C3D45353D42303D42313D45393D39373D41453D45343D42443D41303D45383D41373D41333D0A3D45343D42413D38363D45353D38443D38413D45353D41343D41393D45363D42303D39343D45343D42383D38443D45363D42303D3934不知道啥编码了=。= 16进制解一下

=E5=93=88=E5=93=88=E5=93=88=E5=93=88,=E4=BD=A0=E8=A2=AB=E9=AA=97=E4=BA=86,=\n=E4=B8=8D=E6=98=AF=E8=BF=99=E4=B8=AA,=E5=B0=B1=E9=97=AE=E4=BD=A0=E8=A7=A3=\n=E4=BA=86=E5=8D=8A=E5=A4=A9=E6=B0=94=E4=B8=8D=E6=B0=94 (让我觉得是misc) 解出来也不知道是啥拖到百度搜索一下

可以看到是 Quoted-printable编码 之前一直没碰到过=。=

解一下好气啊。。。。再看看题 F12 fuck。。

%3D就是等号还是一个 Quoted-printable编码

这里有http://ctf.ssleye.com/cvencode.html

119,104,49,116,101,95,49,115,95,115,48,95,104,52,110,100,115,48,109,69 有完没完了。。。一看就知道是ascii码

233333

z

在头里面发现一个hint 16进制的解一下是 MRWWY5DGM46T2=== 突然看到url 里面有一个look-misc又是misc吗。。。 三个等号 base32解一下 出来是 dmltfg== base64再解一下

vim有两个特性

  1. vim备份文件 默认情况下使用Vim编程,在修改文件后系统会自动生成一个带~的备份文件,某些情况下可以对其下载进行查看; index.php普遍意义上的首页,输入域名不一定会显示。 它的备份文件则为index.php~
  2. vim临时文件 vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是submit,则它的临时文件 .submit.swp。如果文件正常退出,则此文件自动删除。

找了很久在index.php~发现了。。 源码

代码语言:javascript
复制
<?php
header('content-type:text/html;charset=utf-8');
include './flag.php';
error_reporting(0);
if(empty($_GET['id'])){
    header('location:./1ndex.php');
}else{
    $id = $_GET['id'];
    if (!is_numeric($id)) {
        $id = intval($id);
        switch ($id) {
            case $id>=0:
                echo "蹇嚭鍘诲惂锛岃蛋閿欒矾浜嗭綖锝烇綖<br>";
                echo "杩欎箞绠€鍗曢兘涓嶄細涔堬紵";
                break;
            case $id>=10:
                exit($flag);
                break;
            default:
                echo "浣犺蛋涓嶅埌杩欎竴姝ョ殑!";
                break;
        }
    }
}

?>

这样就过了

is_numeric只要后面加任何除数字之外的字母或者符号即可绕过 不过我做的时候发现他的代码和备份好像不一样23333 id为0的时候出来的是flag

PHP

F12源码 23333我喜欢

代码语言:javascript
复制
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];

if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    echo "hello admin!<br>";
    include($file); //class.php
}else{
    echo "you are not admin ! ";
}

file_get_contents出来的内容要和 the userisadmin相等用php的伪协议php://input post里面放 the user is admin

用伪协议读一下class.php的代码

代码语言:javascript
复制
<?php

class Read{//f1a9.php
    public $file;
    public function __toString(){
        if(isset($this->file)){
            echo file_get_contents($this->file);    
        }
        return "__toString was called!";
    }
}
?>

反序列化 f1a9.php读不到 读一下index.php的代码

代码语言:javascript
复制
<?php
$user = @$_GET["user"];
$file = @$_GET["file"];
$pass = @$_GET["pass"];

if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    echo "hello admin!<br>";
    if(preg_match("/f1a9/",$file)){
        exit();
    }else{
        include($file); //class.php
        $pass = unserialize($pass);
        echo $pass;
    }
}else{
    echo "you are not admin ! ";
}

?>

<!--
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];

if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    echo "hello admin!<br>";
    include($file); //class.php
}else{
    echo "you are not admin ! ";
}
 -->

原来是因为有一个f1a9的waf怪不得读不到 只要构造一个反序列化 来输出flag

构造反序列化 得用file把class.php导入然后才能使用read类 http://jdctfweb.ngrok.xiaomiqiu.cn/web6-php/?user=php://input&file=class.php&pass=O:4:"Read":1:{s:4:"file";s:8:"f1a9.php";}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 签到题~
  • 你知道正则么?
  • 还记得hash么?
  • 皮皮更健康~
  • z
  • PHP
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档