HTPP协议
HTTP1.0请求方法:GET,POST,HEAD
HTTP1.1请求方法:OPTIONS,PUT,DELETE,TRACE,CONNECT
HEAD请求方式:只返回头部数据,数据部分不返回内容
OPTIONS请求方式:(需跨域时设置此请求方式)返回服务器允许的请求类型
PUT请求方式:在特定的目录中上传指定文件,文件名在
url中设置DELETE请求方式:删除特定目录中的文件,文件名在
url中设置TRACE请求方式:让服务器端将客户端所有的请求返回给客户端,多用于
debug需求CONNECT请求方式:用于特定应用使用
http协议时使用(使用http长链接的程序)
URL同源策略
URL格式中,协议,主机,端口三部分相同,视为同源
注入漏洞
SQL注入
概念
构造特殊请求,使web应用执行带有附加条件的SQL语句,web应用访问数据库时回附带其他命令造成数据库的意外输出
影响
读取,修改数据库中的库和表;执行系统命令
注入类型
简单注入
基于布尔型注入:根据返回页状态判断条件真假
1
21' and '1'='1 / 1' and '1
1' and '1'='2 / 1' and '0基于报错的注入:根据页面返回错误信息
1
2
3
4'
"
%
()基于时间的注入:根据页面返回时间
基于联合查询的注入:使用
union基于堆查询的注入:同时执行多条语句注入
盲注
不会返回错误信息,执行正确与执行错误返回不同的页面,据此判断是否注入成功。
注入方式
暴库->暴表->暴字段->暴记录
出现SQL注入的原因与防范
数据库可执行系统命令
最小化权限账户启动数据库
禁止让数据库执行系统命令
连接数据库用户权限过大
IDS,WAF连接数据库用户权限最小化
错误信息返回过多
统一错误信息管理
禁止向用户提供错误信息
服务器对请求内容过滤不严格
过滤所有客户端数据
审核数据
XML注入
概念
XML文件一般用于存储数据及配置,如果在修改或新增数据时,没有对用户可控数据做转义,直接输入或者输出数据,都将导致XML注入漏洞
产生原因
传输的数据包含了标签内容
修改数据时会覆盖原有标签
防范
对用户输入进行检查
对特殊字符进行转码
代码注入
远程文件包含漏洞
概念
在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至是恶意的代码注入
如果PHP的配置选项allow_url_include为ON,则include/require函数是可以加载远程文件的,此被称为远程文件包含漏洞
PHP常见文件包含函数
1 | include() |
影响
利用代码注入漏洞执行任意代码,来操作服务器
利用代码注入漏洞操作数据库,插入恶意数据,可能获取系统权限
利用代码注入漏洞修改系统配置,修改网络配置
进行代码注入攻击后可以进一步对网络渗透
审计方法
查看是否包含如下代码:
1 | include() |
防范
不需要执行远程代码时,修改
php.ini配置1
2allow_url_fopen=Off
allow_url_include=Off不可直接导入用户输入内容
执行代码的参数,或文件名,禁止与用户输入相关,只可由开发人员定义代码内容
本地文件包含
概念
读取任意本地文件,在条件允许时甚至可以执行代码
可以通过远程文件包含漏洞来生成本地文件包含漏洞的代码来利用
影响
上传各类格式木马文件,然后包含利用
读敏感文件
包含日志文件
包含
/proc/self/envion文件包含
data:或php://input等伪协议若有
phpinfo则可包含临时文件执行任意代码
包含具有恶意文件的网站
控制服务器
PHP常见文件包含函数
1 | include() |
PHP文件中的封装协议–访问本地文件
1 | file:// #访问本地文件系统 |
PHP文件中的封装协议–代码任意执行
1 | php:// #访问各个输入/输出流 |
PHP文件中的封装协议–目录遍历
1 | glob:// #伪协议,查找匹配的文件路径模式 |
防范
不要直接导入用户输入的内容(与远程文件包含漏洞相同)
命令执行漏洞
概念
用户通过浏览器提交执行命令,由于服务器没有针对执行函数做过滤,导致在没有指定绝对路径的情况下执行命令,可能会允许攻击者通过改变$PATH或程序执行环境的其他方面来执行一个恶意构造的代码
可用作命令执行的符号:
1 | & |
例:1
cat ` cat /etc/passwd `
影响
使用
web服务程序的权限去执行系统命令或读写文件反弹
shell控制整个网站甚至控制服务器
当作跳板机进一步内网渗透
各语言执行系统命令的函数
PHP
1 | system():输出并返回最后一行shell的结果 |
JSP
1 | Runtime.getRuntime().exec(<commandstr>) |
第三方组件存在的代码执行漏洞
Struts2漏洞(s2-16)
2.3.15.1以前版本中没有对action:,redirect:,redirectAction:等进行处理,导致ongl表达式可以被执行
防范
PHP
尽量不执行外部命令
使用脚本解决工作,少用执行命令函数,
php中禁止disable_functions使用自定义函数或函数库来替代外部命令的功能
程序参数,
escapshellcmd过滤程序参数值,
escapeshellarg过滤参数值使用引用号包裹,并在拼接前调用
addslashes转义使用
safe_mode_exec_dir指定可执行文件路径
XSS漏洞
概念
XSS(跨站脚本漏洞),hack在web页面中插入恶意js代码,当用户浏览此网页时,js代码会被执行,达到恶意攻击的目的
风险
盗取用户
cookie操控用户浏览器
下载木马
修改页面内容,钓鱼攻击
存储型XSS
概念
持久化,恶意js代码存储在服务器中
流程
hack将恶意js代码插入web请求中,传送给服务器,服务器未经过过滤存于数据库中。当其他用户访问此页面时,服务器会将带有恶意js代码的页面返回至浏览器,造成恶意js代码的执行
诱骗受害者点击链接:将长链接转换为短链接(网址缩短)

风险
盗取
cookie钓鱼攻击
修改页面内容,获取用户信息
生成蠕虫,利于扩散
检测:(表单输入框)
1 | <script>alert("1")</script> |
防范
浏览器解析顺序:
HTML->CSS->JavaScript浏览器解码顺序:
HTML->URL->JavaScript对
HTML中不可信字符进行转义,为属性值加引号,不可加反引号(`)按照
HTML转义,后js转义的顺序进行转义创建用户可提交标签和属性白名单
使用
utf-8字符编码及设置content为text/html不要将用户可控制的文本放在
<meta>标签前使用
<!DOCTYPE html>
反射型XSS
概念
不可存储在服务器中,通过浏览器解析后返回到浏览器
过程
构造有恶意js脚本的网站连接,诱骗受害者点击连接,向服务器发送请求,服务器解析地址后返回至受害者,受害者浏览器执行js造成XSS攻击
防范
同存储型XSS
DOM型XSS
概念
不可存储在服务器中,不需服务器做解析
过程
与反射型XSS相似,不同的是浏览器执行时取url中的参数,而不使用服务器返回的过滤后的参数(纯粹是JS取代了URL的内容)
检测
网站代码中存在
document.locationdocument.URLdocument.referrer类似的可提取url内容的代码,就可能存在DOM型XSS漏洞
防范
写入页面前先转义
慎用
eval()编写安全的函数方法,从可靠的数据源获取参数
参考使用
filter.js库
请求伪造漏洞
SSRF漏洞
概念
服务器请求伪造,是一种攻击者伪造服务器请求的安全漏洞,一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
出现原因
对于提供了从其他服务器上获取数据的功能的web应用,如果存在缺陷,攻击者可利用此web应用作为代理攻击远程和本机的服务器。
如果web应用没有对用户提供的URL和远端服务器返回的信息进行合理的验证和过滤,就可能存在SSRF漏洞
攻击者利用SSRF漏洞可以实现绕过网络限制攻击企业内网
流程
攻击方式
信息收集:对外网,服务器所在内网,本地进行端口扫描,获取服务
banner信息信息收集:对内网
web应用进行指纹识别,通过访问默认文件实现信息收集:利用
file协议读取本地文件等执行指令:攻击内外网的
web应用,使用get参数执行指令:溢出,攻击运行在内网或本地的应用程序
产生原因
应用从用户指定的
url获取图片,并使用一个随机的文件名保存在硬盘上,并展示给用户应用获取用户指定
url的数据,这其中会使用socket跟服务器建立tcp连接,传输原始数据应用根据用户提供的
url,抓取用户的web站点,并自动生成移动wap站点应用提供测速功能,能够根据用户提供的
url,访问目标站点,以获取其在对应经纬度的访问速度
利用SSRF进行端口探测
1 | http://0.0.0.0/xx.php?url=http://1.1.1.1:22 |
返回值若为服务banner信息,说明此目标端口开放
检测方法
PHP
1 | file_get_contents() |
以上三个函数使用不当会造成SSRF漏洞
JSP
1 | Request类 |
以上函数使用不当会造成SSRF漏洞
绕过方法
添加端口号
短网址绕过
指向任意
IP的域名xip.io1
2
3
410.0.0.1.xip.io resolves to 10.0.0.1
www.10.0.0.1.xip.io resolves to 10.0.0.1
mysite.10.0.0.1.xip.io resolves to 10.0.0.1
foo.bar.10.0.0.1.xip.io resolves to 10.0.0.1IP限制绕过各进制转换,各进制组合转换
协议限制绕过
防范
过滤返回信息,验证远程服务器对请求的响应
统一错误信息,避免用户根据错误信息判断远端服务器的端口状态
限制请求的端口为
http常用端口黑名单内网
IP,避免获取内网数据,攻击内网禁用不需要的协议,仅允许
http和https请求
CSRF漏洞
概念
跨站请求伪造,攻击者利用被攻击者的身份发起了某些被攻击者不知情的网络请求
影响
以被攻击者的名义发送邮件
以被攻击者的名义发送消息
盗取被攻击者账号
使用被攻击者信息购买商品
虚拟货币转账
流程
漏洞利用条件
被攻击者登陆过网站(获取
Cookie)被攻击者打开攻击者提供的恶意连接
网站除了验证
Cookie,不进行二次验证
防范
GET、POST的正确使用Referer Check,http头中字段,用于标识此次请求从哪个页面跳转过来的Anti CSRF Token验证码
重要操作做二次验证
文件处理漏洞
任意文件上传
漏洞产生原因
web应用程序在处理用户上传的文件操作时,如果用户上传文件的路径,文件名,扩展名成为用户可控的数据,就会导致直接上传脚本木马到web服务器上,直接控制web服务器
文件上传时检查不严
没有进行文件格式检查
在客户端进行了格式检查-很容易被绕过
在服务器端进行了不严格的黑/白名单检查
可使用
%00等截断方式绕过使用大小写方式绕过黑名单
只对文件类型(
Content-Type)进行了检查
危害
文件是一个
webshell,可以任意执行系统命令与后台数据库连接,任意执行数据库命令
把本服务器当作跳板,访问局域网内任意服务器
获取服务器登陆权限
检测方法
检测点:所有可上传文件的页面
检测方法:
使用什么方式来限制文件类型
是否对文件名进行重命名
是否允许用户重命名文件名
防范
文件上传的目录设置为不可执行
判断文件类型
文件类型判断,后缀名判断
白名单策略
对于图片处理,使用
resize函数来破坏源代码使用随机数来存储文件
防止多后缀文件引起的漏洞
单独设置文件服务器的域名
此服务器不可运行任何动态网页
此服务器只可静态访问
HTML,图片等
任意文件下载
概念
web服务器由于业务需求,需提供文件查看或文件下载功能,若对用户查看或下载的文件不做限制,则恶意用户就能查看或下载任意敏感文件,这就是文件查看与下载漏洞
检测方法
查找传入文件名的参数
导入文件等参数,要是直接输入文件名,就可能有注入点
注意如下参数名:
RealPath,FilePath,filepath,Path,path,inputFile,url,urls,Lang,dis,data,readfile,filep,src,menu,META-INF,WEB-INF在代码中查找漏洞
PHP中:存在readfile,fopen,file_get_contents等代码,可能存在任意文件下载漏洞
敏感文件路径-Windows
1 | C:\boot.ini # 查看系统版本 |
敏感文件路径-Linux
1 | /root/.ssh/authorized_keys |
防范
PHP为例:
过滤.,使用户在url中不能回溯上级目录
使用正则严格判断用户输入参数的格式
php.ini配置open_basedir限定文件访问范围
访问控制漏洞

横向越权
正常访问流程
访问自己的信息页

修改自己密码

概念
越权漏洞属于逻辑漏洞。利用业务逻辑在程序中体现时,仅仅限制于用户点击
Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数中获取了userid,导致攻击者可以自行修改userid,修改不属于自己的数据只要权限验证不使用
cookie验证,都可能发生横向越权漏洞所有的更新语句操作,都可能产生此漏洞
影响
以其他用户的身份进行操作
查看/遍历内容
更改信息
发表文章
所带来的影响
更改确认邮箱/手机号,可进行支付操作
查看其他用户信息,收集隐私信息
发布敏感文章
检测方法
查看任何传递用户信息的参数
只要是用户
id,用户名等以参数的方式传递,就可能有风险查看特权内容,是否进行了权限管理
防范
修改程序逻辑
用户
id,用户名等禁止通过参数来传递,直接取cookie中的值私有信息访问时需要验证用户身份
无法修改程序逻辑,通过混淆的方法防御
用户
id使用MD5等编码,很难进行遍历
垂直越权
概念
由于Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的
影响
垂直权限漏洞,一般是直接访问业务管理员权限
可能会看到全部用户信息
可能更改全部通告信息
可能更改商品价格
可能更改订单信息
只要是能拿到业务管理员权限,可能对业务造成很大影响
防范
在每个页面的加载之前进行权限验证
进行服务器验证,不可做前台验证
验证时,从
session获取对应的用户信息session中用户信息存放在服务端,用户不可修改对每个敏感页面都进行验证
会话管理漏洞

会话劫持
概念
通过获取用户session id后,使用该session id登陆目标账号的攻击方法,此时攻击者实际上是使用了目标账户的有效session。
会话劫持的第一步是取得一个合法的会话标识来伪装成合法用户
攻击步骤
目标用户需要先登陆站点
登陆成功后,该用户会得到站点提供的一个会话标识
session id攻击者通过某种攻击手段捕获
session id攻击者通过捕获到的
session id访问站点即可获取目标用户合法会话

如何获取cookie
了解
cookie接口找到
session id位置进行破解
暴力破解:尝试各种
session id,直到破解为止预测:如果
session id使用非随机的方式产生,那么极有可能计算出窃取:
XSS攻击,中间人攻击等方法获取


影响
冒充他人进行操作
对站点的影响
HTTP-Only
服务端发送cookie时,可以设置HTTP-Only
优点是设置HTTP-Only的参数不会被js获取
secure
当设置cookie的某个值的secure为true时
此cookie只有在HTTPS协议中才会进行传输
防范
由XSS漏洞引起的会话劫持
使用
HTTP-Only来防止js获取cookie中的session id信息中间人攻击引起的会话劫持
使用
https+secure来保证session id不被获取
会话固定
概念
会话固定是一种诱骗受害者使用攻击者指定的会话标识(session id)的攻击手段。
这是攻击者获取合法会话标识的最简单的方法
会话固定也可以看成是会话劫持的一种类型,原因是会话固定的攻击的主要目的同样是获得目标用户的合法会话,不过会话固定还可以强迫受害者使用攻击者设定的一个有效会话,以此来获取用户的敏感信息
原理


访问网站时,网站会设置
cookie中的session当用户登录后,
cookie中的session保持不变只要获取登陆前的
session内容,就可以知道登陆后的session
检测方法
访问网站(未登录)
获取
cookie信息,获取session id登陆网站
查看
cookie信息,获取session id查看登陆前,登陆后的
session id是否相同
防范
在用户登陆成功后重新创建一个
session id登陆前的匿名会话强制失效
session id与浏览器绑定session id与所访问的浏览器有变化,就立即重置session id与所访问的IP绑定session id与所访问的IP有变化,就立即重置
日志攻击
概念
将未经验证的用户输入写入日志文件,致使攻击者伪造日志条目或将恶意信息内容注入日志
防范
只输出必要的日志,功能上线前删除大多数调试日志
过滤非法字符
资源泄露
概念
程序可能无法成功释放某一项已申请的系统资源
如果攻击者能够故意触发资源泄露,就有可能通过耗尽资源池的方式发起DOS攻击
分类
流资源未释放(Unrelease Stream)
数据库连接未释放(Unrelease DB Connection)
防范
关闭连接时,使用
try/catch处理异常使用工具类关闭
工具类: import org.apache.commons.io.IOUtils
JAVA代码:IOUtils.closeQuietly(br)