网站漏洞与漏洞靶场(DVWA)

news2024/11/16 17:47:48

数据来源

      本文仅用于信息安全学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。

为什么要攻击网站?常见的网站漏洞有哪些?

        在互联网中,WEB(网站)服务数量庞大,且易存在安全漏洞,是渗透测试前期攻击的不二之选 

        OWASP TOP 10::这是每年的一份关于web应用的十大威胁安全报告,会在经过安全专家的测验之后确定十大类对当前web应用威胁最大和被应用最广的漏洞,同时也会对其进行详细的分析威胁所在。

漏洞靶场之DVWA

DWA靶场搭建

        DWA是 OWASP 官方编写的PHP网站,包含了各种网站常见漏洞,可以学习攻击及修复方式

DWA搭建步骤:

  • PHP环境:Windows Apache Mysql Php
  • DWWA源代码:https://github.com/digininja/dvwa/archive/master.zip

六步快速搭建DVWA

        1)下载并安装Phpstudy(安装过程可以一路下一步,也可以改安装路径)    http://public.xp.cn/upgrades/PhpStudy2018.zip

        2)将解压后的DVWA原代码放置 phpstudy 安装目录的WWW文件夹(这里建议将文件名:DVWA-master改成DVWA

        3)进入 DVWA/config 目录,将文件名为:config.inc.php.dist最后的dist删去

         4)打开刚刚重命名的 config.inc.php文件,修改 db_user(数据库用户) 和 db_password(数据库密码)改为 :root    root

        5)启动Phpstudy,并在浏览器访问:http://127.0.0.1/DVWA/setup.php,点击最下方的 Create Database(创建数据库)

我这里因为我的桌面没有快捷方式,就直接来到安装目标启动软件了,之后可自行创建快捷方式 

        注意:这里的浏览器访问路径是根据,你刚才对DVWA-master文件重命名后的文件名决定的,如果刚才没有重命名默认的文件名是DVWA-master,那这里浏览器访问时就填:http://127.0.0.1/DVWA-master/setup.php

点击创建数据库 

        6)浏览器访问:http://127.0.0.1/DVWA/ ,输入用户名: admin   密码: password 登录dvwa

        第5步做完之后就会自动跳转到数据库的登录页面,然后输入账号密码即可(如果没有自动跳转就手动输入,如果还是不行就检查第4步的账号密码有没有写错) 

危害巨大的漏洞-命令执行

命令执行漏洞详解

        一般岀现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上,一般会给用户提供一个ping操作的web界面,用户从web界面输入目标P,提交后后台会对该P地址进行一次png测试并返回测试结果。而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交恶意命令,让后台进行执行,从而获得后台服务器权限。

常用的cmd命令:

        whoami                                                        # 查看当前用户名

        ipconfig                                                       #  查看网卡信息

        shutdown -s -t                                        #  关机,-s 关机  -t 设置定时器  0表示0秒

        shutdown -a                                               # 取消一切定时

        net user  username  password  /add       #  增加一个用户名为 username密码为 password的新用户

        type  文件名.扩展名                                 #  查看 filename文件内容 

Command Injection 防御详细

1)low (低级防御,几乎不设防)

实现步骤如下:

可以测试一下网站的漏洞:

        127.0.0.1&whoami     # 获取网站主机的名称 (可以自行换成其他连接符和windos命令,多尝试才能学到知识)                                                

可以在cmd命令行验证

        127.0.0.1&shutdown -s  # 将网站主机关机        

                                     

这个网站为啥会有这种漏洞?我们可以查看网站的源代码分析原因 

代码漏洞解析:

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // 确定操作系统并执行ping命令
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}

?>

如何防御这种命令执行的漏洞?防御命令执行的最高效的方法,就是过滤命令连接符

2)medium(中级防御)

渗透测试解决方法:

  • 白盒测试        可以看到源代码,查看源代码过滤机制
  • 黑盒测试        看不到源代码,依次尝试常见命令连接符

        DVWA mediun防御中过滤了&&;但并不会影响其他符号正常使用

实现步骤如下:

        回到网站把安全等级调到中级

        其他步骤和前面的一样就不写了 

代码解读: 

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Set blacklist
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    );

    // 删除阵列中($substitutions)匹配的任何字符(黑名单)
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // 确定操作系统并执行ping命令
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}

?>


把代码改成上面这样最终的命令执行效果是这样 ,比如黑客输入:

        127.0.0.1&&shutdown -s  经过上面代码处理后就变成:127.0.0.1shutdown -s

        最后网站执行:ping  127.0.0.1shutdown -s 肯定是执行不了的没有这样的命令,这样就能防御命令执行攻击,不过这里的防御等级是中级那肯定是不完善还是有漏洞的。

可以自行测试一下如: 

        127.0.0.1&&ipconfig   # 这样执行不成功,但是我改成一个&或其他没有被过滤的连接符就不影响

         127.0.0.1&ipconfig       # 可以执行成功,查看网卡信息

3)High (高级防御)

实现步骤如下:

        回到网站把安全等级调到高级

 其他步骤和前面的一样就不写了

代码解析: 

        这里需要注意的是现在的等级还是高级,说明还是有漏洞的,比如下面的'| '  这里|后面有个空格,很多开发者都有个问题,不小心或个人的代码编写习惯会在代码后面多敲一个空格,这里只能匹配:| 空格  如果没有空格是过滤不掉的,可以自行测试。

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = trim($_REQUEST[ 'ip' ]);

    // Set blacklist
    $substitutions = array(
        '&'  => '',
        ';'  => '',
        '| ' => '',
        '-'  => '',
        '$'  => '',
        '('  => '',
        ')'  => '',
        '`'  => '',
        '||' => '',
    );

    // Remove any of the characters in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}

?>

 可以自行测试一下如: 

        127.0.0.1| ipconfig   # 有空格的情况

         127.0.0.1|ipconfig       # 没有空格的情况

4)impossible(不可能的,最高级防御)

实现步骤如下:

        回到网站把安全等级调到最高级

 其他步骤和前面的一样就不写了

代码解析:

有些用户为了转义特殊字符可能会加上反斜杠\” 

        impossible 的防御正如其名,不可能被攻击,是安全开发人员的典范,其他后端语言也可实现相应算法 

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $target = $_REQUEST[ 'ip' ];
    $target = stripslashes( $target );

    // Split the IP into 4 octects
    $octet = explode( ".", $target );

    // Check IF each octet is an integer
    if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
        // If all 4 octets are int's put the IP back together.
        $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

        // Determine OS and execute the ping command.
        if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
            // Windows
            $cmd = shell_exec( 'ping  ' . $target );
        }
        else {
            // *nix
            $cmd = shell_exec( 'ping  -c 4 ' . $target );
        }

        // Feedback for the end user
        echo "<pre>{$cmd}</pre>";
    }
    else {
        // Ops. Let the user name theres a mistake
        echo '<pre>ERROR: You have entered an invalid IP.</pre>';
    }
}

// Generate Anti-CSRF token
generateSessionToken();

?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java安装详细步骤(win10)

一、下载JDK JDK下载地址&#xff1a;Java Archive | Oracle&#xff0c;下图为win10版本 二、安装过程 2.1 以管理员方式运行exe 2.2 更改JDK安装目录和目标文件夹的位置 2.3 安装完成 三、配置环境变量 3.1 快速打开环境变量设置 WinR打开运行对话框&#xff0c;输入…

【计组】CPU并行方案--《深入浅出计算机组成原理》(四)

课程链接&#xff1a;深入浅出计算机组成原理_组成原理_计算机基础-极客时间 一、Superscalar和VLIW 程序的 CPU 执行时间 指令数 CPI Clock Cycle Time CPI 的倒数&#xff0c;又叫作 IPC&#xff08;Instruction Per Clock&#xff09;&#xff0c;也就是一个时钟周期…

软件测试新手入门必看

随着软件开发行业的日益成熟&#xff0c;软件测试岗位的需求也越来越大。众所周知&#xff0c;IT技术行业一直以来都是高薪岗位的代名词&#xff0c;零基础想要转业的朋友想要进入这个行业&#xff0c;入门软件测试是最佳的途径之一。考虑到大多数软件测试小白对这个行业的一片…

动态规划——树形dp

树形dp 文章目录树形dp概述树形dp 路径问题树的最长路径思路代码树的中心换根DP思路代码数字转换思路代码树形dp 有依赖的背包二叉苹果树思路代码树形dp 状态机没有上司的舞会思路代码战略游戏思路代码皇宫看守思路代码总结概述 树形 DP&#xff0c;即在树上进行的 DP。由于…

springboot常用启动初始化方法

在日常开发时&#xff0c;我们常常需要 在SpringBoot 应用启动时执行某一些逻辑&#xff0c;如下面的场景&#xff1a; 1、获取一些当前环境的配置或变量&#xff1b; 2、连接某些外部系统&#xff0c;读取相关配置和交互&#xff1b; 3、启动初始化多线程&#xff08;线程池…

Linux 网络编程套接字

目录 一.网络知识 1.网络通信 2.端口号 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;端口号和进程ID 3.TCP协议 4.UDP协议 5.网络字节序 二. socket编程接口 1.socket常见API 2.sockaddr结构 &#xff08;1&#xff09;sockaddr结构 &#xff08;2&a…

JavaScript 语句

文章目录JavaScript 语句JavaScript 语句分号 ;JavaScript 代码JavaScript 代码块JavaScript 语句标识符JavaScript 语句 JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。 JavaScript 语句 JavaScript 语句是发给浏览器的命令。 这些命令的作用是告诉浏…

顶象入选信通院“数字政府建设赋能计划”成员单位

为进一步推动数字政府建设提质增效&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;联合数字政府相关企业、科研机构共同成立“数字政府建设赋能计划”&#xff0c;旨在凝聚各方力量&#xff0c;整合优质资源&#xff0c;开展技术攻关&#xf…

FlinkSQL基本语法和概念

Flink Sql1、简介2、网址3、SQL客户端4、Queries5、Create6、Drop7、Alter8、Insert9、ANALYZE10、Describe11、Explain12、Use13、Show14、Load15、Unload16、Set17、Reset18、Jar19、Windowing TVF19.1、TUMBLE&#xff08;滚动窗口&#xff09;19.2、HOP&#xff08;滑动窗口…

rabbitmq+netcore6 【2】Work Queues:一个生产者两个消费者

文章目录1&#xff09;准备工作2&#xff09;新建消费者13&#xff09;新建消费者24&#xff09;生产者5&#xff09;知识点解读1、autoAck: true2、重复声明/前后不一致3、Message durability 消息持久化4、Fair Dispatch 公平调度5、综合以上知识点的代码&#xff1a;官网参考…

Linux的运行级别

Linux的运行级别: Linux系统有7种运行级别(runlevel): 运行级别 0&#xff1a;系统停机状态&#xff0c;系统默认运行级别不能设为0&#xff0c;否则不能正常启动运行运行级别 1&#xff1a;单用户工作状态&#xff0c;root权限&#xff0c;用于系统维护&#xff0c;找回丢失…

少儿Python每日一题(9):约瑟夫环

原题解答 本次的题目如下所示(原题出处:蓝桥杯) 【编程实现】 有n个人围成一个圈,按顺序排好号。然后从第一个人开始报数(从1到3 报数),报到3的人退出圈子,然后继续从1到3报数,直到最后留下一个 人游戏结束,问最后留下的是原来第几号。 输入描述:输入一个正整数n 输…

国际手机号码检查纠正 API 接口

国际手机号码检查纠正 API 接口 有效性检查及智能纠正&#xff0c;遵循 E.164 标准&#xff0c;智能统一格式。 1. 产品功能 智能检测国际手机号码有效性&#xff1b;可根据提供的国家编码参数&#xff0c;判断提供的手机号码是否为该国家有效手机号码&#xff1b;智能纠正提…

场景题:假设10W人突访,你的系统如何做到不 雪崩?

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01;疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 &#xff1a; 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

头歌:Ping服务端创建UDP套接字(底部附全关完整答案)

头歌实践教学平台 (educoder.net)在 Ping 的 服务程序中 创建一个使用 UDP 协议的 套接字数据包套接字类型套接字三种类型:流式套接字(SOCK_STREAM)&#xff0c;数据包套接字(SOCK_DGRAM)及原始套接字&#xff08;SOCK_RAW&#xff09;数据包格式套接字&#xff08;Datagram So…

JavaSE---多用户网络通信系统

目录 项目开发流程 多用户网络通信系统的架构设计 客户端 界面层 服务层 管理层 服务端 服务层 功能层 管理层 总结 项目开发流程 多用户网络通信系统的架构设计 整体 作为一个可供多个用户使用的通信系统&#xff0c;那么每个用户和其他用户之间的连接必定不是直接…

电脑宽带连接提示错误代码769怎么办?

有用户反映&#xff0c;在使用宽带连接网络时&#xff0c;出现错误代码769&#xff0c;无法连接到指定目标怎么办&#xff1f;这里整理了错误代码769的可能原因和修复方法&#xff0c;带大家顺利连接网络。错误代码769的原因&#xff1a;连接线松动或损坏网卡被禁用网卡驱动过时…

【信息论与编码 沈连丰】第四章:离散信源的信源编码

【信息论与编码 沈连丰】第四章&#xff1a;离散信源的信源编码第四章 离散信源的信源编码4.1 信源编码的模型4.2 信息传输速率和编码效率4.3 单义可译定理4.4 无失真信源编码定理4.5 几种典型的信源编码方法4.6 汉字编码方法及其讨论4.7 图像的信源编码4.8 误码对信源译码的影…

openFeign远程调用返回页面404 ,对应配置文件不生效,排除数据源等问题

在使用上架商品功能时&#xff0c;在debug时候&#xff0c;发现在将数据发送给ES保存时&#xff0c;无法远程调用es的服务&#xff0c;报错404找不到接口&#xff0c;如下图&#xff1a; 一开始以为是openFeign的问题&#xff0c;经过检查&#xff0c;各种接口、注解都没问题&…

2022尚硅谷SSM框架跟学(一)MyBatis基础一

2022尚硅谷SSM框架跟学 一MyBatisSSM框架整合课程优势课程体系框架图MyBatis1、MyBatis简介1.1MyBatis历史1.2MyBatis特性1.3MyBatis下载1.4和其它持久化层技术对比JDBCHibernate 和 JPAMyBatis2.搭建MyBatis2.1开发环境2.2创建maven工程(1)打包方式&#xff1a;jar(2)引入依赖…