当前位置: 首页 > news >正文

25春云曦期末考复现

Web

疯狂星期四

 <?php$tg1u=$_GET['tg1u'];if(!preg_match("/0|1|[3-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\|localeconv|pos|current|print|var|dump|getallheaders|get|defined|str|split|spl|autoload|extensions|eval|phpversion|floor|sqrt|tan|cosh|sinh|ceil|chr|dir|getcwd|end|next|prev|reset|each|array|reverse|pop|rand|flip|content|echo|readfile|highlight|show|source|file|assert|getallheaders|current|pos/i", $tg1u)){//我要吃疯狂星期四!!!!!!!!!eval($tg1u);
}
else{die('这都做不出来是准备请师兄吃疯狂星期四吗?');
}highlight_file(__FILE__); 

考核的时候知道是原题,但搜不到emmm

考完之后找师兄请教才知道迅速查找的方法就是直接搜最关键的:正则表达式

还有就是搜索引擎的选择也很重要,平时我们习惯使用的一些引擎上面其实并没有多少好东西

换一换找一找就有了

当然了,学习方法才是最重要的

看了正则表达式发现,字母a-z大小写、空格全被过滤, 数字就留了个2

所以这里需要构造一个session,用session_start() 来开启 session,在用 session_id() 来获取 session。

理论可行,但是发现查看根目录失败,这是因为PHPSESSID里面不能包含空格 

别忘了数字2是没被过滤的,所以这个时候就要想到用 hex2bin() 它会将十六进制转换为对应的ASCII码值

也就是说如果我将命令进行十六进制编码,再使用 hex2bin() 进行解码执行就可以绕过过滤

编码过后果然可行了 

然后继续

直接 cat /F111114a9g

admin Pro Max

是登录题

然后考核的时候也是弱口令 admin admin 试了一下就进去了

都点开看了一下没发现什么有用的

但是访问之后看url发现是通过 file 来读取文件的

考核一直以为是伪协议,这里得到提示返回 sql 注入

刚开始不管怎么样都找不到注入点,不管是 GET 还是 POST ,后面发现 单引号 ' 被过滤

大概意思就是在 username 语句处使用反斜杠 \ 把后面的单引号 ' 转义掉,就可以使 username 和 password 形成一个完整的 SQL 查询语句。

例如原查询语句为  ... username='$_POST[username]' and password='$_POST[password]'

加入单引号: ... username='$_POST[username]\' and password='$_POST[password]'

转义以后: ... username='$_POST[username] and password='$_POST[password]'

也就是不管前面对不对,后面的注入都会回显

这个时候尝试在 password 处进行注入就可以了

接下来就按老套路就可以了

 列数不对换成3试试

发现第2位是回显位

数据库名

 表名

列名

 爆flag

但这是个假的flag

后面我也不会,联想到 file 但不知道怎么做,问了同学才知道需要写入木马(sql写马的知识)

可以用 outfile 和 dumpfile 来写 

区别在于 outfile可以输出多行内容,而dumpfile只输出一行内容,还有outfile会破坏文件原有的数据格式 (如 \n 会变成 \)

用法:

"写入的内容" into outfile/dumpfile "绝对路径"

这里学到用 @@secure_file_priv 查询可以写入木马的路径

得到可以写入的目录 /var/lib/mysql-files/

接下来写入拿来的马

这个时候再 admin 弱口令进入 /home.php 界面,访问刚刚写入的目录下的马

 但是第2位没有回显,那就试试传一个参命令执行吧

然后在 secret 中找到 flag

 这次就对了

 瓦学弟上分记

这题就用 dirsearch 扫出php反序列化的源码,由于我还没学php反序列化,所以这题先放一下

图床

这题考核的时候我还是用 dirsearch 扫到源码

这题考核的时候我也是卡在寻找哈希值这一步,但是考核完出来找到网站了

就是这个 彩虹表 MD5 在線免費解密 MD5、SHA1、MySQL、NTLM、SHA256、SHA512、Wordpress、Bcrypt 的雜湊

所以那一串对应的哈希值转换过来是

Adm12geC

所以 TG1u 这个用户的密码知道了就可以登录,在这之前我发现普通用户也可以登录

 但是上传的图片没有权限查看

然后先用 TG1u 用户查看,密码登录

发现这次就可以查看到图片,说明密码正确

 然后既然是 file_path 就尝试一下普通用户命令执行

直接抓包搞一下

发现可以执行

这个时候就可以直接写马上去了

看一下传了这么多次终于是传上去了(1.php)

但是切换 TG1u 用户以后执行不了

system也不行

问了一下AI跟我说可能是我传递给 eval 的语法错误

那就只能用普通用户的 system() 进行双写绕过了,但是这样需要提权

之前可以用 sudo -i 的bug但是被修了

 用普通用户看了一下根目录发现了 flag 目确实是存在

那就切换为 TG1u 用户利用上传的马进行文件包含执行提权命令cat falg即可 

文件包含刚刚普通用户上传的 3.phtml 图片马(环境没了我重新开和上传了一下)

执行system sudo提权的同时查找 /flag 目录下的所有文件,然后 -exec 命令对找到的文件进行cat,再用占位符 {}填充,最后结束命令 \; 得到 flag

?file_path=3.phtml&a=system('sudo find /flag -exec cat {} \;');

 RE

师兄爱恋故事1(取证)

是名为exe也没有后缀的附件

加个 .exe 后缀试一下

提示是pyinstaller

所以应该就是用pyinstaller打包的py文件

用工具解包 

查了一下

你有用途是否能用 PyInstaller
.py 文件打包成 .exe✅ 支持
.exe 文件想逆向成 .py❌ 不支持(需要反编译工具)

 pyinstxtractor.py —— 提取 PyInstaller 包内容;

uncompyle6pycdc —— 将 .pyc 反编译成 .py;

Python 对应版本(重要!必须匹配)

 最下面有 师兄的故事.pyc 然后给他反编译成python

用在线工具把pyc转py文件 这里也可以:Pyc 转 Py - 百川在线工具箱 

 然后发现是AES加密

然后用ai写一个AES解密脚本 

from Crypto.Cipher import AES# 提供的信息
AES_KEY = b' \xf3\x10\x0bA.\xfe\xd1\xb9\x16\xa2\xde\x03\xc4\xdf\x00'
AES_IV = b',\x19\xd5\xd3\xf5\xf2\xe9\xf7\xd0\xe1\x0e\x98I!J\xcd'
ENCRYPTED_PASSWORD = b'.\xd6nP\x7f@Z\xe4\xb7\xd3\xfb\x82r_/q'
# 创建AES-CBC解密器
cipher = AES.new(AES_KEY, AES.MODE_CBC, AES_IV)# 解密数据
decrypted = cipher.decrypt(ENCRYPTED_PASSWORD)# 移除PKCS7填充
pad_length = decrypted[-1]
if pad_length < 1 or pad_length > AES.block_size:print("警告:填充值无效,可能不是PKCS7填充")password = decrypted
else:# 验证并移除填充if decrypted[-pad_length:] == bytes([pad_length] * pad_length):password = decrypted[:-pad_length]else:print("警告:PKCS7填充验证失败,尝试直接输出")password = decrypted# 尝试以多种编码格式解码结果
def decode_bytes(data):try:return data.decode('utf-8'), 'utf-8'except UnicodeDecodeError:try:return data.decode('latin-1'), 'latin-1'except:return data, 'hex'# 显示解密结果
result, encoding = decode_bytes(password)
print("\n" + "="*50)
print(f"密钥 (hex): {AES_KEY.hex()}")
print(f"IV (hex): {AES_IV.hex()}")
print(f"密文 (hex): {ENCRYPTED_PASSWORD.hex()}")
print("\n解密结果:")
if encoding == 'hex':print(f"原始字节: {password}")print(f"十六进制: {password.hex()}")print(f"Base64: {base64.b64encode(password).decode('utf-8')}")
else:print(f"明文密码: {result}")print(f"编码格式: {encoding}")print(f"原始字节: {password}")
print("="*50)

跑一下

来喽来喽

下载附件后是exe

先查一下壳

是zip,给它改为 zip后缀解压一下看看文件

发现一堆txt文件 images里面也是一堆图片

但是发现有一个exe文件

exe就再查一下

发现是pyinstaller 

那就和上面那题一样解包

之前师兄说这种直接就找 pyc,所以注意到 d.pyc

然后进行反编译

PyLingual

这个网址要挂代理才能访问

 

得到源代码,一个加密过程,有加密数据,而密钥在那个 txt 文件里面

搜了一下是python中的一种对称加密方式,使用fernet解密

Fernet 在线解密 | 长亭百川云

这是什么东东,是python代码 

所以关键部分就是输入“糖果”之后就会输出 flag

但是喵的不能复制,那笨方法就是分屏一个个敲了提交

当然,截屏后文字提取也可以

看了一下同学的好方法是继续利用python代码输出

将flag生成代码就复制粘贴,用python输出

http://www.dtcms.com/a/271554.html

相关文章:

  • “上下文工程”领域的部分参考资料
  • vue中v-for与v-if的优先级
  • 在已有 Nexus3 的基础上搭建 Docker 私有镜像仓库
  • 如何降低AIGC的有效策略是什么?降AIGC工具的创新与应用前景
  • 如何识别SQL Server中需要添加索引的查询
  • 3 STM32单片机-delay延时驱动
  • langchain从入门到精通(四十)——函数调用技巧与流程
  • 什么是公链?
  • 如何通过配置gitee实现Claude Code的版本管理
  • huggingface 笔记: Trainer
  • 期权盘位是什么意思?
  • 一级缓存与二级缓存深度剖析:作用域、配置与同步方案全解析
  • Unreal Engine 自动设置图像
  • 基于OpenCV的实时人脸检测系统实现指南 ——Python+Haar级联分类器从环境搭建到完整部署
  • 【PTA数据结构 | C语言版】线性表循环右移
  • AI进化论03:达特茅斯会议——AI的“开宗立派”大会
  • 【王阳明代数讲义】心气微积分西方体系汇流历史考述
  • Agent AI(1):多模态交互智能中的背景和动机
  • 2025快手创作者中心发布视频python实现
  • 各类电子设备镜像格式及文件系统统计
  • ETF期权交割日全攻略
  • Linux的 `test`命令(或等价中括号写法 `[空格expression空格]`)的用法详解. 笔记250709
  • 遍历map(LinkedHashMap)
  • 52 spi接口两笔读写耗时多大的问题
  • AP中的Execution Manager“非报告进程”和“伴随进程”概念解析
  • n8n文本语意识别与问题自动补充工作流的深化及企业级部署
  • 代码随想录Day15:二叉树(平衡二叉树、二叉树的所有路径、左叶子之和、完全二叉树的节点个数——全递归版本)
  • 记忆管理框架MemOS——在时序推理上较OpenAI提升159%
  • python+vue的企业产品订单管理系统
  • pytorch常用API