前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019DDCTF部分Web Write Up

2019DDCTF部分Web Write Up

作者头像
Elapse
发布2020-08-17 11:19:40
6550
发布2020-08-17 11:19:40
举报
文章被收录于专栏:E条咸鱼

简介

本篇为2019年DDCTF部分Web的write up,整体来说,能做的都算是中等难度,就是有些耗时间,其次就是思路的问题了,为了避免太长所以我分两篇来写,不喜勿喷,喷了我也不会理

滴~(题目名字)

打开题目,看到页面有图片,打开源代码看一下

网站前端做了这么一个操作,将图片内容直接以base64的方式写在了HTML文件中,这样的好处是节省HTTP流量,得出结论,这一处可以将其他文件一并包含出来

那么,网页通过GET的方式传入JPG参数的值,最后将文件内容包含出来,所以尝试逆向写一个别的文件名,先解密

Base64解码两次后,16进制转字符串可得出flag.jpg

第一次base64解码

第二次base64解码

第三次16进制转字

这里的步骤是 base64->base64->16进制转字符 所以反着来编码的操作是 字符串转16进制->base64->base64即可,通过这个操作后得到index.php的base64编码,传入给jpg这个参数

得到index.php的base64编码内容 拿去解码可得源码

代码语言:javascript
复制
<?php
/*
 * https://blog.csdn.net/FengBanLiuYun/article/details/80616607
 * Date: July 4,2018
 */
error_reporting(E_ALL || ~E_NOTICE);


header('content-type:text/html;charset=utf-8');
if(! isset($_GET['jpg']))
    header('Refresh:0;url=./index.php?jpg=TmpZMlF6WXhOamN5UlRaQk56QTJOdz09');
$file = hex2bin(base64_decode(base64_decode($_GET['jpg'])));
echo '<title>'.$_GET['jpg'].'</title>';
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
echo $file.'</br>';
$file = str_replace("config","!", $file);
echo $file.'</br>';
$txt = base64_encode(file_get_contents($file));

echo "<img src='data:image/gif;base64,".$txt."'></img>";
/*
 * Can you find the flag file?
 *
 */

?>

最坑的部分来了,在第三行中,有一篇文章地址,点击进去后

没有任何内容,这里进作者的主页

在倒数第三篇文章中看到一个vim 异常退出 swp的文章,点进去后,看到一个文件名 practice.txt.swp

在网页中直接访问,获得提示

告诉你了当前目录下还有一个flag!ddctf.php的文件,所以我们利用上面的方法,将这个Php的内容包含出来 这里要注意一下,在index.php中,有一个过滤

代码语言:javascript
复制
$file = hex2bin(base64_decode(base64_decode($_GET['jpg'])));
$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
echo $file.'</br>';
$file = str_replace("config","!", $file);
echo $file.'</br>';

这里代码的操作是 首先先二次解码base后16进制转字符串得到文件名,接着$file这个函数就是文件名了 到第二步,他会用pregreplace来正则匹配所有的字符串,但不包括符号,所以!到这一步就没了,我们从上面可以看到文件名是含有感叹号的,那么怎么办呢,不着急 第三步的操作是,用strreplace()这个函数来进行替换,将config替换为!,这样一来感叹号就又回来了,所以构造的时候,把config当成感叹号来写就好了 你可以这么写

代码语言:javascript
复制
Flag!configddctf.php

也可以

代码语言:javascript
复制
Flagconfigddctf.php

最后得到base64后,传入,打开源代码后解码就可以看到php的源代码了

代码语言:javascript
复制
<?php
include('config.php');
$k = 'hello';
extract($_GET);
if(isset($uid))
{
    $content=trim(file_get_contents($k));
    if($uid==$content)
    {
        echo $flag;
    }
    else
    {
        echo'hello';
    }
}

?>

这里就是典型的变量覆盖了,给这个php传入两个参数,uid和k,并且内容都会空,这样Php就会把这两个函数都覆盖掉为空,就符合if的条件了

一言不合把我ban了,那我只能说祝DDCTF你越办越好

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

本文分享自 E条咸鱼 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 滴~(题目名字)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档