题目出处:首页 - 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啦!!!
版权归原作者 粉车绿衣搞笑网工女 所有, 如有侵权,请联系我们删除。