0%

本文首次发表在慕测头条公众号,这里只作归档用

背景意义

随着人们对软件安全的不断重视,静态安全扫描系统被部署于开发流程。相对于其他传统分析方法,污点分析技术由于具有较高的可解释性和准确性,目前作为挖掘 Web 漏洞的常用技术,广泛应用于开源和商用扫描器中。

然而,污点分析方法存在种种不足。首先,污点分析无法处理容器类型,静态污点分析只能将容器变量(如Map、List变量)的传播规则设为传播/不传播污点,造成过污染/欠污染;其次,污点分析无法处理控制流,污点分析并不能识别用于检查数据是否合法的分支语句,导致误报;最后,污点分析无法处理特殊的传播条件,如SSRF漏洞要求攻击者能操纵域名,若污点拼接在URL参数部分,则代码不存在漏洞,而污点分析仍会报告漏洞。为解决这些问题,目前安全工程师只有手动设计精巧的规则,可即使这样仍会产生大量误报甚至漏报。

阅读全文 »

写毕设调查背景知识时做的,在t00ls90sec发过帖子,这里做归档用。

词法分析技术

词法分析技术是最简单的一类漏洞挖掘技术,其主要思想是将代码文本与归纳好的缺陷模式进行匹配,以此发现漏洞。由于其不深入分析程序结构和语义,往往只能挖掘较为简单的一类漏洞,并且存在相当高的误报率,在实际场景下应用较少,但由于其思想简单,适用性很广,目前也还存在类似工具,如:MobSFCobra

阅读全文 »

Python 开发扫描器时往往会调用其他第三方工具,但是通过 os.system()或者其他命令中是会有这样或那样的坑或不足,本文对这些问题进行总结并提出解决方案,并在结尾给出了一个封装好的类,能较为完美的解决Python调用第三方命令的问题。

需求

  1. 首先,我可以调用任意命令,并且可以在命令执行时向输入通道(stdin)传更多输入,同时Python能实时获取输出通道(stdout)和错误通道(stderr)获程序输出,注意是获取输出,而不是单纯的将输出重定向到屏幕或文件中;
  2. 我可以通过返回值,或者程序输出判断第三方程序执行是否出错,如果出错抛出异常或者进行异常处理;
  3. 执行命令是最好可以设置超时时间,防止子命令假死而影响主程序;
  4. 这段调用程序应该是跨平台的,毕竟Python本身就是跨平台语言。
阅读全文 »

原理

触发入口

登录点击记住密码时,有rememberMe,下次登陆时会带rememberMe的cookie,rememberMe存在反序列化问题

1563415886850

序列化入口

调试得到序列化入口和解密方法:

1
2
3
4
org.apache.shiro.mgt.AbstractRememberMeManager#rememberIdentity(AuthenticationToken, AuthenticationInfo):321
org.apache.shiro.mgt.AbstractRememberMeManager#rememberIdentity(Subject, PrincipalCollection)
org.apache.shiro.mgt.AbstractRememberMeManager#convertPrincipalsToBytes(L360:序列化)
org.apache.shiro.mgt.AbstractRememberMeManager#encrypt(加密方法)
阅读全文 »

原理

shiro1.2.5后秘钥不再硬编码,但是采用CBC加密会产生padding oracle攻击,又因为java序列化结构体后可以加垃圾字符,所以攻击能够成功

解密时的调用链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
org.apache.shiro.mgt.AbstractRememberMeManager#convertBytesToPrincipals // 不论哪个异常都会返回null,上层302跳转
org.apache.shiro.mgt.AbstractRememberMeManager#decrypt
org.apache.shiro.crypto.JcaCipherService#decrypt(byte[], byte[])
org.apache.shiro.crypto.JcaCipherService#decrypt(byte[] encrypted, byte[] key, byte[] iv)
org.apache.shiro.crypto.JcaCipherService#crypt(byte[] encrypted, byte[] key, byte[] iv, int MODE):
org.apache.shiro.crypto.JcaCipherService#crypt(javax.crypto.Cipher, byte[] encrypted):459 //throw Unable to execute 'doFinal' with cipher instance
javax.crypto.Cipher#doFinal(byte[] encrypted) //this=(key+iv+mode) // jce.jar包 调试直接在这下断点
com.sun.crypto.provider.AESCipher#engineDoFinal(byte[] encrypted, startIdx, len)
com.sun.crypto.provider.CipherCore#doFinal(byte[] encrypted, startIdx, len)
com.sun.crypto.provider.CipherCore#fillOutputBuffer(encrypted, startIdx, iv, startIdx, len, encrypted)
com.sun.crypto.provider.CipherCore#unpad(len, decrypted)
com.sun.crypto.provider.PKCS5Padding#unpad(decrypted, startIdx, len) // throw BadPaddingException
org.apache.shiro.mgt.AbstractRememberMeManager#deserialize(serialized)
org.apache.shiro.io.DefaultSerializer#deserialize(serialized) // invalid stream header
阅读全文 »

Clair简介

clair是CoreOS公司开源的一套针对容器安全性检测工具,主要用于发掘容器中使用的组件是否存在安全性问题。

GitHub项目地址: https://github.com/quay/clair

Clair Framework

术语

  • Ancestry——表示容器
  • Feature——容器中任何具有脆弱性的实体,如软件包和文件
  • Feature Namespace——Feature所在的上下文,如操作系统和编程语言
  • Vulnerability Source——Clair中用来跟踪上有漏洞数据库(如CVE)的组件
  • Vulnerability Metadata Source——漏洞元数据,用来关联上游漏洞数据和Clair数据库
阅读全文 »

环境搭建

下载受影响版本的solr,这里依然选择v8.1.0,这里注意除了添加solr的jar还需要添加velocity的(源码的化可以让IDEA从maven上下源码):

image-20191124205421987

同样的方法启动项目

1
2
3
4
[email protected]:/mnt/d/Store/document/all_my_work/solr/solr-8.1.0
$ cd server/ #一定要在server下运行
[email protected]:/mnt/d/Store/document/all_my_work/solr/solr-8.1.0/server
$ java "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9000" -Dsolr.solr.home="../example/example-DIH/solr/" -jar start.jar --module=http
阅读全文 »

RNN

普通神经网络不能考虑之前一个单词对下一个单词的作用,即上下文,因此引入RNN。

RNN在中间层加入了memory,在每次传播后,将中间层输出存储到memory,在下一次传播时,将结果取出与原输入一起作为输入,之后再传出到下一层。

以下图为例,为了方便演示,将激活函数全部变为线性,并且权重设为1,假设一开始,输入矩阵$[1,1]^T$,那么会输出$[4,4]^T$,同时两个记忆体由0变为2(因为隐藏层的输出是2)

阅读全文 »

基本介绍

半监督(Semi-supervised Learning)即输入小部分已标记数据和大部分未标记数据进行学习,以提升准确率的一类机器学习方法。

有两种用法:

  • Transductive learning:无标记数据就是测试集本身
  • Inductive learning:无标记数据不是测试集
阅读全文 »