您当前的位置: 首页 > 

姜小孩.

暂无认证

  • 4浏览

    0关注

    51博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

BUU刷题Day7

姜小孩. 发布时间:2022-03-30 15:22:25 ,浏览量:4

目录

[BJDCTF2020]Mark loves cat

PHP foreach 循环

语法

举个栗子

总结:

[安洵杯 2019]easy_web

总结:

[NCTF2019]Fake XML cookbook

总结:

[BJDCTF2020]Mark loves cat

buu不能用御剑这类的工具扫,但是可以用burp设置线程小一点,虽然慢,但是比没有好,这个题是.git泄露,用githack获取源码

PHP foreach 循环

foreach循环仅适用于数组,用于循环遍历数组中的每个键/值对。

语法
foreach ($array as $value) { code to be executed; }
举个栗子

对于每次循环迭代,将当前数组元素的值分配给 $value 并将数组指针移动 1,直到它到达最后一个数组元素。

这里有变量覆盖漏洞,前两个foreach语句分别将POST参数和GET参数进行变量覆盖,接着是三个if语句,exit()函数退出脚本的同时输出变量,最后一句是输出我们想要的flag。

先看第一个GET传flag

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){  //GET方式传flag只能传一个flag=flag
        exit($handsome);
    }
}

如果 get型flag参数绝对等于变量名并且变量名等不等于flag则执行 exit($handsome),如果我们传参?flag=abc&abc=123,输出$handsome,但是这个写法会在前面进行变量覆盖的时候让$flag=$abc(会报错,因为$abc不存在),所以这里不行

if(!isset($_GET['flag']) && !isset($_POST['flag'])){    //GET和POST其中之一必须传flag
    exit($yds);
}

如果GET和POST都没有传flag参数,则执行exit($yds);这里可以传?yds=flag,经过变量覆盖之后就$yds = $flag,从而输出$flag的值。

第三个位置

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){ //GET和POST传flag,必须不能是flag=flag
    exit($is);
}

判断条件为$_POST['flag'] === 'flag' || $_GET['flag'] === 'flag',这里可以通过满足后面这个条件进行变量覆盖:GET传参is=flag&flag=flag;在第二个foreach语句中,首先是$x=is,$y=flag,带进去就变成了$is=$flag,这就达到了覆盖的目的,而参数中flag=flag只是为了满足if语句;

总结:

有些命令给出来可能是迷惑人的,要好好的审!

学到了foreach!

[安洵杯 2019]easy_web

打开题目发现url上有?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=

base64解码一下MzUzNTM1MmU3MDZlNjc=

再解码3535352e706e67

Ctrl+U查看源代码发现有一大串base64加密,那我们就换行看看后面隐藏了什么好东西

MD5 is funny(我也这么认为

应该和MD5有关,但是思路断了,那就抓包看看消息头,没有东西。。

回头再看哪个base64两次解码出来的东西,那就hex解码一下

555.png

因为源代码里面有MD5加密所以我把index.php也hex编码,然后两次base64试试,看能不能读到源码;就这么读到了!




  body{
   background:url(./bj.png)  no-repeat center center;
   background-size:cover;
   background-attachment:fixed;
   background-color:#CCCCCC;
}



注意!!

    if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
        echo `$cmd`;
    } else {
        echo ("md5 is funny ~");
    }

MD5强碰撞?冲!掏出以前的笔记

a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2
b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2

POST传一下

然后会返回cmd里面的结果!ls一下吧,啊哦!ls被禁了,但是\没有被禁!所以payload:

l\s

没有flag,那就

ca\t%20/flag

拿下!

总结:

可以用l\s来bypass

[NCTF2019]Fake XML cookbook

看这个名字应该是个XXE注入!抓包!

很明显,username和password都是xml格式,且返回的包中msg标签内的内容就是我们username的内容,所以我们的注入点就在username!





&admin;


123456

读到了!

根据经验,flag在根目录!!

总结:

学习了XXE之后还没做过题,这是第一个题,就当是复习了吧!!

感谢BUU提供优质题,感谢勤奋的自己!!

关注
打赏
1652274937
查看更多评论
立即登录/注册

微信扫码登录

0.0459s