Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >攻防世界web进阶区wtf.sh-150详解

攻防世界web进阶区wtf.sh-150详解

作者头像
wuming
发布于 2021-01-18 13:04:45
发布于 2021-01-18 13:04:45
98200
代码可运行
举报
文章被收录于专栏:wuming_CTFwuming_CTF
运行总次数:0
代码可运行
  1. 1. 题目
    1. 1.1. 详解

题目

看起来像一个论坛,可以注册,登录

详解

我们随便打开一个 尝试注入

并没有发现可以注入

注册发现,admin已经存在, 我们看看能不能二次注入

看来也不行

正常登录试试看看有没有其他漏洞

我们发送的时候,看到有个参数,我们试试目录穿越 使用../

发现了源码泄露

发现有一个flag 那么我们代码审计

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
<head>
    <link rel="stylesheet" type="text/css" href="/css/std.css" >
</head>
$ if contains 'user' ${!URL_PARAMS[@]} && file_exists "users/${URL_PARAMS['user']}"
$ then
$   local username=$(head -n 1 users/${URL_PARAMS['user']});
$   echo "<h3>${username}'s posts:</h3>";
$   echo "<ol>";
$   get_users_posts "${username}" | while read -r post; do
$       post_slug=$(awk -F/ '{print $2 "#" $3}' <<< "${post}");
$       echo "<li><a href=\"/post.wtf?post=${post_slug}\">$(nth_line 2 "${post}" | htmlentities)</a></li>";
$   done 
$   echo "</ol>";
$   if is_logged_in && [[ "${COOKIES['USERNAME']}" = 'admin' ]] && [[ ${username} = 'admin' ]]
$   then
$       get_flag1
$   fi
$ fi
</html>

这里写的,如果我们登录时cookies是admin同时username=admin 我们即可获得flag

我们看到有一些user 同时他是users的目录 我们试试users 看看能不能进行读取

果然发现了加密信息之类的,我们怀疑他是token

果然他给我们赋值了,我们正常发东西即可,修改cookie即可

在返回包中因为有set cookie 所以我们直接修改

我们在profile处找到了前半个flag 我们继续分析之前泄露的源码 因为整个网站都是wtf的文件,所以我们看看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
max_page_include_depth=64
page_include_depth=0
function include_page {
    # include_page pathname
    local pathname=$1
    local cmd=
    [[ ${pathname(-4)} = '.wtf' ]];
    local can_execute=$;
    page_include_depth=$(($page_include_depth+1))
    if [[ $page_include_depth -lt $max_page_include_depth ]]
    then
        local line;
        while read -r line; do
            # check if we're in a script line or not ($ at the beginning implies script line)
            # also, our extension needs to be .wtf
            [[ $ = ${line01} && ${can_execute} = 0 ]];
            is_script=$;
            # execute the line.
            if [[ $is_script = 0 ]]
            then
                cmd+=$'n'${line#$};
            else
                if [[ -n $cmd ]]
                then
                    eval $cmd  log Error during execution of ${cmd};
                    cmd=
                fi
                echo $line
            fi
        done  ${pathname}
    else
        echo pMax include depth exceeded!p
    fi
}

这里有一个replay功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function reply {
    local post_id=$1;
    local username=$2;
    local text=$3;
    local hashed=$(hash_username "${username}");
    curr_id=$(for d in posts/${post_id}/*; do basename $d; done | sort -n | tail -n 1);
    next_reply_id=$(awk '{print $1+1}' <<< "${curr_id}");
    next_file=(posts/${post_id}/${next_reply_id});
    echo "${username}" > "${next_file}";
    echo "RE: $(nth_line 2 < "posts/${post_id}/1")" >> "${next_file}";
    echo "${text}" >> "${next_file}";
    # add post this is in reply to to posts cache
    echo "${post_id}/${next_reply_id}" >> "users_lookup/${hashed}/posts";
}

这行代码把用户名写在了评论文件的内容中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "${username}" > "${next_file}";

flag2太难搞了,我们只能抄师傅们作业了

如果用户名是一段可执行代码,而且写入的文件是 wtf 格式的,那么这个文件就能够执行我们想要的代码。 (而且wtf.sh只运行文件扩展名为.wtf的脚本和前缀为’$’的行)

${find,/,-iname,get_flag2} 这里前面加个$是wtf文件执行命令的写法 find 所有目录下 不分大小写, get_flag2的名字的文件

我们首先上传这样一个wtf文件 然后我们进行访问

%09是水平制表符,必须添加,不然后台会把我们的后门当做目录去解析。 获得 flag2 所在的路径。

继续构造用户名为恶意代码。$/usr/bin/get_flag2 写入后门:

访问后门,得到Flag: 149e5ec49d3c29ca} ļv’ RE: hello

拼接得到xctf{cb49256d1ab48803149e5ec49d3c29ca}

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】2023年06月 攻防世界-Web(wtf.sh-150)
目录穿透漏洞是一种安全漏洞,允许攻击者通过在URL中操纵目录路径,访问到应用程序中不应该被公开访问的文件或目录。攻击者通常利用此漏洞来盗取敏感信息,如数据库凭证、用户密码等。
愚公搬代码
2025/05/28
900
【愚公系列】2023年06月 攻防世界-Web(wtf.sh-150)
攻防世界web进阶区ics-07详解
page不能为空,同时,他的值不能等于index.php这样,就会包含flag.php文件 否则重定向到flag.php这个文件
wuming
2021/01/21
1.5K0
攻防世界web进阶区ics-07详解
攻防世界web进阶区Web_php_wrong_nginx_config详解
那么我们使用御剑进行扫描,扫描到了admin和robots.txt 我们访问admin试试
wuming
2021/01/21
9800
攻防世界web进阶区Web_php_wrong_nginx_config详解
攻防世界web进阶区Zhuanxv详解
扫描目录发现了一个list 我们使用了好几个扫描工具,只有wwwscan,和webdirscan可以,(可能是我字典太菜了)
wuming
2021/01/21
1.1K1
攻防世界web进阶区Zhuanxv详解
Hackme-Web-Writeup
hide and seek Can you see me? I’m so close to you but you can’t see me. 这题查看源码即可。 guestbook This
wywwzjj
2023/05/09
4770
Hackme-Web-Writeup
Hgame_week3_web
Payload : 1andif((1=2),exp(999999999),1)#
安恒网络空间安全讲武堂
2019/03/08
1.2K0
Hgame_week3_web
34c3 部分Web Writeup
34c3应该算是2017年年末的最后一个惊喜了,比赛题目虽然有非预期导致难度降了很多,但是从CTF中能学到什么才是最重要的,其中Web有3个XSS题目,思路非常有趣,这里整理了一下分享给大家。
Seebug漏洞平台
2018/03/16
1.7K7
34c3 部分Web Writeup
【愚公系列】2023年06月 攻防世界-Web(ics-07)
php是一种弱类型语言,意味着在变量的赋值和使用过程中,不需要显式地定义变量的类型。php会根据变量的值自动判断变量的数据类型。
愚公搬代码
2025/05/28
870
【愚公系列】2023年06月 攻防世界-Web(ics-07)
攻防世界新手练习Web writeup
刷题 从简单的网站开始: https://adworld.xctf.org.cn 0x01查看源码 curl http://111.198.29.45:31684 0x02 get_post htt
用户5878089
2019/07/24
1.3K0
攻防世界Web部分Wp
{"action":"buy","numbers":[true,true,true,true,true,true,true]}
用户5878089
2019/07/24
1.3K0
PHP Web 木马扫描器
<?php /**************PHP Web木马扫描器************************/ /* [+] 版本: v1.0
用户1696846
2018/07/16
5.2K0
攻防世界web进阶区comment详解
只要我们输入任何一个评论,他就会让我们进行登录, 我们可以通过他的文字提示,发现少了三位,一般我们都会上数字
wuming
2021/01/21
1.4K2
攻防世界web进阶区comment详解
hackme.inndy.tw的19道web题解(下)
目录 写在前面 ...... dafuq-manager 1 dafuq-manager 2. dafuq-manager 3. wordpress 1. webshell 写在前面 最近发现了一
安恒网络空间安全讲武堂
2018/02/23
3.4K0
hackme.inndy.tw的19道web题解(下)
攻防世界web进阶区ics-05
发现了一个输入的函数 他如果是字母和数字组合的话,输出page内容,同时die掉 如果不是字母和数字的组合的话,
wuming
2021/01/18
6130
WordPress Popular Posts 5.3.2 远程代码执行
https://github.com/rapid7/metasploit-framework
Khan安全团队
2021/12/22
9940
python flask web 博客实例 博客模块 2
1  app/models.py from markdown import markdown import bleach class Post(db.Model): tablename = 'posts' id = db.Column(db.Integer, primary_key=True) body = db.Column(db.Text) timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) @staticmethod def on_changed_body(target, value, oldvalue, initiator): allowed_tags = ['a', 'abbr', 'acronym', 'b', 'blockquote', 'code','em', 'i', 'li', 'ol', 'pre','strong', 'ul','h1', 'h2', 'h3', 'p'] target.body_html = bleach.linkify(bleach.clean(markdown(value,output_format='html'),tags=allowed_tags, strip=True)) db.event.listen(Post.body, 'set', Post.on_changed_body) class User(UserMixin, db.Model): # ... posts = db.relationship('Post', backref='author', lazy='dynamic') @staticmethod def generate_fake(count=100): from sqlalchemy.exc import IntegrityError from random import seed import forgery_py
用户5760343
2019/07/05
5250
XCTF-赛博地球杯工业互联网安全大赛web部分题解
0x01工控云管理系统项目管理页面解析漏洞 题目首先给出了源码: `http://47.104.156.32:20007/view-source.php` 关键代码如下: 第一层绕过 php <?p
安恒网络空间安全讲武堂
2018/02/06
2.4K0
XCTF-赛博地球杯工业互联网安全大赛web部分题解
ACTF-Web部分题复现
goahead v5.1.4 存在环境变量注⼊漏洞 (CVE-2021-42342)
pankas
2022/08/10
8100
ACTF-Web部分题复现
BugkuCTF之web解题记录(一)
构造payload:**?file=php://filter/read=convert.base64-encode/resource=index.php**
十二惊惶
2024/02/28
2080
2017 LCTF WriteUp 4篇
周末刚刚结束的LCTF,我们队一共做出了4道web,一道misc还有一道问卷调查(好气啊没抢到一血换pwnhub邀请码),感谢吃饭去大佬带飞~ 前言 对本渣渣而言,本次比赛质量还是不错的,我们队做出的四道web就涉及到了CBC字节翻转攻击、PaddingOracle攻击、sprintf格式化注入、sql报错注出库名表名、join注入出列名、orderby无表名注入数据、SSRF绕过、条件竞争、7个字符内getshell等知识,收获颇丰。下面是4道web的题目和WriteUp: Simple blog “他
安恒网络空间安全讲武堂
2018/02/06
1.5K0
2017 LCTF WriteUp 4篇
相关推荐
【愚公系列】2023年06月 攻防世界-Web(wtf.sh-150)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验