sql注入

产生原因

在程序代码中,对用户提交的参数未做过滤直接拼接到sql语句中,破坏了原有sql语句的逻辑,执行了任意sql语句

利用手法

联合查询注入、堆叠查询注入、盲注(时间盲注、布尔盲注、报错性注入、宽字节注入、二次注入、万能密码

修复建议

过滤特殊字符,对相应字符进行过滤

参数化查询

预编译

限制数据库的权限

隐藏sql报错信息

统一编码

代码执行

产生原因

应用程序对传入数据过滤不严,导致代码被注入到应用程序中,最终被执行

常见代码执行函数

PHP

eval();        // 把字符串当做PHP代码执行
assert();        // 判断是否为字符串    ,是则当成代码执行
call_user_func();    // 第一个参数是被调用的回调函数,其余是回调函数的参数
call_user_func_array()        //第一个参数是被调用的回调函数,参数数组是回调函数的参数
preg_replace()        // 当时用/e修饰时替换的东西是代码的时候会执行
create_function()    // 创建匿名函数

JAVA

Java 没有类似于前者的函数,但存在反射机制,有基于反射机制的表达式引擎,OGNL/SPEL/MVEL

命令执行

常见命令执行函数

PHP

system(args)    // 有回显
passthru(args)    // 有回显
exec(args)        // 必须用echo输出
shell_exec(args)    // 无回显
反引号  ``
popen(handle, mode)        // 无回显
proc_open()        // 无回显
$process = proc_open()        
echo stream_get_contents($pipes[1]);

JAVA

Runtime执行命令
ProcessBuilder执行命令
利用手法

使用管道符拼接命令,使用dnslog或者ceye外带回显

修复建议

不执行外部的应用程序和命令

利用escapeshellarg函数处理相关参数

使用safe_mode_exec_dir执行可执行的文件路径

模板注入

程序接受恶意的用户数据后,未做验证直接作为模板的一部分,导致信息泄露、代码执行

常见模板:

php:twig,smarty,blade

python:jinja2,tornado,Django

java:velocity、freemarker

修复建议

对用户传入的数据做严格的限制

XXE

用户将恶意代码注入到xml文档中,可读取敏感文件,可扫描内网端口

修复建议

禁用外部实体

过滤用户提交的xml数据

升级libxml组件

cookie登录绕过漏洞

当cookie是外部可控或者验证不严就会被绕过

修复建议

对外部输入进行过滤

使用更为安全的session验证

session身份绕过漏洞

如果用户可以获取到session,就可以绕过登录限制,比如一些session存放在web目录下或者是数据库内,就有可能会被用户获取

修复建议

不要将session存放在web文件夹中

伪随机码漏洞

伪随机码可以被实现预测

修复建议

使用较为安全的随机码

对次数做限制,防止被爆破

文件上传漏洞

产生原因

程序员对用户上传的文件没有做严格的限制,导致用户可以越过本身的权限,上传脚本文件

绕过方法

后缀大小写、双写,不常见的后缀

上传.htaccess文件

分块传输

空格或者00截断

利用系统特性绕过

修复建议

对于网站中的上传模块做好权限认证

在文件上传目录设置为禁止脚本文件执行

设置白名单验证

在文件上传后,修改文件名为随机

文件解析漏洞

中间件在解析文件的时候出了问题,导致将一些文件解析称为脚本文件,可配合文件上传漏洞

比如IIS5.X/6:

  • 在网站下建立文件夹的名字为.asp、.asa的文件夹,其目录内的任何扩展名的文件都被 IIs当作asp文件来解析并执行
  • 分号后面的不被解析,也就是说, cracer.asp;.jpg

apache解析漏洞:apache是从左到右开始判断解析,如果为不可识别解析,就再往左判断

修复建议

升级中间件版本,即使打好补丁

文件下载漏洞

程序对可下载的文件没有做好限制,导致用户可以下载任意敏感文件

修复建议

过滤./使得用户在URL中不能回溯目录

严格判断用户输入的参数的格式

php.ini 配置 open_basedir 限定文件的访问范围

文件包含漏洞

产生原因

程序在引用文件时,当用户对引用的文件名可控,并且未做合理的过滤,到时用户可以包含任意文件,并且可以利用伪协议达到类似代码执行的效果

文件包含函数
include()
require()
include_once()
require_once()
常见利用方法

本地文件包含、远程文件包含、包含日志getshell、包含环境变量getshell、利用伪协议

修复建议

严格判断被包含的文件是否用户可控

做好文件包含验证

限制路径

设置好 allow_url_include 为off

未授权访问

程序未做好访问控制,导致用户可以访问到一些敏感页面

Active MQ 未授权访问
Atlassian Crowd 未授权访问
CouchDB 未授权访问
Docker 未授权访问
Dubbo 未授权访问
Druid 未授权访问
Elasticsearch 未授权访问
FTP 未授权访问
HadoopYARN 未授权访问
JBoss 未授权访问
Jenkins 未授权访问
Jupyter Notebook 未授权访问
Kibana 未授权访问
Kubernetes Api Server 未授权
LDAP 未授权访问
MongoDB 未授权访问
Memcached 未授权访问
NFS 未授权访问
Rsync 未授权访问
Redis 未授权访问
RabbitMQ 未授权访问
Solr 未授权访问
SpringBoot Actuator 未授权访问
Spark 未授权访问
VNC 未授权访问
Weblogic 未授权访问
ZooKeeper 未授权访问
Zabbix 未授权访问
修复建议

做好访问控制权限

信息泄露

程序未对权限做好控制,或者将敏感文件放在用户可以看到的地方,可能导致敏感信息泄露甚至网站源码的泄露

修复建议

做好敏感文件的存放,做好访问控制权限

目录遍历

后台对用户传来的值没有做好验证,导致用户可以传来./等数据,然后把上机目录遍历出来

修复建议

严格限制用户传入的数据

配置web访问权限

对用户传进来的文件统一编码

XSS

允许插入恶意代码到页面中,提供给其他用户访问产生跨站脚本攻击,分为反射性、存储型、dom型

漏洞危害

盗取账户信息

还行恶意命令

网站挂马

钓鱼

修复建议

对输入进行过滤,对输出进行编码

使用html实体化

CSRF

挟持用户在当前已登录的页面上执行非本意的操作

利用方法

用户打开浏览器访问受信任的网站A,在浏览器内保存了一个cookie,然后用户打开了一个可以的网站B,网站B中存在恶意代码,要求用户去访问网站A并执行恶意操作,因为当前浏览器是存在网站A的cookie的,所以说会执行成功

修复建议

增加token验证

有安全的会话管理

有安全的访问控制管理

增加验证码

SSRF

利用方法

支持多种协议,可以使用file协议读取文件,可以探测内网主机存活率以及开放端口状态

修复建议

禁止跳转

过滤返回的信息

禁止一些用不到的协议

限制请求的端口

设置URL白名单

JSONP

jsonp是json的一种使用方式,可以跨域读取资料,可以让网页从别的域名那里获取资料

利用原理

用户访问一个网站A,该网站存在JSONP接口,当用户访问该JSONP接口的时候,会返回用户信息,如果该接口对来源验证有错误,则用户访问网站B的时候,网站B可以利用JSONP漏洞来获取用户信息

利用方法

用户访问网站A时,身份认证还未失效,攻击者恶意构造好代码,就会获取JSON数据,然后把数据发送给攻击者

修复建议

json正确的http头输出尽量避免跨域的数据传输,对于同域的数据传输使用xmlhttp的方式

对跨域的数据传输必须做好验证

CORS跨域资源共享漏洞

查看页面,若 Access-Control-Allow-Origin 设置为*,则所有域名都可以请求本站资源

修复建议

不要把 Access-Control-Allow-Origin 设置为*,严格校验来自请求数据汇总的Origin的值

避免使用 Access-Control-Allow-Credentials: true

减少 Access-Control- Allow-Methods 所允许的方法

逻辑漏洞

越权、密码找回、任意金额修改

修复建议

做好身份验证,对加密算法一定要是强加密,验证用户身份一定要在后端实现

URL重定向

程序在跳转的时候,对客户端传来的重定向地址没有做好校验,导致浏览器跳转到恶意页面,会被拿来钓鱼

修复建议

限制referer

加入token机制

条件竞争漏洞

对于并发的编程,像php、java、操作系统中,运行的结果依赖于不可控的先后顺序,导致一个线程打开后,被别的线程修改了

像PHP里面可以使用条件竞争绕过文件上传防护,在java中多线程操作的时候,导致恶意结果,在操作系统中导致权限提升

修复建议

设置锁

对于数据做好充分验证