测试文件:https://adworld.xctf.org.cn/media/task/attachments/dc14f9a05f2846249336a84aecaf18a2.zip

1.准备

获取信息

  • 64位文件

2.IDA打开

前面大部分都是“无用代码”,这里贴上我们需要的代码

  1. while ( )
  2. {
  3. memset(flag, , 0xC8uLL);
  4. numRead = read(pParentWrite[], flag, 0xC8uLL);
  5. if ( numRead == - )
  6. break;
  7. if ( numRead )
  8. {
  9. if ( childCheckDebugResult() )
  10. {
  11. responseFalse();
  12. }
  13. else if ( flag[] == '{' ) // flag[0]为'{'
  14. {
  15. if ( strlen(flag) == ) // len(flag)=42
  16. {
  17. if ( !strncmp(&flag[], "53fc275d81", 10uLL) )// flag[1]~flag[10]为"53fc275d81"
  18. {
  19. if ( flag[strlen(flag) - ] == '}' )// flag[41]='}'
  20. {
  21. if ( !strncmp(&flag[], "4938ae4efd", 10uLL) )// flag[31]~flag[40]为'4938ae4efd'
  22. {
  23. if ( !confuseKey(flag, ) ) // 改变原本flag中字符串的顺序
  24. {
  25. responseFalse();
  26. }
  27. else if ( !strncmp(flag, "{daf29f59034938ae4efd53fc275d81053ed5be8c}", 42uLL) )// '{}'中间有40个字符,10个为一组,则现在顺序为3,4,1,2
  28. {
  29. responseTrue();
  30. }
  31. else
  32. {
  33. responseFalse();
  34. }
  35. }
  36. else
  37. {
  38. responseFalse();
  39. }
  40. }
  41. else
  42. {
  43. responseFalse();
  44. }
  45. }
  46. else
  47. {
  48. responseFalse();
  49. }
  50. }
  51. else
  52. {
  53. responseFalse();
  54. }
  55. }
  56. else
  57. {
  58. responseFalse();
  59. }
  60. }
  61. }
  62. exit();
  63. }
  64. exit();
  65. }
  1. bool __cdecl confuseKey(char *szKey, int iKeyLength)
  2. {
  3. char szPart1[]; // [rsp+10h] [rbp-50h]
  4. char szPart2[]; // [rsp+20h] [rbp-40h]
  5. char szPart3[]; // [rsp+30h] [rbp-30h]
  6. char szPart4[]; // [rsp+40h] [rbp-20h]
  7. unsigned __int64 v7; // [rsp+58h] [rbp-8h]
  8.  
  9. v7 = __readfsqword(0x28u);
  10. *(_QWORD *)szPart1 = 0LL;
  11. *(_DWORD *)&szPart1[] = ;
  12. *(_WORD *)&szPart1[] = ;
  13. szPart1[] = ;
  14. *(_QWORD *)szPart2 = 0LL;
  15. *(_DWORD *)&szPart2[] = ;
  16. *(_WORD *)&szPart2[] = ;
  17. szPart2[] = ;
  18. *(_QWORD *)szPart3 = 0LL;
  19. *(_DWORD *)&szPart3[] = ;
  20. *(_WORD *)&szPart3[] = ;
  21. szPart3[] = ;
  22. *(_QWORD *)szPart4 = 0LL;
  23. *(_DWORD *)&szPart4[] = ;
  24. *(_WORD *)&szPart4[] = ;
  25. szPart4[] = ;
  26. if ( iKeyLength != )
  27. return ;
  28. if ( !szKey )
  29. return ;
  30. if ( strlen(szKey) != )
  31. return ;
  32. if ( *szKey != )
  33. return ;
  34. strncpy(szPart1, szKey + , 0xAuLL);
  35. strncpy(szPart2, szKey + , 0xAuLL);
  36. strncpy(szPart3, szKey + , 0xAuLL);
  37. strncpy(szPart4, szKey + , 0xAuLL);
  38. memset(szKey, , iKeyLength);
  39. *szKey = ;
  40. strcat(szKey, szPart3);
  41. strcat(szKey, szPart4);
  42. strcat(szKey, szPart1);
  43. strcat(szKey, szPart2);
  44. szKey[] = ;
  45. return ;
  46. }

3.代码分析

第一段代码我们能够获取到flag[0],flag[1]~flag[10],flag[31]~flag[40],flag[41],以及调换顺序之后的flag

第二段代码实际上是在对原来的flag字符串的位置进行调换,"{}"中间有40个字符,10个为一组,现在的顺序就是3,4,2,1。

因此,我们通过调换顺序之后的flag,能够获取到原来的flag。这道题最坑的就是真正的flag没有"{}"

4.get flag!

53fc275d81053ed5be8cdaf29f59034938ae4efd

攻防世界--re1-100的更多相关文章

  1. 攻防世界RE1 writeup

    解题过程 将题目给出的exe文件拖入ida中,查看main函数. 分析函数的逻辑,发现用户需要输出一个字符串,存储到变量v9中.如果v9的值与v5的值相等则会打印unk_413e90中的值,否则打印a ...

  2. 攻防世界--re1

    练习文件下载:https://www.lanzous.com/i5lufub 1.使用IDA打开,进入main函数. 2.转为C代码 可以看到,输入v9之后,与v5比较,判断我们输入的flag是否正确 ...

  3. 【攻防世界】 高手进阶区 Recho WP

    0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...

  4. 记录下做攻防世界的misc题

    0x00 记录一下,代表自己做过 0x01 flag_universe 看简介是来自2018年的百越杯. 将文件下载下来后,就一个flag_universe.pcapng文件,wireshark打开. ...

  5. pwn篇:攻防世界进阶welpwn,LibcSearcher使用

    攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...

  6. 攻防世界Web刷题记录(进阶区)

    攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...

  7. 攻防世界 WriteUp

    附:|>>>攻防世界-WEB-新手练习区<<<| WriteUp目录 01.|>>>baby_web<<<| 02.|>& ...

  8. 攻防世界(六)supersqli

    攻防世界系列:supersqli 方法一: 用逗号包裹回显正常,说明存在注入 1';--+(注释符也可用 -- 或 # 发现均未被过滤!) 有order by 语句可知表由2个字段,使用联合查询 (想 ...

  9. 攻防世界-MISC:pdf

    这是攻防世界新手练习区的第二题,题目如下: 点击附件1下载,打开后发现是一个pdf文件,里面只有一张图片 用WPS打开,没发现有什么不对的地方,参考一下WP,说是要转为word格式.随便找一个在线转换 ...

  10. 攻防世界web进阶题—unfinish

    攻防世界web进阶题-unfinish 1.看一下题目提示SQL 2.打开题目看一下源码,没有问题 3.查一下网站的组成:php+Apache/2.4.7+Ubuntu 4.扫一下目录,扫到一个注册页 ...

随机推荐

  1. springboot创建拦截器

    一.创建一个MyIntercepor实现HandlerInterceptor接口的类             二.创建一个WebMvcConfig实现WebMvcConfigurer的类       ...

  2. 2017年cocoaPods 1.2.1升级

    还在用老版本的ccoaPods,安装三方库时,会报错 : [!] Invalid `Podfile` file: [!] The specification of `link_with` in the ...

  3. 01 Netty是什么?

    01 Netty是什么? IO编程 我们简化下场景:客户端每隔两秒发送一个带有时间戳的 "hello world" 给服务端,服务端收到之后打印. 为了方便演示,下面例子中,服务端 ...

  4. PHP导出excel文件名中文IE乱码解决

    <?php $ua = strtolower($_SERVER['HTTP_USER_AGENT']); if(preg_match('/msie/', $ua) || preg_match(' ...

  5. E. Natasha, Sasha and the Prefix Sums

    http://codeforces.com/contest/1204/problem/E 给定n个 1 m个 -1的全排 求所有排列的$f(a) = max(0,max_{1≤i≤l} \sum_{j ...

  6. CG-CTF | 综合题2

    查源码发现一个文件读取:http://cms.nuptzj.cn/about.php?file=sm.txt,用它把能找到的php都读取下来 <?php if (!isset($_COOKIE[ ...

  7. 国内npm镜像使用方法

    npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...

  8. Linux shell -查找字符(find,xargs,grep)

    在当前目录下查找含有jmxremote字符的文件 test@>find . -type f|xargs grep "jmxremote" . 当前目录 -type 查找文件类 ...

  9. 阿里云配置通用服务的坑 ssh: connect to host 47.103.101.102 port 22: Connection refused

    1.~ wjw$ ssh root@47.103.101.102 ssh: connect to host 47.103.101.102 port 22: Connection refused ssh ...

  10. 测开之路一百一十:bootstrap图片

    bootstrap图片 引入bootstrap 原版的图片 bootstrap处理后的: 圆角.圆形.缩略图 自适应窗口