buuctf-simplerev

新手上路,有不对的地方还请赐教

下载文件,为64位

直接用IDA打开试试

找到主函数,F5查看

大意是输入d或D,调用函数Decry
输入q或Q结束程序

查看函数Decry

flag大概就在这里了

这里的src和v9需要注意,这两个输入的是16进制是高位在前,而内存中是小端序(高位在后)

内存中表示为

                低                       高

src            4E 44   43 4C   53
v9             68 61   64 6F    77

因为后面的程序中将其当作字符运算(逐个字节,不分高低),所以需要转换

这时如果直接按R使其变为字符串,结果则是直接将十六进制从左到右一个一个转为字符(问题所在)

这时内存中的顺序为

src    53 4C  43 44  4E
v9     77 6F  64 61  68

这与我们的预期正好相反

字符串的使用则是从左往右

所以src和v9正确的字符表示形式应该为

src    NDCLS
v9     hadow

key1和key3的值,双击查看

text和key分别是将key3和v9,key1和src连接起来

值为killshadow,ADSFKNDCLS

  getchar();
  v5 = strlen(key);
  for ( i = 0; i < v5; ++i )               //将key中的字符大写转小写
  {
    if ( key[v3 % v5] > 64 && key[v3 % v5] <= 90 )
      key[i] = key[v3 % v5] + 32;
    ++v3;
  }


  printf("Please input your flag:");
  while ( 1 )
  {
    v1 = getchar();                 //接收一个字符
    if ( v1 == 10 )                 //10对应'\n'
      break;                   
    if ( v1 == 32 )                 //32对应空格
    {
      ++v2;
    }
    else
    {
      if ( v1 <= 96 || v1 > 122 )    //输入字符不为小写字母
      {
        if ( v1 > 64 && v1 <= 90 )  //输入字符为大写字母
        {
          str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;     //一顿操作,增加阅读难度
          ++v3;                                                 //v3虽然没有重新赋值,但使用
        }                                                   //时有取余v5(key的长度)
      }
      else
      {
        str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;
        ++v3;
      }
      if ( !(v3 % v5) )
        putchar(32);
      ++v2;
    }
  }
  if ( !strcmp(text, str2) )           //判断两字符串是否相等,这里可以看出
    puts("Congratulation!\n");         //flag就是使str2等于text的字符串
  else
    puts("Try again!\n");
  return __readfsqword(0x28u) ^ v11;
}

根据程序,通过暴力破解法直接一个一个试

list1 = "killshadow"        #test
list2 = "adsfkndcls"        #key
flag = ""
for k in range(10):
    for i in range(65, 123):
        if((i <= ord('Z')) or (i >= ord('a'))):          #保证结果为字符
            if(list1[k] == chr((i - 39 - ord(list2[k]) + 97) % 26 + 97)):
                flag += chr(i)
                break

print("flag{"+flag+"}")

结果为flag{KLDQCUDFZO}

<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]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值