[新] 论文精读:Coverage-based greybox fuzzing as markov chain

作者: 浏览次数: 时间: 2019-05-06 评论: 2条评论

1.png
2.png


zzcms v8.1审计

作者: 浏览次数: 1881 时间: 2017-12-07 评论: 2条评论

一、重装漏洞

和其他CMS没有什么两样,都是通过lock文件来判定是否安装过CMS,只不过这里出现问题的是,对于lock文件的判定不是全局,而是仅仅在step1进行了判定,攻击者可以直接POST请求step2、step3来进行重装。分析如下:
Install/Index.php文件:

$submit = isset($_POST['submit']) ? true : false;
$step = isset($_POST['step']) ? $_POST['step'] : 1;
……
switch($step) {
    case '1'://协议
        include 'step_'.$step.'.php';
    break;
    case '2'://环境
        $pass = true;
        $PHP_VERSION = PHP_VERSION;
        if(version_compare($PHP_VERSION, '4.3.0', '<')) {
            $php_pass = $pass = false;
        } else {
            $php_pass = true;
        }
        $PHP_MYSQL = '';
        if(extension_loaded('mysql')) {
            $PHP_MYSQL = '支持';
            $mysql_pass = true;
        } else {
            $PHP_MYSQL = '不支持';
            $mysql_pass = $pass = false;
        }
        $PHP_GD = '';
        if(function_exists('imagejpeg')) $PHP_GD .= 'jpg';
        if(function_exists('imagegif')) $PHP_GD .= ' gif';
        if(function_exists('imagepng')) $PHP_GD .= ' png';
        if($PHP_GD) {
            $gd_pass = true;
        } else {
            $gd_pass = false;
        }
        $PHP_URL = @get_cfg_var("allow_url_fopen");//是否支持远程URL,采集有用
        $url_pass = $PHP_URL ? true : false;
        include 'step_'.$step.'.php';
    break;
    case '3'://查目录属性
        include 'step_'.$step.'.php';
    break;
    case '4'://建数据库
        include 'step_'.$step.'.php';
    break;
    case '5'://安装进度
        function dexit($msg) {
            echo '<script>alert("'.$msg.'");window.history.back();</script>';
            exit;
        }
        
        if(!mysql_connect($db_host, $db_user, $db_pass)) dexit('无法连接到数据库服务器,请检查配置');
        $db_name or dexit('请填写数据库名');
        if(!mysql_select_db($db_name)) {
            if(!mysql_query("CREATE DATABASE $db_name")) dexit('指定的数据库不存在\n\n系统尝试创建失败,请通过其他方式建立数据库');
        }
        
        //保存配置文件
        $fp="../inc/config.php";
        $f = fopen($fp,'r');
        $str = fread($f,filesize($fp));
        fclose($f);
        $str=str_replace("define('sqlhost','".sqlhost."')","define('sqlhost','$db_host')",$str) ;
        $str=str_replace("define('sqldb','".sqldb."')","define('sqldb','$db_name')",$str) ;
        $str=str_replace("define('sqluser','".sqluser."')","define('sqluser','$db_user')",$str) ;
        $str=str_replace("define('sqlpwd','".sqlpwd."')","define('sqlpwd','$db_pass')",$str) ;
        $str=str_replace("define('siteurl','".siteurl."')","define('siteurl','$url')",$str) ;
        $str=str_replace("define('logourl','".logourl."')","define('logourl','$url/image/logo.png')",$str) ;
        $f=fopen($fp,"w+");//fopen()的其它开关请参看相关函数
        fputs($f,$str);//把替换后的内容写入文件
        fclose($f);
        //创建数据
        include 'step_'.$step.'.php';
        break;
    case '6'://安装成功
        include 'step_'.$step.'.php';
    break;
}

第十届信息安全国赛 Web WriteUp(部分)

作者: 浏览次数: 1913 时间: 2017-12-03 评论: 暂无评论

PHP execise

很明显是PHP代码执行漏洞,当初做的时候绕了弯路。
当时的思路是:touch 1.php 然后file_put_contents('1.php','<?php @eval($_POST['caidao']);?>',FILE_APPEND)
想写入一句话,但是不知道什么原因,菜刀链接失败。
后来继续按照这个思路来搞,结果就有些尴尬了,网站直接被很多人玩坏了,最后直接根目录的文件都删除了。
恢复的时候在看,发现touch和所有写文件的函数(file_put_contents()、file_put_contents()、fputs())都不能用了。
然后这个思路就断了,直接跳了下一题。
后来回来做的时候想到的思路是这样:列举目录——>读文件
这个不需要拿shell也没有那么复杂。所以直接使用glob()函数查找所有php文件:

print_r(glob("*.php"));

1.png








GCTF Web 部分writeup

作者: 浏览次数: 1453 时间: 2017-12-03 评论: 暂无评论

前言

准备参加某个CTF竞赛,所以找了XCTF平台上的一些题目练练。也就随手做了个记录。只做了Web题目。(⊙﹏⊙‖∣ 逆向也不会啊)

第一题 热身题

这题还是比较简单的。考渗透测试的思路。第一步扫端口,第二部肯定扫目录。于是拿出AWVS。

1.png

对于Discuz!3.2的基础认证钓鱼漏洞分析与修复

作者: 浏览次数: 1339 时间: 2017-12-03 评论: 暂无评论

前言

最近在某个技术论坛出现了一个基础认证钓鱼的漏洞,然后分析了Discuz!3.2版本的相关源码,对于该漏洞进行了修复,此文当做个人的学习记录,如果有错误的地方,欢迎讨论交流。

分析过程

在分析漏洞之前先了解一下相关的知识科普。

401钓鱼,也叫基础认证钓鱼。在Web站点中,绝大部分的web服务器被配置为匿名访问,即用户在请求web站点访问服务器上的相关信息时,一般不会被要求提示输入相关认证标示信息,也就是说用户不需要使用用户名或者密码就可以访问网站,这也是所有开放站点所使用的配置。

在Nginx和Apache中,默认配置都是匿名访问。
如Nginx想要配置非匿名访问需要进行如下设置:
/etc/nginx/sites-enabled/default中:

server {
    server_name blog.cnpanda.net
    root /www/panda

   # ...

   location / {
        # 下面的两句是要求非匿名访问
        auth_basic "Restricted";
        auth_basic_user_file htpasswd;
        # ...
    }

   # ...
}

然后创建一个htpasswd文件就可以了,具体的在这里就不提了。

在Apache中就比较简单了,Apache的httpd.conf默认配置如下:

<directory "/etc/www">
 Options IndexesFollowSymLinks Includes
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

如果需要修改为非匿名访问,那么就需要传递一个WWW-Authenticate的字段,如下代码就是使用Header()函数要求客户端使用BASIC验证:



CVE-2017-9603分析

作者: 浏览次数: 1062 时间: 2017-12-03 评论: 暂无评论

CVE-2017-9603分析

一、CVE-2017-9603

WordPress Plugin WP Jobs < 1.5 - SQL Injection

二、漏洞分析

问题出现在wp-jobswpjobs_applications,php,第10行到第62行:

<?php
$job_id = $_REQUEST['jobid']; //获取jobid
$jb_args = array(
    'posts_per_page' => -1,
    'orderby' => 'post_date',
    'order' => 'DESC',
    'post_type' => 'job',
    'post_status' => 'publish',
    'suppress_filters' => true);

$jobs = get_posts($jb_args);
?>
<form autocomplete="off" name="form" id="form">
    <?php _e('Filter by Job', 'wp-jobs'); ?> <select name="jumpMenu" id="jumpMenu" onchange="MM_jumpMenu('parent', this, 0)">
        <option value="edit.php?post_type=job&page=WPJobsJobApps">All Applications</option>
        <?php foreach ($jobs as $job_info) : setup_postdata($jobs); ?>
            <option <?php
            if ($job_info->ID == $job_id) {
                echo 'selected="selected"';
            }
            ?> value="edit.php?post_type=job&page=WPJobsJobApps&jobid=<?php echo $job_info->ID; ?>"><?php echo $job_info->post_title; ?></option>
         <?php
            endforeach;
            wp_reset_postdata();
            ?>
    </select>
</form>
<style>
    .dctrprt tr th, .dctrprt tr td {
        font-family:Arial, Helvetica, sans-serif;
        font-size:13px;
    }
</style>
<table class="widefat dctrprt">
    <tr>
        <th><strong><?php _e('S.No', 'wp-jobs'); ?></strong></th>
        <th><strong><?php _e('Job Title', 'wp-jobs'); ?></strong></th>
        <th><strong><?php _e('Full Name', 'wp-jobs'); ?></strong></th>
        <th><strong><?php _e('Email', 'wp-jobs'); ?></strong></th>
        <th><strong><?php _e('Phone Number', 'wp-jobs'); ?></strong></th>
        <th><strong><?php _e('Download Resume', 'wp-jobs'); ?></strong></th>
    </tr>
    <?php
    $tbl = $wpdb->prefix;
    $qry = "Select * from " . $tbl . "app_user_info ";
    if ($job_id <> "") {
        $qry .= " where app_job_id = " . $job_id; //直接带入SQL语句查询
    }
    $qry .= " Order by `app_id` Desc ";
    $users = $wpdb->get_results($qry);
    $i = 1;
    foreach ($users as $user) {
?>

Top ↑