BUUCTF SimpleRev

分析

该文件为64位的ELF文件,运行在linux平台
使用IDA64打开
在这里插入图片描述
进入Decry函数
在这里插入图片描述
输入flag和成功的提示
看看如何才能成功拿到flag
在这里插入图片描述

这里比较text和str2,text是源代码就有的
在这里插入图片描述

那么str2应该就是我们输入的内容
先分析text的内容是什么
进入join函数
该函数将两个输入字符串连接在一起,并返回一个新的字符串,表示连接后的结果。

char *__fastcall join(const char *a1, const char *a2)
{
  size_t v2; // 用于存储第一个输入字符串的长度
  size_t v3; // 用于存储第二个输入字符串的长度
  char *dest; // 用于存储连接后的字符串的指针

  // 计算第一个输入字符串的长度
  v2 = strlen(a1);

  // 计算第二个输入字符串的长度
  v3 = strlen(a2);

  // 分配足够的内存来存储连接后的字符串,加1是为了存储字符串结尾的空字符 '\0'
  dest = (char *)malloc(v2 + v3 + 1);

  // 检查内存分配是否成功
  if (!dest)
    exit(1); // 如果分配失败,则退出程序

  // 将第一个输入字符串复制到目标字符串
  strcpy(dest, a1);

  // 将第二个输入字符串连接到目标字符串末尾
  strcat(dest, a2);

  // 返回连接后的字符串
  return dest;
}

我们不难得到text的值
在这里插入图片描述
点击一下0x776F646168LL然后按r
因为是小端序,所以低位在前,高位在后,所以最后需要反过来

hadow

在这里插入图片描述在这里插入图片描述

killshadow

接下来就看要如何输入才能构造出这个字符串
将所有字符显示出来,点击在数字上然后按r,这样看着更直观
在这里插入图片描述

这里贴上ascii码表链接作为对照: https://tool.oschina.net/commons?type=4

在这里插入图片描述
如果你输入的是大写字母,那么就执行下面的语句

str2[v2] = (v1 - 39 - key[v3 % v5] + 'a') % 26 + 'a';
++v3;

如果是小写就执行

str2[v2] = (v1 - 39 - key[v3 % v5] + 'a') % 26 + 'a';
++v3;

输入其他的字符就不进行处理

你会发现这两条语句是一样的,也就是说只要输入的是英文,就执行这条语句,后面 %26说明最后运算出来的结果都不会大于26,最后加上a,也就是说最后计算出来的范围是小写字母

这里我们还需要知道key是什么
在这里插入图片描述
这里将key1的值给了key,然后在key的末尾追加了src (这里的SLCDN同样要反过来,图上写错了)
最后下面的for循环将key中所有的字母都小写了
所以最后key的值为 adsfkndcls
v3的值为10
v5的值为10

EXP

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    int v3 = 10, v5 = 10, l, a;
    char key[] = "adsfkndcls";
    char str2[20];
    int  base = 65;		// 以大写为基数
    // str2[v2] = (v1 - 39 - key[v3 % v5] + 'a') % 26 + 'a';
    // str2[v2] = (v1  - key[v3 % v5] + 58) % 26 + 'a';
    // str2[v2] = (23  - key[v3 % v5] + 58) % 26 + 'a';
    char text[] = "killshadow";
    for (int i = 0; i < strlen(text); i++)
    {
        l = (base + 58  - key[v3 % v5]) % 26;     // 这里之所以多了个65是因为字母的最小ASCII码就是65
        a = text[i] - 'a';
        // 有两种情况,大于 answer 和小于 answer
        if (l > a)
            printf("%c", base + 26 - l + a);
        else
            printf("%c", base + a - l);
        v3++;
    }
}

最终flag

flag{KLDQCUDFZO}

其实还有个答案,就是以小写为基数,将base改为97

flag{efxkwoxzti}

但是flag就只有一个,那就是那个大写的falg

其他解法

还有一种解法就是直接进行暴力破解
因为我们的输入也就是英文字母

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    int v3 = 10, v5 = 10, l, a;
    char text[] = "killshadow";
    char key[] = "adsfkndcls";
    char str2[20];
    int base = 65;
    for (int n = 0; n < strlen(text); n++)
    {
        for (int i = base; i < 26 + base; i++)
        {
            // str2[v2] = (v1 - 39 - key[v3 % v5] + 'a') % 26 + 'a';
            if ((i - 39 - key[v3 % v5] + 'a') % 26 + 'a' == text[n]){
                printf("%c", i);
                v3++;
                break;
            }
        }
    }
}

<think>好的,我现在需要帮助用户寻找与BUUCTF相关的PYWebsite资料或教程。首先,我得确认用户提到的“PYWebsite”具体指的是什么。在BUUCTF的题目中,可能存在一个名为“PYWebsite”的挑战题目,或者是与Python网站开发相关的题目。 接下来,我应该回忆一下BUUCTF平台上常见的题目类型。BUUCTF是一个CTF练习平台,涵盖Web、Reverse、Pwn、Crypto等类型。用户提到的引用中提到了Web相关的WP,比如[BJDCTF 2nd]简单注入和PHP escapeshellarg()+escapeshellcmd()的问题,这可能说明用户对Web题目感兴趣,特别是涉及Python的网站题目。 然后,我需要考虑用户可能的实际需求。他们可能在寻找某个特定题目的解题方法,或者想学习如何在BUUCTF上使用Python相关的Web技术。由于用户提到了“PYWebsite”,可能需要查找是否有该名称的题目,或者是否涉及Python网站框架(如Flask、Django)的题目。 接下来,我应该检查现有的引用内容。用户提供的引用1和2都是关于Web题目的WP,其中引用1提到了通过POST参数注入执行系统命令,引用2涉及PHP的函数漏洞。但用户的问题是关于PYWebsite的,这可能与Python相关,因此可能需要查找是否有相关的Python Web题目。 由于用户提供的引用中没有直接提到PYWebsite,我需要考虑其他途径。建议用户搜索BUUCTF平台上的题目列表,或者查看社区论坛、GitHub上的WP汇总,寻找包含“PYWebsite”关键词的题目。此外,可能需要指导用户如何利用现有资源查找资料,比如在GitHub上搜索“BUUCTF PYWebsite writeup”,或者在CTF相关的社区和博客中查找。 另外,用户可能需要了解如何使用Python解决Web题目,比如处理HTTP请求、解析参数、绕过过滤等。因此,除了具体题目的资料,提供一般性的Python Web渗透测试方法也是有帮助的。 最后,确保回答结构清晰,分步骤建议用户如何查找资料,并提供可能的资源链接和搜索关键词,同时提醒他们注意题目名称的正确性,避免因拼写错误导致搜索不到结果。</think>### BUUCTF PYWebsite相关资料及使用方法 根据你的需求,BUUCTF中关于“PYWebsite”的题目可能是涉及Python网站框架(如Flask/Django)或Python反序列化漏洞的题目。以下是分步解决方案: 1. **确认题目名称** - 建议在BUUCTF平台搜索栏输入`PYWebsite`或`Python Web`,确认是否存在名为`[PYWebsite]`或类似名称的题目。部分题目可能缩写为`PYWeb`或包含`Python`关键词。 2. **查找现有Writeup** - **GitHub搜索**:使用关键词`BUUCTF PYWebsite writeup site:github.com`,例如: ```python # 示例代码(用于说明搜索逻辑) import requests response = requests.get("https://api.github.com/search/repositories?q=BUUCTF+PYWebsite") ``` 近期热门题目通常会有详细解析[^1]。 - **CTF社区**:访问CTFHub、优快云或知乎,搜索`BUUCTF PYWebsite 题解`,部分文章会分析代码审计或漏洞利用过程。 3. **Python Web渗透常用方法** - **Flask SSTI漏洞**:若题目使用Flask框架,尝试通过模板注入获取信息: ```python {{ config.items() }} # 查看配置信息 ``` - **反序列化攻击**:若涉及`pickle`模块,构造恶意序列化数据: ```python import pickle class Exploit: def __reduce__(self): return (os.system, ('cat /flag',)) payload = pickle.dumps(Exploit()) ``` 4. **参考资料推荐** - **官方文档**:BUUCTF题目描述中可能包含提示,仔细阅读题目附件代码中的注释或配置文件。 - **技术博客**:参考类似题目如`[[BJDCTF 2nd]简单注入]`的绕过方法,或`escapeshellarg+escapeshellcmd`组合漏洞的利用思路[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值