跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

XSS,全称Cross Site Scripting,是一种跨站脚本攻击(为了避免与Cascading Style Sheets(CSS)的缩写混淆,不称为CSS)。从某种意义上来说,这也是一种注入攻击。这意味着攻击者将恶意脚本代码注入到页面中。当受害者访问该页面时,恶意代码将在其浏览器上执行。需要强调的是,XSS不仅限于JavaScript,还包括Flash等其他脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型XSS和反射型XSS。

1。低

1.1。反射型 XSS

执行正常数据输入。根据提示,在文本框中输入mkbk,然后提交。返回结果如下图所示。系统可以正常返回问候语Hello mkbk。c1c6304dac1708634721bd01a8555bb6450305809.png

分析上面的数据输入和返回结果,可以得出,服务器端的处理就是在输入的名字前面加上Hello,然后显示在HTML的pre标签之间。616b8ae5a1043256f2acfd58cd9f400b450305809.png

进一步测试一下,如果提交的数据不是普通数据,而是JavaScript脚本,问候语能否正确显示?输入Scriptalert('XSS')/Script并提交,结果如图:934d8abe74a2b00d4426380e8422bc29450305809.png

从图中可以看到,只显示Hello,并弹出XSS提示框。这说明嵌入的JavaScript脚本代码被浏览器正确执行,同时也表明系统存在XSS攻击漏洞。

本次实验利用的漏洞是在提交数据时,服务器没有对提交的数据进行过滤,导致提交的数据中含有JavaScript脚本代码,使得浏览器可以直接执行前端页面的脚本程序。

1.1.1。利用反射型XSS攻击窃取用户账户和密码

打开XSS(Reflected)实验环境,在Name文本框中输入以下脚本:a href='http://192.168.217.130/dvwa/vulnerability/brute/' 恭喜您获得500万大奖,点击领取/a 019e6452028d9526c2304434130da07d450305809.png

提交后,诱导页面如上图。该页面上有一个链接,诱导用户点击。用户点击后会跳转到登录页面,如下图:842527d89dce45c247c61a90f1175d37450305809.png

当然,这个登录页面也可能是攻击者故意设计的页面。一旦信息提交,攻击者就会获取用户的账户和密码信息。恶意攻击者可能会将该网站伪装成合法网站,甚至获取用户的手机号码、银行卡号等更重要的信息。

1.2。存储型 XSS

在左侧列表中选择XSS(Stored)进行攻击实验。执行正常的数据输入。根据提示,在“名称”文本框中输入“mkbk”,在“消息”文本框中输入好评论,然后单击“签署留言簿”按钮。返回结果如图所示。刚刚提交的信息可以正常返回7d8d56f94a674bb34ae9efab10e13f17450305809.png

当再次刷新页面时,仍然保留了之前提交的信息,说明提交的信息已存储在数据库中。Alt text

进一步测试,如果提交的数据是JavaScript脚本,提交的信息是否仍能正确显示。在“名称”文本框中输入mkbk,在“消息”文本框中输入Scriptalert('XSS')/Script。提交后,结果如图所示。48a5eff988dc3a8454bb0d5b60b45a02450305809.png 62154987afa947d09817d8392d505e7c450305809.png

从上图可以看出,Name字段的mkbk显示正确,但Message字段为空,并弹出XSS提示框。这说明嵌入的JavaScript脚本代码被浏览器正确执行,同时也表明系统存在XSS攻击漏洞。如果再次刷新页面,仍然会弹出XSS提示框。由于嵌入的脚本已经存储在数据库中,每次访问该页面时,都会从数据库中加载数据,并由浏览器执行该脚本,这意味着每次都会触发XSS攻击。

1.2.1 使用存储的XSS攻击窃取浏览器cookie

打开XSS(Stored)实验环境,在Name文本框中输入Cookie,在Message文本框中输入Scriptalert(document.cookie) /Script,然后提交。结果如图026e3c9256e3f4dfebc36cfb30ae3b08450305809.png a7a17d46ca1f6a745268ebd7038e0133450305809.png

从图中可以看出,获取了用户浏览器的cookie信息。只要用户访问该页面,就会显示该用户的浏览器cookie信息。此外,如果攻击者通过构造HTTP请求自动将这些信息发送到攻击者的服务器,那么攻击者就可以存储所有访问该页面的用户的cookie信息。

1.2.2。利用Cookie完成会话劫持

在DVWA实验环境中,打开登录界面http://192.168.217.130/dvwa/login.php,输入用户名admin和密码password。正常登录后,跳转到http://192.168.217.130/dvwa/index.php页面。然后,使用review元素获取cookie详细信息:e4b295d4f5e326f65825b0f89bea7a7b450305809.png

获取信息后,您可以使用cookie欺骗工具进行访问。

点击下图中2号图标,激活3号文本框,将上面获取到的cookie详细信息(security=low; PHPSESSID=vb96k8kefadp9h72gklmff3ap6)填入3号,将上一步登录后的URL http://192.168.217.130/dvwa/index.php填入1号,点击连接4号完成登录操作7ae50e4b36b4a0fd071fe218702e2674450305809.png

本次实验使用的是老牌的cookie欺骗工具。客户端登录时获取cookie信息后,无需输入用户名和密码即可跳转到登录页面,完成会话劫持。

2。中等

将DVWA实验平台的安全级别设置为Medium,在左侧列表中选择XSS(Reflected),进行XSS攻击实验(存储型XSS攻击和反射型XSS攻击的防御方法原理相同)。在本实验环境下,提交JavaScript脚本scriptalert('XSS')/script,结果如图3d4d70aeb9741e8a4e5f900b44df209d450305809.png

可以看到,没有弹出XSS提示框,脚本标签之间的alert('XSS')也正确显示为名称。

123456789101112131415?phpheader('X-XSS-Protection: 0'); //有输入吗? if( array_key_exists( 'name', $_GET ) $_GET[ 'name' ] !=NULL ) { //获取输入$name=str_replace( 'script', '', $_GET[ 'name' ] ); //最终用户的反馈echo 'preHello {$name}/pre';}?分析源代码可以看出,服务器将脚本标签字符串替换为空白。这样后台的$name变量就变成了alert('XSS'),而浏览器接收到的响应页面的代码是preHelloalert('XSS')/pre,而这并不是可执行的JavaScript代码段,所以无法弹出提示框。

对于上面的过滤方案,可以使用这个方法来绕过。 HTML标签不区分大小写,即script和Script是同一个标签。将之前提交的scriptalert('XSS')/script重写为Scriptalert('XSS')/Script,仍然可以弹出XSS提示框268ac2e6094d56d07eb7f9f4fdf007a2450305809.png

双重写入字符串也可以被绕过。输入scriptscriptalert('xss')/script,会弹出成功弹框:268ac2e6094d56d07eb7f9f4fdf007a2450305809.png

3。高

仍然提交JavaScript脚本scriptalert('XSS')/script,结果如图5a89dd40580f1ff6221d73dd51ef427b450305809.png

可以看到没有弹出XSS提示框,Hello后面只剩下一个符号了。这表明XSS攻击没有成功。

123456789101112131415?phpheader('X-XSS-Protection: 0'); //有输入吗? if( array_key_exists( 'name', $_GET ) $_GET[ 'name' ] !=NULL ) { //获取输入$name=preg_replace( '/(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); //最终用户反馈echo 'preHello {$name}/pre';}?分析源码发现,服务器端通过正则表达式过滤了提交的内容,导致注入的脚本没有被执行。

对于上面的过滤方案,可以使用下面的方法来绕过它。除了直接嵌入触发器之外,XSS攻击还可以通过使用HTML标签属性的事件来触发。将之前提交的scriptalert('XSS')/script脚本重写为body onload='alert('XSS')'/body,成功弹出“XSS”提示框:01256ad64c8867bb15e762824d8a3379450305809.png

4。不可能

此时无论提交什么,都无法弹出XSS提示框。

123456789101112131415161718?php//有输入吗if( array_key_exists( 'name', $_GET ) $_GET[ 'name' ] !=NULL ) { //检查反CSRF 令牌checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); //获取输入$name=htmlspecialchars( $_GET[ 'name' ] ); //最终用户反馈echo 'preHello {$name}/pre';}//生成反CSRF 令牌generateSessionToken();分析源码可知,服务器端调用了htmlspecialchars()函数来处理提交的数据。该函数的作用是将一些预定义的字符转换为HTML实体。例如显示为amp;'显示为quot;显示为lt;显示为gt;等,包含这些字符的恶意代码无法在浏览器中正确执行。

5。摘要

底层代码直接引用name参数,没有经过任何过滤和检查,存在明显的XSS漏洞。输入scriptalert('xss')/script 直接弹出框。对于反射型XSS,可以诱导用户点击链接,跳转到钓鱼页面,骗取账户和密码;对于存储型XSS,可以先将恶意代码存储到数据库中。当用户访问网站时,网站从数据库中读取恶意代码并将其拼接到页面中。当用户浏览页面时,恶意代码就会被执行,将用户的隐私信息发送到自己的服务器上。

中级代码过滤输入。基于黑名单的思想,使用str_replace函数来删除输入中的脚本。双写可以绕过scscriptriptalert(/xss/)/script;大小写混淆可以绕过ScRiptalert(/xss/)/script。

高层代码还使用黑名单来过滤输入,并使用preg_replace() 函数进行正则表达式搜索和替换,这使得双写绕过和大小写混淆绕过(正则表达式中的i 表示不区分大小写)不再有效。虽然不能使用script标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意js代码:img src=1 onerror=alert(/xss/)。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。