xss跨站攻击html转义,跨站脚本攻击 XSS攻击基础

变态和变态相遇,有一半的可能会情投意合,一般的可能会彼此恶心。这个变态把我恶心坏了。

概述

个人对XSS攻击的原理认知:

原理:对可以控制传参的位置,比如url链接中,输入框中,首先闭合输出参数位置前后网页标签,在闭合的中间加上JavaScript代码或者其他的html标签,使得网页能够执行你添加的参数功能。

危害:凡是js能做的,大部分xss漏洞都能利用,常见的比如获取当前cookie,获取浏览器保存的账号密码 、获取屏幕截图,获取页面的数据,改变页面的逻辑,向服务器发送数据请求等。

情景:在挖洞的情景下,只要保证能弹个窗,或者执行js代码即可。但是其中会涉及到很多前端相关的知识,比如如何在不同标签下触发弹窗,怎么绕过拦截等等。

分类

xss分三种,分别为反射型,存储型,DOM型。但是按照攻击代码来源可以分成两种:

反射型:通过URL参数直接注入

存储型:保存到网址数据库,在其他用户访问该数据的时候会被读取并执行,常在留言板,下单栏,文章频率,输入框等。

首先看第一种,通过源码来分析他的原理,首先写一个简单的flask后台,功能很简单,只负责返回输出用户输入的参数,代码如下:

from flask import Flask,request

app = Flask(__name__)

@app.route('/')

def index():

data = request.args.get('id')

return data

if __name__ == '__main__':

app.run()

使用火狐浏览器,打开网址:

http://127.0.0.1:5000/?id=langzi666

页面返回内容为:

00b823b06db1956ce20228a2605cb5da.png

因为传入的参数是可以控制的,并且没有任何的过滤机制,直接控制id的变量即可,访问:

http://127.0.0.1:5000/?id=

页面返回内容为:

5257122f9ca79e15403fc4dc5278edd7.png

但是这张插入在url中代码很长很可疑,可以做短网址处理。

第二种存储型,即网页提供一个输入框,你在其中填写js代码后,后台保存到数据库,当其他人或者管理员查看你输入的内容的时候,就会出发js代码。

4个可能存在XSS的位置

在下面这些点中可以存在xss注入点:

HTML节点内容:网页的内容包含用户输入的信息

HTML属性:网页的节点的属性是由用户输入的信息组成,跃出节点属性的范围

JS代码:js代码中由后台注入的变量,或者包含用户输入的信息

富文本:一大段的html

HTML节点内容

我的头发呢?

比如这个的节点,中间输出用户输入的内容,那么能够控制输出的内容。变成这样:

我都头发呢

因为中间的变量是可以控制的,所里这里可能存在XSS攻击。

HTML属性

比如有一张图片,图片来自用户的输入(之前上传的图片地址,外部图片地址,等等),正常情况下应该是这样的结果:

665dacdaac478ddd74c395c8c3c3a87d.png

但是因为节点变得可控,就有可能变成这样的结果:

1asd1a

# src应该是图片的地址,onerror的意思是如果找不到图片或者加载失败,就执行的功能

如果图片存在,比如:

665dacdaac478ddd74c395c8c3c3a87d.png

是不会触发弹窗的,那最上面的flask例子就能证明,分别访问下面两个网址:

http://127.0.0.1:5000/?id=665dacdaac478ddd74c395c8c3c3a87d.png

http://127.0.0.1:5000/?id=%E9%98%BF%E6%96%AF%E9%A1%BF%E6%92%92%E6%B3%95%E5%91%831asdy_girl.jpg

前者不触发,后者触发。有些网站是通过如下方式获取图片的,比如:

http://www.langzi.fun/image/1

这样会调出第一张图,通过下面方式闭合img标签,填写错误不存在的图片即可完成xss

http://www.langzi.fun/image/1dasd122safqas" οnerrοr="alert(1)

JS代码

后端传递过来的代码应该是这样:

网址中是这样的

http://www.langzi.fun/?data=hello

因为参数可控,所以只需要和上面一样,进行闭合然后加上js代码即可

http://www.langzi.fun/?data=hello';alert(1)'

富文本

网址的编辑器都是富文本编辑器,富文本指在编辑的需求下,是需要允许部分HTML标签在渲染后有效的,但是又有部分诸如script这样的标签不应该有效,而且仅仅滤去script还不够,还有更多情况像img这样必不可少、看似安全的标签也会让人有机可乘。

转义

html中的转义:

显示结果:实体名称:实体编号

< : < : <

> : $gt; : >

" : &quote; : "

' : %apos; : '

( :(

) : )

xss防御会把这些html中用来闭合的位置进行转义,这些转义后的符号在html的内容中并不会出现异常效果和原来的一样。但是有些位置即使没有引号闭合,如果中间有空格也会造成xss。

如果后端代码会把单引号替换或者屏蔽,可以用上面的实体名称或者实体编号代替,可以简单的绕过拦截。

即访问上面flask的网址也会出现弹窗:

127.0.0.1:5000/?id=hello

127.0.0.1:5000/?id=hello

常用绕过waf转义,即上面的标签转义,但是必须要用在标签里面

改变大小写

hex,url编码

使用其他标签引用,比如onerror,onchange等

使用js自带的函数编码

使用 ` 代替括号

使用svg标签插入,可以绕过注释

这个网上有许多许多的资料,我对xss还并不是很熟,所以就不班门弄斧了。

权限维持

即如果你入侵成功后台后,修改登陆成功文件,利用js代码获取每次登陆成功后管理员的cookie,发送到你的服务器。

比如登陆后台地址为:

http://www.langzi.fun/admin.php

登陆成功后会跳转到:

http://www.langzi.fun/admin_manage.php

这个时候修改admin_manage.php代码的文件,就能持续获取管理员的cookie。

反入侵webshell箱子

一些目录文件会做后门,做后门的方式即获取该目录当前路径和密码,然后发送到箱子的服务器上面。

这个时候如果你能成功抓到数据库,将发送的数据进行篡改,改成一段获取cookie的js代码,这样就能获取到webshell箱子服务器后台的cookie,通过找到该webshell后台,就能实现反向入侵。

不过这是太理想化的情况,实际情况会复杂很多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值