NewStarCTF 2023 公开赛道 Web week1-week2

目录

week1

泄漏的秘密

Begin of Upload 

Begin of HTTP

ErrorFlask

​Begin of PHP

R!C!E!

EasyLogin

​week2

游戏高手

include 0。0

ez_sql

​Unserialize?

Upload again!

R!!C!!E!!

week1

泄漏的秘密

使用ctf-scan.py(https://github.com/kingkaki/ctf-wscan)扫描敏感信息,扫出www.zip,index.php和robots.txt里面各一半flag

Begin of Upload 

前端检测文件拓展名:

先上传个图片文件,然后抓包修改后缀名为php,写入一句话:

解析成功:

读flag:

Begin of HTTP

按照它的提示传入get和post参数:

查看源码看到secret信息

base64解码

需要修改power为ctfer,抓包发现是Cookie参数,修改

提示用NewStarCTF2023浏览器,修改User Agent为:NewStarCTF2023

提示从newstarctf.com访问,修改Referer为newstarctf.com

本地用户,修改X-Real-IP为127.0.0.1,得到flag

ErrorFlask

输出number1和number2的和,提示不是ssti模板注入,flag在源码里面

传入字符,构造报错,查看源码,得到flag

Begin of PHP

数组绕过一切

R!C!E!

EasyLogin

爆破admin密码为000000,flag在重定向跳转页面

week2

游戏高手

直接修改分数得到flag

include 0。0

文件包含rot和base被过滤了,还有一个十六进制的可以用

?file=php://filter/read=convert.iconv.utf-8.utf-16le/resource=flag.php

ez_sql

先判断闭合方式,单引号异常

双引号正常,所以是单引号闭合

判断字段数,有过滤用大小写绕过,Order by 6回显异常,所以字段数为5

联合查询查数据

查表名,注意大小写绕过

查列名,注意大小写绕过

查列内容,注意大小写绕过

Unserialize?

当一个对象销毁时,__destruct魔术方法自动被调用,所以反序列化的时候对象销毁,__destruct魔术方法自动被调用。

构造poc

看到flag文件

用head命令读取flag

对于private变量,我们需要在类名和字段名前面都会加上\0的前缀

如果想放在浏览器中直接提交,我们可以将\0换成%00

Upload again!

黑名单限制了后缀名,还检测文件内容,Apache 服务器传入.htaccess文件,解析图片文件为php,文件内容使用base64编码绕过文件内容检测

上传.htaccess文件,解析shell.gif为php,文件内容base64编码

上传图片马,base解码内容为<?php eval($_POST["shell"])?>

解析成功,读取flag

R!!C!!E!!

git源码泄露得到源码

无参rce,查看getallheaders()函数 -> 取得服务器响应一个 HTTP 请求所发送的所有头信息。发现第二个是X-Request-ID这里实际情况可能不一样,

没有过滤next,构造poc读取flag

### 关于 NewStarCTF 公开赛 RSA_begin 的解题思路 #### 背景介绍 RSA 是一种基于大整数分解困难性的公钥加密算法。其核心在于通过两个大素数 \( p \) 和 \( q \),计算模数 \( n = p \times q \),并利用欧拉函数 \( \phi(n) = (p-1)(q-1) \) 来生成私钥 \( d \)[^1]。 在题目中已知参数如下: - \( p = 473398607161 \) - \( q = 4511491 \) - \( e = 17 \) 目标是求解私钥 \( d \),满足条件 \( e \cdot d \equiv 1 \ (\text{mod} \ \phi(n)) \)。 --- #### 计算过程详解 ##### 1. 计算模数 \( n \) 根据定义,\( n = p \times q \)。因此, \[ n = 473398607161 \times 4511491 = 2136002117282111. \] ##### 2. 计算欧拉函数 \( \phi(n) \) 由公式 \( \phi(n) = (p-1)(q-1) \),可得: \[ \phi(n) = (473398607161 - 1) \times (4511491 - 1) = 473398607160 \times 4511490 = 2135550968666920. \] ##### 3. 扩展欧几里得算法求逆元 \( d \) 为了找到 \( d \),需满足 \( e \cdot d \equiv 1 \ (\text{mod} \ \phi(n)) \)。这可以通过扩展欧几里得算法实现: 给定 \( a = e = 17 \), \( b = \phi(n) = 2135550968666920 \),执行扩展欧几里得算法得到 \( x \)(即 \( d \)),使得 \( ax + by = \gcd(a, b) \) 成立。 以下是 Python 实现代码: ```python def egcd(a, b): if a == 0: return (b, 0, 1) gcd, x1, y1 = egcd(b % a, a) x = y1 - (b // a) * x1 y = x1 return gcd, x, y def mod_inverse(e, phi_n): _, x, _ = egcd(e, phi_n) return x % phi_n # 已知参数 e = 17 phi_n = 2135550968666920 # 求解 d d = mod_inverse(e, phi_n) print(d) ``` 运行上述代码可以得出结果: \[ d = 125714762862169. \] --- #### 提交 Flag 最终将 \( d \) 值作为 flag 提交即可。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T1M@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值