WP-CSAW CTF Qualification Round 2016 wtf.sh

在XCTF上刷题,刷到了这道神仙题,顺着别人的wp做了一遍

第一部分 flag1

首先能看到这是一个有注册,登录的功能基本齐全的论坛系统

找源码

随便点一个文章链接,可以看到是通过参数post选择文章的

post参数身上进行测试,程序对post的值过滤不严,有目录穿越漏洞,访问post.wtf?post=../能够读取到源码

明显这不是一个常见的 php, python, java, go 等语言的 web 应用。结合题目wtf.sh, 这是一个linux系统上靠shell脚本跑起来的web应用

搜索flag找到如下代码

html解码下得到如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ # vim: ft=wtf
$ source user_functions.sh
<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>

发现只要以admin身份登录就能够得到flag1

以admin身份登录

继续扫目录,发现?post=../users目录下存放了user的token和加密的密码

AbelChe wechat
扫码加微信
Donate here!!!
0%