wtf.sh-150
前言:
最近在刷ctf题,在理解了大佬们的wp后自己做完之后,从头到尾把思路过了一遍,做次记录为以后复习和打比赛做准备,同时也希望能帮到别人。
0x01
进入网址,发现是一个论坛,有注册,登录和发表的功能,初步猜测应该是可以利用账号进行获取flag,我们先顺着页面向下找一找,看有没有什么提示信息,没有什么发现,然后路径扫描试试,发现有一个post.wtf路径存在路径穿越漏洞,能够获取网站的源码,所以我们试着用这个进行网站源码的获取
进入页面
向下找找看有没有什么有没有有用的东西,一堆源码,太花时间,所以我们直接搜索flag关键词,看有没有
果然有,get_flag1,所以我们把这段源码整理一下,整理如下
<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>
在这段代码中的关键代码是:
if is_logged_in && [[ "${COOKIES['USERNAME']}" = 'admin' ]] && [[ ${username} = 'admin' ]]
$ then
$ get_flag1
这段代码的意思是说,如果我们的登录用户是admin,那么我们就能获得flag1,所以,看来,如果我们想要获得falg1,就必须是admin用户登录,那么如何登录呢?代码中也给了提示,代码检查的是cookies,经过抓包,发现登录用户都会有自己的一个Token,看来我们只需要修改登录用户名和登录的Token即可登录admin用户
那么,我们从哪里获得admin用户的Token呢?我们还是利用路径穿越漏洞,看看有没有保存用户的目录,发现真的有
红色框里的是Token,在这个上面还有一串字符,经过分析是sha1,但是对于我们登录admin用户没有用处,所以我们伪造usernam和Token登录admin,但是这里提醒一下,不仅仅需要修改Token就可以进去,同时还得修改
这里解释一下为什么需要修改这个
这里我们发现每一个用户应该都是有一个文件来存储,所以想要登陆某个用户,也得加上这个,除非你是账号密码登陆
发现flag1,但是这个flag不是完整的,看来我们还得继续寻找第2个flag
0x02
到这里我们想想还有什么我们没有注意到,就是wtf,我们知道wtf不是一般常规的网页文件,所以我们试着寻找解析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+=$'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
}
这段代码是能够解析并执行wtf文件
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";
}
这段代码是能够上传wtf文件并执行,那这样的话我们上传执行命令上去,让服务器执行我们的命令,从而我们能够找到服务器中flag2的位置和内容
到这里为止,我们想起论坛还有一个发表的功能
echo "${username}" > "${next_file}";
这段代码就是把用户名写在了评论文件的内容中,如果用户名是一段可执行代码,并且写入文件的格式是wtf格式的,那么这个文件就可以执行我们逍遥的代码了,所以我们需要怎么做呢?
0x03
通过以上分析,我们大致知道我们要做什么了,那接下来就来完成相应过程,首先,我们要写入一个后门,然后我们通过访问后门来得代码返回的结果,那么我们需要先注册一个用户名,而且用户名是可执行代码,然后观察返回结果
一、
上传后门
注册了一个普通用户,然后发表发表评论出上传一个后门,上面加%09的原因是:%09是水平制表符防止后台把我们的后门当做目录去解析,到此,后门上传成功,接下来注册含执行代码的用户
二、
注册用户
${find,/,-iname,get_flag2}
将用户名写入后门中
然后访问后门地址,得到如下回显
说明flag2的位置在这个路径,这里解释一下为什么要注册一个这样的用户,前面我们在得到flag1的时候的格式是get_flag1,所以这里我们注册一个get_flag2的用户,来寻找falg2,
三、
注册用户
$/usr/bin/get_flag2
让后访问后门地址
得到如下结果:
到此得到flag2
0x04
总结:这道题应该是最近做过的最难的了,通过这道题学到了很多姿势。对wtf格式的文件增长了利用姿势,通过用户名来执行代码在之前是真没想过。总之这题不愧为国际赛题
wtf.sh-150的更多相关文章
- 基于canvas的二维码邀请函生成插件
去年是最忙碌的一年,实在没时间写博客了,看着互联网行业中一个又一个人的倒下,奉劝大家,健康要放在首位,保重身体.好了,言归正传,这是17年的第一篇博文,话说这天又是产品同学跑过来问我说:hi,lenn ...
- wx.ScrolledWindow wx.PseudoDC
# encoding: utf-8 import logging import random import wx import wx.lib.inspection def GetMyBitmap(): ...
- 攻防世界(XCTF)WEB(进阶区)write up(三)
挑着做一些好玩的ctf题 FlatScience web2 unserialize3upload1wtf.sh-150ics-04web i-got-id-200 FlatScience 扫出来的lo ...
- 记录一道神仙CTF-wtf.sh-150
记录一道完全超出我能力的CTF神仙题(不愧是世界级比赛的真题orz),此题我仅解出了第一部分的flag,第二部分则参考了WP.不得不说这种题目解出来还是很有自豪感的嘛~ 直接看题! 0x01 第一部 ...
- linux执行sh脚本文件命令
linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...
- redhat--nagios插件--check_traffic.sh
****在被监控主机安装nrpe**** (1)在被监控主机上,增加用户和密码 useradd nagios passwd nagios (2)安装nagios插件 tar zxf nagios-pl ...
- server宕机监控、检測、报警程序(139绑定手机短信报警)monitor_down.sh
宕机监控报警程序 一. 需求来源 宕机对运维人员来说,最痛苦了.怎样检測一台server是否还在正常执行,假设该server宕机,怎样在第一时间监測到并通知一线运维人员进行维护,最大化降低损失. ...
- [EXP]Jenkins 2.150.2 - Remote Command Execution (Metasploit)
## # This module requires Metasploit: https://metasploit.com/download # Current source: https://gith ...
- tomcat7的catalina.sh配置说明
捞财宝项目8G内存tomcat7的配置JAVA_OPTS="-Xms1024m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=2048M -XX:M ...
- ./run.sh --indir examples/demo/ --outdir examples/results/ --vis
(AlphaPose20180911) luo@luo-ThinkPad-W540:AlphaPose$ ./run.sh --indir examples/demo/ --outdir exampl ...
随机推荐
- spring mvc json返回防止乱码
乱码问题 乱码一直是编程的常见问题,spring mvc 返回json数据时可能导致乱码,需要在controller中添加如下代码: @RequestMapping("/test" ...
- app测试、web测试-怎么测?
app测试 前言 看过许多大神对APP测试的理解,博主总结了一下我们平时测试APP应该注意的一些测试点并结合大神的理解,总结出这篇文章. 一.测试周期 测试周期一般为两周,根据项目情况以及版本质量可适 ...
- 聊聊Grpc使用中的坑以及怎么填
总所周知,随着云技术的发展,和业务的复杂度的上升,越来越多的系统开始拆分成独立的子模块微服务.模块之间免不了相互通信.但是随着业务量的增多,传输量也随之增大,偶发性timeout,无响应, 传输量过大 ...
- Angular核心概念之五---过滤器
Filter:过滤器,用于在view中呈现数据时显示为另一种格式:过滤器的本质是一个函数,接收原始数据转换为新的格式进行输出: function(oldVal){ ... return newVal ...
- 使用phoenix踩的坑与设计思考
本文主要介绍在压测HBase的二级索引phoenix时踩的一个坑,使用时需要特别注意,而且背后的原因也很有意思,可以看出HBase和Phoenix对元数据设计上的差异. 1.问题介绍 在做phoeni ...
- 疯狂VirtualBox实战讲学录 以及 virtualbox完全学习手册 之我见
都是是很专业,并钻石得很深的内容,但,有些事情是交替进行着的深入,太专注于VIRTUAL BOX就必要要牺牲其它的东西.
- F. Machine Learning 带修端点莫队
F. Machine Learning time limit per test 4 seconds memory limit per test 512 megabytes input standard ...
- CF820D Mister B and PR Shifts
题目链接:http://codeforces.com/problemset/problem/820/D 题目大意: 给出一个\(n\)元素数组\(p[]\),定义数组\(p[]\)的误差值为\(\su ...
- opencart 3.0 版本数据库数据表字典(详细篇)
1.下文是opencart3.0版本数据库数据表字典,表字段与功能的介绍都比较详细. 数据表 address :地址表,会员在结账时储存的账单地址或者配送地址(这个与区域配送方 ...
- 自动网络搜索(NAS)在语义分割上的应用(二)
前言: 本文将介绍如何基于ProxylessNAS搜索semantic segmentation模型,最终搜索得到的模型结构可在CPU上达到36 fps的测试结果,展示自动网络搜索(NAS)在语义分割 ...