ATT&CK(二)–针对容器的攻防矩阵

容器,是一种轻量型的虚拟化技术,用于进行云应用程序快速部署。也就是虚拟机,把云应用当镜像一样丢进去运行,就跟玩kali那样。

kubernetes是最常见的容器编排工具,而docker是容器,它们算得上是云技术的基础设施。

ATT&CK针对容器这一部分提到,攻击者主要是通过让受害者下载并且运行恶意镜像,导致受害者主机执行了恶意代码。
针对容器的技术:
①执行命令或进程
②植入恶意镜像实现持久化
③通过容器逃逸实现权限提升
④绕过或者禁用防御机制
⑤基于容器API获取权限访问
⑥容器资源访问

针对kubernetes的攻防矩阵:
①通过漏洞实现对kubernetes的初始访问
②恶意代码执行
③持久化访问权限
④获取更高级访问权限
⑤隐藏踪迹绕过检测
⑥获取各类凭证
⑦发现环境中的有用资源
⑧横向移动
⑨给容器化环境造成伤害

JAVAWeb的一些安全问题

[前菜]一个任意密码找回思路,当使用验证问题来验证用户,如“你最喜欢的动物”,如果逻辑是既验证键名也验证键值,可以通过构造一个不存在的键名进行绕过

JWT:JSON WEB TOKEN允许客户端指示身份,以便身份验证,类似cookie、session

JWT由三个部分组成:
header.payload.signature //如果出现在cookie一栏,可判断为JWT,在网上解密JWT可以恢复明文

针对JWT的攻击:
1.空加密算法
不生成密钥,前提是服务器支持不使用密钥:

把第一部分的base64解码,然后把alg字段设置为none,然后删除第三部分,但是保留点。

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0=.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzAxNzQ3NDQ3fQ==.

2.密钥爆破
可以用脚本跑字典爆破

3.组件安全

php一些安全缺陷

现在用php开发的网站数目量仍然庞大,从安全编程的角度,符合规范的php代码应该严谨。然而在很多时候由于开发人员编写代码没有很好的安全思路,会导致php代码产生一些容易被利用、被绕过的地方。

1.关于“=”、“==”、“===”的使用
=:赋值
==:比较(弱,比较前会把类型强制转换再比较)
===:比较(强,比较所有包括值和类型)

当有必要进行严格使用强类型比较的时候,开发人员却在编写代码时使用了若比较“==”,就算类型不正确也会被执行成功,因此产生风险。

用一个例子说明:
·某php代码为
if($_GET[‘name’]!=$_GET[‘password’])
{
if(MD5($_GET[‘name’])==MD5($_GET[‘password’]))
{
echo $flag;
}
echo ‘?’;
}

使用“==”,找到两个MD5值前两位0e相同的字符串输入,就可以满足明文不同但是MD5值相同,php会以为他们都是0。

if($_GET[‘name’]!=$_GET[‘password’])
{
if(MD5($_GET[‘name’])===MD5($_GET[‘password’]))
{
echo $flag;
}
echo ‘?’;
}

使用“===”,这时候会对比所有属性,那么可以使用数组的思路,因为数组不能进行MD5运算,结果会变成null,这样输入两个数组如name[]=1&password[]=2也实现了明文不同但是MD5相同

【危害】如果后台验证存在类似对比不当缺陷,会有安全风险

2.php使用intval()函数过滤sql
intval是用来做进制转换的

3.strpos()函数,判断第一次出现的位置
可以使用换行进行绕过,也就是前面加上“%0a”

4.in_array()d函数,从数组中判断是否含有目标字符
注意到这个函数有三个参数,第三个参数应该被设置为true,否则相当于使用“==”不会检测类型,
存在绕过的问题
in_array($x1,$x2,strict:true)

5.preg_match()函数,它只能处理字符串。那么如果传数组进去就会报错

6.str_replace()函数,用来过滤sql的
双写过滤词就可以绕过,比如过滤apple,双写之后就是apappleple

如果使用这个函数不当,极有可能产生任意文件读取,因为过滤能被绕过。比如过滤“../”、“./”就可以使用双写等方式绕过,就可以查看任意路径

web漏洞-XXE漏洞

XXE漏洞:XML外部实体注入。

XML是用来标记电子文件使其具有结构性的标记语言,允许用户自定义标记语言。
XML文档结构:
·XML声明
·DTD:文档类型定义
·文档元素

在XML代码中如果没有限制XML引入外部实体,那么当创建一个包含外部实体的XML时,外部实体的内容就会被执行。

【修复】:
·禁止使用外部实体
·过滤用户提交的XML数据

web漏洞-SSRF漏洞

既然学习了内网安全,我想在这里谈一下针对内网的SSRF漏洞。SSRF服务端请求伪造是由攻击者构造请求,由服务端发起请求的漏洞。它的危害在于能影响内网内的其他计算机。

一、形成原理
被攻击的服务器能从其他服务器获取数据,但是并没有对目标地址进行过滤与限制

二、攻击方式
·对内网进行端口扫描
·攻击内网的应用程序
·对内网web应用进行指纹识别,识别出企业内部资产信息
·利用file协议读取本地文件

三、防范
·限制请求的端口只能是web端口,只允许访问http和https的请求
·限制不能访问的内网ip
·屏蔽返回的详细信息

ASPX(.NET)的安全问题

在.net开发时,一些系统的bin目录会有很多dll文件,这些dll文件相当于java中的jar包,核心代码被封装成dll中,实现调用安全。

【工具】ILSpy 反编译工具

所以不论是对dll还是jar,经常需要使用反编译。目前.net和php应用的数量相似。

与ASP相似的,我们需要学会判断.net的特征,访问后缀ASPX文件时发现代码和实现的功能不相符,可以判断很有可能引用了其他文件,可能会包含dll中的代码。在ASPX文件中根据引用的名称,找到对应的dll文件再反编译,找到核心代码。【找不到的时候看看还包含了哪些文件,也看看那些文件的代码有没有实现核心功能的】

.net有一个特性,容易造成信息泄露,因为是微软用的框架,用到IIS,跟上一篇文章(asp)提到的安全问题有相关性。

例如,在.net的web.config配置中如果customerror设置为off,会暴露出敏感信息,还可能泄露源码

再例如,不论是白盒还是黑盒,容易出现未授权访问的安全问题,原因是:跟本身特性有关,该验证的地方没有进行验证。常见是登录的未授权访问,下说一下原理:
验证也就是判断用户身份,后台本身存在多个功能页面,针对这些功能页面的验证我们可以
①在每个文件里添加判断代码
②创建一个文件专门用来判断,然后每个文件都包含调用它

那么我们找未授权的思路也可得出:
①找到不含验证代码的文件
②看验证代码文件有无绕过的可能

找到验证代码:
看验证代码的验证方式,迪总的实验中,验证代码是判断用户id<=0的话弹出登录页面,尝试让id>0绕过,这里回忆一下php的cookie的超级变量$_COOKIE,它接受cookie中的信息,迪总抓包,加上cookie:userinfo=userid=1,然后发送数据包,绕过了登陆界面进入了后台。
再者,找到了验证代码可以使用上述的思路,去找不包含包含该代码的功能页。迪哥的操作中找到了某个功能页没有包含验证代码,直接访问发现不需要登陆验证。