[Geek 10th]李三的代码审计笔记第一页 | 祭夜博客
  • 欢迎光临,这个博客颜色有点多

[Geek 10th]李三的代码审计笔记第一页

做题 msojocs 5年前 (2019-11-14) 2206次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

来代码

[Geek 10th]李三的代码审计笔记第一页

 

简单分析

从以下两段可以看出需要url参数且值必须由http://开头

empty($_GET["url"]) && die();
if (!startsWith($url,"http://"))
    {
        die("Not allow !");
    }

不难发现for循环是取得flag的关键:
每一次循环都会访问我们提供的url并取得访问结果,
然后,将结果与arr[$i]进行比较

而,arr这个数组由前部分代码得到:

$password = "If I knew where I would die, I would never go there.";
$arr = explode(' ', $password);
$arr[0] == 'If';
$arr[1] == 'I';
.
.
.

也就是说,我们所提供的url每次访问的结果要与arr数组结果一样;

先放着,来看下一层

 if($i == sizeof($arr)-1)

这一句,不难看出只有当for循环到最后一次是才成立,也就是说我们的url要经受住所有的验证,才能避免die("password is wrong");

回到上面,即我们第一次访问要输出If,第二次输出I……

那么我们就可以写这么一段PHP代码:

<?php

$password = "If I knew where I would die, I would never go there.";
$arr = explode(' ', $password);

$str = file_get_contents('1.log');

echo $arr[$str];

$logFile = '1.log';
file_put_contents($logFile, $str + 1 );

需在同级目录下新建内容为0的1.log文件

然后将自己的url填入参数
[Geek 10th]李三的代码审计笔记第一页

然后flag就GET了

[Geek 10th]李三的代码审计笔记第一页

总结

本题不难,主要是代码审计,只要看懂代码其实是很好解决的


祭夜の咖啡馆 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:[Geek 10th]李三的代码审计笔记第一页
喜欢 (1)
[1690127128@qq.com]
分享 (0)
发表我的评论
取消评论
OwO表情
贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址