CTF-14解题思路

Track-子羽   ·   发表于 2021-11-17 14:31:38   ·   CTF&WP专版

源码分析:

  1. <?php
  2. highlight_file('index.php');
  3. include('flag.php');
  4. if (isset ($_GET['password']))
  5. {
  6. # password必须只包含保护数字和字母
  7. if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
  8. {
  9. echo '<p>You password must be alphanumeric</p>';
  10. }
  11. else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
  12. {
  13. # 密码中必须包含*-*
  14. if (strpos ($_GET['password'], '*-*') !== FALSE) //strpos — 查找字符串首次出现的位置
  15. {
  16. die('Flag: ' . $flag);
  17. }
  18. else
  19. {
  20. echo('<p>*-* have not been found</p>');
  21. }
  22. }
  23. else
  24. {
  25. echo '<p>Invalid password</p>';
  26. }
  27. }
  28. ?>

需要满足以下条件才能获取到flag
1、password必须只包含保护数字和字母,ereg正则且密码中要包含

  1. *-*

2、密码长度小于8

3、密码的值要大于9999999

分析

1、利用ereg%00绕过的特性 aaaa%00- 绕过1

2、利用科学计数法绕过2和3,最终答案1e9%00- ,刚好%00传到后台被解析为1个字符,总共7个字符。1e9=1000000000,满足>9999999

其他:9999999设置的不够极限,还可以往后设置两位

payload:

  1. ?password=1e9%00*-*

打赏我,让我更有动力~

0 Reply   |  Until 2021-11-17 | 715 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.