0%

shiro及漏洞复现

首先了解漏洞原理及利用方式,漏洞CVE为

CVE-2016-4437

其次,在shiro内的序列化处理中,将rememberMe字段的数据未做处理校验,开始直接存储和反序列化操作。导致RCE及任意代码执行。

准备:使用vulhub_app的shiro的docker环境,如下:

环境

登录时的数据包及逻辑如下

登录数据包

对于此字段rememberMe的反序列化利用链路如下:

ysoserial将命令进行序列化,然后将此命令所在的机器使用JRMP来搭建远程加载使用类。将远程利用类执行命令进行AES及Base64加密的方式将命令加载生成Cookie,替换原有的rememberMe的cookie进行RCE。

复现过程:

复现

复现2

复现3

Tips:from Crypto.Cipher import AES导入报错时:pip install crypto pycrypto pycryptodome

仍报错时可进入到pip的site-package内将crypto重命名为Crypto即可。

EleasticSearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

在ElasticSearch中有四个相关的概念:

  1. 索引 Index

  2. 类型 Type(7.X版本更新后被弃用)

  3. 文档 Documents

  4. 字段 Fields

我们可以将其类比到关系型数据库中,索引就是一个数据库,类型就是一张数据表,而文档就是数据表中的一行,字段就是数据表中的一列,如下图:

title

实际使用相关

0x00创建

创建索引使用PUT方式提交,路径为索引名称(名称必须为小写)

index

创建Documents使用post方法在索引后连接”_doc”或”_create”来创建(后接字符为指定id,其中_create必须后接id)

doc

0x01查询

select

select2

0x02更新

对于全量更新,可使用PUT或POST,但是局部更新必须使用POST(返回的幂等性原理)

update

update2

删除将请求方法改为DELETE即可。

Nginx配置缓存优先级

nginx的location配置

nginx location语法规则:location [=||*|^~] /uri/ { … }
nginx的location匹配的变量是$uri

符号 说明
= 表示精确匹配
^~ 表示uri以指定字符或字符串开头
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
/ 通用匹配,任何请求都会匹配到

规则优先级

1
=  高于  ^~  高于  ~* 等于 ~  高于  /

规则示例

1
2
3
4
location = "/12.jpg" { ... }
如:
[www.aminglinux.com/12.jpg](http://www.aminglinux.com/12.jpg) 匹配
[www.aminglinux.com/abc/12.jpg](http://www.aminglinux.com/abc/12.jpg) 不匹配
1
2
3
4
location ^~ "/abc/" { ... }
如:
[www.aminglinux.com/abc/123.html](http://www.aminglinux.com/abc/123.html) 匹配
[www.aminglinux.com/a/abc/123.jpg](http://www.aminglinux.com/a/abc/123.jpg) 不匹配
1
2
3
4
location ~ "png" { ... }
如:
[www.aminglinux.com/aaa/bbb/ccc/123.png](http://www.aminglinux.com/aaa/bbb/ccc/123.png) 匹配
[www.aminglinux.com/aaa/png/123.html](http://www.aminglinux.com/aaa/png/123.html) 匹配
1
2
3
4
location ~* "png" { ... }
如:
[www.aminglinux.com/aaa/bbb/ccc/123.PNG](http://www.aminglinux.com/aaa/bbb/ccc/123.PNG) 匹配
[www.aminglinux.com/aaa/png/123.html](http://www.aminglinux.com/aaa/png/123.html) 匹配
1
2
3
4
location /admin/ { ... }
如:
[www.aminglinux.com/admin/aaa/1.php](http://www.aminglinux.com/admin/aaa/1.php) 匹配
[www.aminglinux.com/123/admin/1.php](http://www.aminglinux.com/123/admin/1.php) 不匹配

小常识

1
2
3
有些资料上介绍location支持不匹配 !~,
如: location !~ 'png'{ ... }
这是错误的,location不支持 !~
1
2
如果有这样的需求,可以通过if来实现,
如: if ($uri !~ 'png') { ... }
1
注意:location优先级小于if

nginx location优先级

1
location   /  优先级  比location ~ 要低,也就是说,如果一个请求(如,admin.php)同时满足两个location
1
2
location /admin.php
location ~ \.php admin.php
1
会选择下面的,下面的选择完成后,上面的不会进行选择
1
=  高于  ^~  高于  ~* 等于 ~  高于  /