[HDCTF 2023]YamiYami | NSSCTF

第一个链接有 url    可能是文件包含,访问   file://etc/passwd    无法请求

etc/passwd 这个文件通常存储着用户账户的信息,包括用户名、用户 ID、用户组 ID 等。

访问  file:///etc/passwd 试试

得到

读取一下变量环境

/proc/1/environ 

引用的是进程 ID 为 1 的 init 进程的环境变量。

init 进程是 Linux 系统中的第一个用户空间进程,它负责启动和管理其他用户进程。

得到

FLAG=NSSCTF{86a73e44-0cb6-4a9d-a807-927f22dcc1e6}

第3个链接有pwd

执行 pwd 命令可得知目前所在的工作目录的绝对路径名称。

尝试任意文件读取,读取源码app.py试试   read?url=file://app.py

得到   re.findall('app.*', url, re.IGNORECASE)

是一个使用正则表达式进行匹配的代码片段。给url 中查找满足正则表达式模式 'app.*' 的所有匹配项,并以列表的形式返回这些匹配项。

re.IGNORECASE 是一个参数,它告诉 re.findall() 在匹配时忽略大小写

URL双重编码尝试绕过waf

app/app.py

> %61%70%70/%61%70%70%2E%70%79

>%25%36%31%25%37%30%25%37%30%25%32%66%25%36%31%25%37%30%25%37%30%25%32%65%25%37%30%25%37%39


 

session伪造
源码看到了session需要满足要求才会有权限读取上传的文件,由于伪造session需要密钥SECRET_KEY,而密钥SECRET_KEY的生成方式源码也已经给出了:
random.seed(uuid.getnode())
app.config['SECRET_KEY'] = str(random.random()*233)

使用 Python 的 random 模块和 uuid 模块来生成随机数和随机密钥。

首先,uuid.getnode() 函数返回当前机器的唯一标识符(通常是硬件 MAC 地址)。这个值被传递给 random.seed() 函数,用于初始化随机数生成器的种子。通过使用机器的唯一标识符作为种子,可以增加生成的随机数的独特性。

对于伪随机数,当seed固定时,生成的随机数是可以预测的,也就是顺序为固定的,所以只要知道seed的值即可。这里看到seed使用的uuid.getnode()函数,该函数用于获取Mac地址并将其转换为整数。所以我们还需要读一下Mac地址

random.random()*233 表达式生成一个介于 0 到 233 之间的随机浮点数。该值的字符串表示被赋给 app.config['SECRET_KEY'] 变量,成为密钥

任意文件读取

/read?url=file:///sys/class/net/eth0/address

得到Mac地址

生成密钥 162.47935789789284

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值