Bugku——easyshell解题思路

首先查看题目提供的流量文件,打开发现有TCP和HTTP流量,追踪一下看看,发现

Accept: application/json, text/javascript, /; q=0.01

这是典型的webshell工具冰蝎的流量特征,放到CTF-NetA中进行webshell冰蝎流量解密,发现这么两个流量:

b'"status":"success","msg":"UEsDBBQAAQAAAG51l1h4ukJKNgAAACoAAAALAAAAc2VjcmV0MS50eHRtglHEWPDSyDT6pBoXjpfdGevXd1NvZ9CnLG4Un7y83+LSL2KOBX0pqFttRgi2GpGVd6qUb5pQSwMEFAABAAAA7nWXWJDfvEs4AAAALAAAAAsAAABzZWNyZXQyLnR4dOVQ/Md8iX3Cj817GjTDbpb518M6CSQ1oCFBGdlp+LcYm53MiQJvverPuHB1f+7DQyrcpX3Fl8TpUEsBAj8AFAABAAAAbnWXWHi6Qko2AAAAKgAAAAsAJAAAAAAAAAAgAAAAAAAAAHNlY3JldDEudHh0CgAgAAAAAAABABgATOCvi0mV2gEAAAAAAAAAAAAAAAAAAAAAUEsBAj8AFAABAAAA7nWXWJDfvEs4AAAALAAAAAsAJAAAAAAAAAAgAAAAXwAAAHNlY3JldDIudHh0CgAgAAAAAAABABgA540GG0qV2gEAAAAAAAAAAAAAAAAAAAAAUEsFBgAAAAACAAIAugAAAMAAAAAAAA=="'

b'{"msg":"U0dWc2JHOHNJR0oxZENCM2FHRjBJSGx2ZFNkeVpTQnNiMjlyYVc1bklHWnZjaUJwYzI0bmRDQnRaUzQ9","status":"c3VjY2Vzcw=="}\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e

一眼Base64,拿到赛博厨子进行Base64解密,

发现了这么一句话,先保存放着,继续解密

发现是一个zip文件,把他保存导出到本地

发现里面有两个txt文件,都很小但是需要密码,这里其实一开始回去翻流量找了半天,啥也没翻出来,爆也爆不出来,忽然想到前面解码出的的一句话,将他写进txt文件并压缩后,打开对比压缩包发现他与secret2的CRC值相同

局势瞬间明朗了起来~(≧∇≦)ノ

直接开始明文攻击

最终得到了压缩包密码,解压查看txt文件即可看到flag.

### 关于 `NULL` 的概念及其在编程中的应用 #### 1. **C语言中的 `NULL`** 在C语言中,`NULL` 是一个预定义的宏,通常表示空指针常量。它的具体实现依赖于编译器和平台,但在大多数情况下,它被定义为 `(void*)0` 或者简单的 `0`。 - 当尝试将整数 `0` 赋值给指针变量时,虽然语法上可以接受,但这并不是最佳实践[^1]。 - 使用 `NULL` 可以提高代码可读性和安全性。例如,在函数返回失败的情况下,可以通过返回 `NULL` 来指示错误状态[^3]。 然而,需要注意的是,尽管 `((void *)0)` 和 `NULL` 都代表空指针,但它们并不完全等价。某些编译器可能对 `NULL` 提供额外的支持或优化处理[^1]。 --- #### 2. **SQL 中的 `NULL`** 在 SQL 数据库中,`NULL` 并不是一个普通的数值,而是一种特殊的标记,用于表示缺失的数据或者未知的状态[^2]。 - 对于数据库设计而言,允许列存储 `NULL` 值意味着该列可以容纳未指定的信息。这可能会增加每行记录的空间开销,因为需要额外位来跟踪哪些字段是 `NULL`[^4]。 - 查询涉及 `NULL` 列时需特别小心,尤其是当使用逻辑运算符 (`AND`, `OR`) 或集合操作符 (`IN`, `NOT IN`) 时。由于三态布尔逻辑的存在(真、假以及不确定),可能导致意外的结果[^5]。 --- #### 3. **关于 bugku 头等舱题目与 `NULL` 的关联分析** 假设目标是从某张表提取特定条件下的数据,并排除掉含有某种推荐关系的条目,则应考虑如何正确表达这些约束条件: 如果直接采用子查询方式并利用 `NOT IN` 子句过滤掉由编号为 `2` 的用户所推荐的人群,那么必须意识到潜在陷阱——即任何包含 `NULL` 的列表都会使得整个匹配过程失效[^5]。 因此更稳健的做法可能是改写成如下形式: ```sql SELECT name FROM customer WHERE referee_id != 2 OR referee_id IS NULL; ``` 此版本不仅涵盖了显式的非二号推荐情形,同时也接纳了那些尚未明确归属情况的对象。 --- ### 示例代码片段展示不同场景下对于 null 的处理方法对比 以下是两个分别针对 C 编程环境同 MySQL 数据交互过程中涉及到 null 概念的实际例子说明: #### C程序示例:安全地判断指针是否为空 ```c #include <stdio.h> #include <stdlib.h> int main() { int *ptr = NULL; if (ptr == NULL) { // 明确检查指针是否指向有效地址之前先验证其合法性 printf("Pointer is not initialized.\n"); } ptr = malloc(sizeof(int)); // 动态分配内存空间 if(ptr != NULL){ free(ptr); ptr=NULL;//释放资源后再置回初始状态以防悬垂引用隐患 } } ``` #### SQL脚本实例:合理运用is null判定机制规避常见误区 ```sql CREATE TABLE users ( user_id INT PRIMARY KEY, username VARCHAR(50), email VARCHAR(100), phone VARCHAR(15) DEFAULT NULL -- 默认支持null输入 ); INSERT INTO users (user_id, username, email, phone) VALUES (1, 'John Doe', 'john.doe@example.com', NULL); -- 正确检索所有电话号码未填写用户的语句 SELECT * FROM users u WHERE u.phone IS NULL ; ``` --- ### 结论总结 无论是高级语言还是低级汇编层面亦或是结构化查询领域里,“Null”的存在都扮演着不可或缺的角色;理解清楚各自范畴内的含义差异有助于编写更加健壮可靠的软件解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值