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 包内容;
uncompyle6
或 pycdc
—— 将 .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)
跑一下
Yunxi{20250812}
来喽来喽
下载附件后是exe
先查一下壳
是zip,给它改为 zip后缀解压一下看看文件
发现一堆txt文件 images里面也是一堆图片
但是发现有一个exe文件
exe就再查一下
发现是pyinstaller
那就和上面那题一样解包
之前师兄说这种直接就找 pyc,所以注意到 d.pyc
然后进行反编译
PyLingual
这个网址要挂代理才能访问
得到源代码,一个加密过程,有加密数据,而密钥在那个 txt 文件里面
搜了一下是python中的一种对称加密方式,使用fernet解密
Fernet 在线解密 | 长亭百川云
这是什么东东,是python代码
所以关键部分就是输入“糖果”之后就会输出 flag
但是喵的不能复制,那笨方法就是分屏一个个敲了提交
当然,截屏后文字提取也可以
看了一下同学的好方法是继续利用python代码输出
将flag生成代码就复制粘贴,用python输出
喜欢师兄讲的课吗(安卓逆向)
下载的附件名就叫 zip 所以改后缀.zip
解压后是个apk文件
这里也是学习到了
安卓逆向所需工具:
任务 | 工具推荐 |
---|---|
反编译 APK | jadx、apktool |
分析 .so 库 | Ghidra、IDA Pro、Cutter、Radare2 |
解密、调试算法 | Frida(动态分析)、Python(重写算法) |
这题用用jadx来进行安卓逆向
下载jadx
jadx安卓反编译工具 0.6.1下载_jadx安卓反编译工具 0.6.1官方下载_3DM软件
下载后先进入jadx的文件夹中用cmd来打开Dos命令窗口
然后逐一执行
cd lib
jadx-0.6.1\lib>java -jar yourjadxversion.jar
这样就进入了 gui 界面的 jadx
同时打开刚刚的apk文件
接下来就可以开始逻辑分析了(找main函数......和idea差不多)