0


Bugku---web---never_give_up

题目出处:首页 - Bugku CTF

✨打开链接如下所示!!!

✨打开bp抓包!!!发现URL是/hello.php?id=1!!!

✨因为没有其他任何的信息,只能从此下手,想办法打开hello.php文件来看看啦!!!

✨我服了,还是什么都没有,但是这里可以拓展一个下载查看文件内容的方法,记住这段代码!!!

import requests
a=30
for i in range(a):
    url="http://114.67.175.224:14114/hello.php?id="+str(i)+"1HTTP/1.1"
    s=requests.get(url)
    print(s.text)

✨只能将数据包发送给系统看会给我什么响应了,发现其他都没用,只有1p.html了,那就试试!!!

✨输入http://114.67.175.224:14114/1p.html 后会有如下页面!!!最起码有东西啦

✨发现它回到ctf首页的网站了,很明显,我们要的答案不在这里!!!

view-source:

后跟页面的URL,可以直接跳转到页面的源代码视图。

✨这时候就用到这个

view-source:了!!!

✨查看里面的内容!!!

%3Cscript%3Ewindow.location.href%3D'http%3A%2F%2Fwww.bugku.com'%3B%3C%2Fscript%3E%20%0A%3C!--JTIyJTNCaWYoISUyNF9HRVQlNUInaWQnJTVEKSUwQSU3QiUwQSUwOWhlYWRlcignTG9jYXRpb24lM0ElMjBoZWxsby5waHAlM0ZpZCUzRDEnKSUzQiUwQSUwOWV4aXQoKSUzQiUwQSU3RCUwQSUyNGlkJTNEJTI0X0dFVCU1QidpZCclNUQlM0IlMEElMjRhJTNEJTI0X0dFVCU1QidhJyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJ2InJTVEJTNCJTBBaWYoc3RyaXBvcyglMjRhJTJDJy4nKSklMEElN0IlMEElMDllY2hvJTIwJ25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJyUzQiUwQSUwOXJldHVybiUyMCUzQiUwQSU3RCUwQSUyNGRhdGElMjAlM0QlMjAlNDBmaWxlX2dldF9jb250ZW50cyglMjRhJTJDJ3InKSUzQiUwQWlmKCUyNGRhdGElM0QlM0QlMjJidWdrdSUyMGlzJTIwYSUyMG5pY2UlMjBwbGF0ZWZvcm0hJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuKCUyNGIpJTNFNSUyMGFuZCUyMGVyZWdpKCUyMjExMSUyMi5zdWJzdHIoJTI0YiUyQzAlMkMxKSUyQyUyMjExMTQlMjIpJTIwYW5kJTIwc3Vic3RyKCUyNGIlMkMwJTJDMSkhJTNENCklMEElN0IlMEElMDklMjRmbGFnJTIwJTNEJTIwJTIyZmxhZyU3QioqKioqKioqKioqJTdEJTIyJTBBJTdEJTBBZWxzZSUwQSU3QiUwQSUwOXByaW50JTIwJTIybmV2ZXIlMjBuZXZlciUyMG5ldmVyJTIwZ2l2ZSUyMHVwJTIwISEhJTIyJTNCJTBBJTdEJTBBJTBBJTBBJTNGJTNF--%3E

这是一个包含JavaScript代码的HTML格式文本,用于将当前页面重定向到"http://www.bugku.com"。

✨里面有url编码,也有base64编码,分别进行解码得!!!

提示:中间长得那部分是由base64解码,解码后得结果是url编码,然后再进行解码。

✨把获得的结果合在一起如下所示!!!

"<script>window.location.href='http://www.bugku.com';</script> 
<?php
if(!$_GET['id'])//如果接受的get参数不是id
{
    header('Location: hello.php?id=1');
//发送一个 HTTP 响应头,告诉用户的浏览器立即导航到 hello.php 文件,并且在查询字符串中传递 id 参数的值为1。这种重定向通常用于在用户完成某个操作后,跳转到另一个页面或者刷新当前页面的状态。
    exit();
}
$id=$_GET['id'];//接受三个get参数,id,a ,b
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))//如果变量a里面有“.”(stripos函数用于查找字符串在另一字符串中第一次出现的位置,不区分大小写)
{
    echo 'no no no no no no no';//则输出
    return;
}
$data = @file_get_contents($a,'r');//读取文件a里面的数据内容
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)
//如果数据内容是bugku is a nice plateform!并且id=0,字符串长度大于5,b的第一个字符在1114中的位置是1,第一个字符不是4
{
    $flag = "flag{***********}"//输出flag
}
else
{
    print "never never never give up !!!";//否则输出永远不要放弃
}
?>

✨ 所以我们满足这些条件即可获得flag!!!接下来我们按照代码顺序一步步进行尝试!!!

if(!$_GET['id'])//如果接受的get参数不是id
{
    header('Location: hello.php?id=1');
//发送一个 HTTP 响应头,告诉用户的浏览器立即导航到 hello.php 文件,并且在查询字符串中传递 id 参数的值为1。这种重定向通常用于在用户完成某个操作后,跳转到另一个页面或者刷新当前页面的状态。
    exit();
}

✨验证一下变量a中带点的情况!!!

if(stripos($a,'.'))//如果变量a里面有“.”(stripos函数用于查找字符串在另一字符串中第一次出现的位置,不区分大小写)
{
    echo 'no no no no no no no';//则输出
    return;
}

✨接下就避免所取值得不到flag得情况!!!

$data = @file_get_contents($a,'r');//读取文件a里面的数据内容
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)
//如果数据内容是bugku is a nice plateform!并且id=0,字符串长度大于5,b的第一个字符在1114中的位置是1,第一个字符不是4
{
    $flag = "flag{***********}"//输出flag
}

数据里面要包括bugku is a nice plateform! 这个隐藏点一定要注意。

🎀对id的要求,id得取值为0。

🎀对a的要求,不能有点。

🎀对b的要求:

①要求b字符串长度要大于5。

②要求"111"与后面b所取的一个位置的值拼接刚好是1114。 (111后面有个点,是表示拼接的意思)(eregi函数已经被弃用了,正则表达式的函数现在统一为

preg_match()函数。)

**

③最后一个条件是要求b字符串的第一个位置的值不能是4。

**

**

所以综上给字符串长度大于5,第一个字符不能是4,但是又要拼接后的结果是1114,这样就矛盾了。

**

**

所以使用通配符*解决这个矛盾,我们进行一试!!!(*可以代表任何字符)

**

✨还是没有获取到flag,肯定是取值出现了问题!!!

id的值是0,相比可以用弱类型比较取值,没什么问题,b也是一句一句分析所得没问题,只有a,简简单单提一句,肯定里面有奥秘。

$data = @file_get_contents($a,'r');//读取文件a里面的数据内容

发现忘记了这句代码,这个函数的使用查看一下

file_get_contents() 把整个文件读入一个字符串中。

@file_get_contents($a,'r')

函数会尝试打开文件

$a

,并以只读模式('r')读取其内容。如果成功读取到文件内容,则将其作为字符串返回并赋值给变量

$data


在PHP中,

@file_get_contents()

函数用于读取文件的内容。这个函数可以处理多种类型的文件,包括本地文件、远程URL以及使用协议句柄(也称为伪协议)的资源。

伪协议是PHP中一种特殊的协议,它允许你访问不同的资源,而不需要指定完整的URL或文件路径。

✨ 里面牵扯到一个概念:伪协议

PHP伪协议事实上就是支持的协议与封装协议,简单来说就是php定义的一种特殊访问资源的方法,在web渗透漏洞利用中常用于配合文件配合进行web攻击,查询到网站中隐藏的机密文件,造成敏感信息泄露等影响。

伪协议详细的介绍请看https://www.cnblogs.com/ntrack/articles/17656608.html

✨ php://input,此题我们用到这个概念!!!这也是伪协议中最常用到的,要做到下意识想到它。

php://input

访问各种输入 流,可以直接读取到POST上没有经过解析的原始数据,将post请求的数据当作php代码执行,当设置enctype="multipart/form-data"则无法使用。

✨ 还是没有flag,发现变量id的值我们赋值的是0,但是在传参的时候,传入0就默认没有传值,所以我们用到弱类型比较,给id传参。

✨得到flag啦!!!


本文转载自: https://blog.csdn.net/weixin_47450099/article/details/138921361
版权归原作者 粉车绿衣搞笑网工女 所有, 如有侵权,请联系我们删除。

“Bugku---web---never_give_up”的评论:

还没有评论