Skip to content

Commit

Permalink
finebi and security skill.
Browse files Browse the repository at this point in the history
  • Loading branch information
jsdu committed Nov 30, 2021
1 parent 5d8f243 commit 616401e
Show file tree
Hide file tree
Showing 19 changed files with 1,210 additions and 9 deletions.
Binary file modified .metals/metals.h2.db
Binary file not shown.
6 changes: 3 additions & 3 deletions .metals/metals.lock.db
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#FileLock
#Fri Oct 15 09:41:27 CST 2021
#Wed Nov 17 20:01:02 CST 2021
hostName=localhost
id=17c819c767f7ea9b7b670bdd15b23b498648f26439f
id=17d2dc59282a6101e0bc235a0fa76a0f3cd6e847cc2
method=file
server=localhost\:59565
server=localhost\:50060
41 changes: 41 additions & 0 deletions .metals/metals.log
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,44 @@
��Ϣ: Unsupported notification method: $/setTrace
ʮ�� 21, 2021 10:32:51 ���� org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint notify
��Ϣ: Unsupported notification method: $/setTrace
2021.11.17 20:00:56 INFO Started: Metals version 0.10.4 in workspace 'D:\projects\funny\JsDu.io' for client Visual Studio Code 1.62.0.
2021.11.17 20:01:03 INFO time: initialize in 6.53s
2021.11.17 20:01:03 WARN Build server is not auto-connectable.
2021.11.17 20:01:03 WARN no build tool detected in workspace 'D:\projects\funny\JsDu.io'. The most common cause for this problem is that the editor was opened in the wrong working directory, for example if you use sbt then the workspace directory should contain build.sbt. 
ʮһ�� 18, 2021 11:03:14 ���� org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint notify
��Ϣ: Unsupported notification method: $/setTrace
ʮһ�� 18, 2021 4:25:49 ���� org.eclipse.lsp4j.jsonrpc.RemoteEndpoint handleNotification
����: Notification threw an exception: {
"jsonrpc": "2.0",
"method": "metals/didFocusTextDocument",
"params": [
"untitled:Untitled-1"
]
}
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.lambda$null$0(GenericEndpoint.java:67)
at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.notify(GenericEndpoint.java:152)
at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.handleNotification(RemoteEndpoint.java:220)
at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.consume(RemoteEndpoint.java:187)
at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.handleMessage(StreamMessageProducer.java:194)
at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:94)
at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:113)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.lambda$null$0(GenericEndpoint.java:65)
... 11 more
Caused by: java.nio.file.FileSystemNotFoundException: Provider "untitled" not installed
at java.nio.file.Paths.get(Paths.java:147)
at scala.meta.internal.metals.MetalsEnrichments$XtensionString.toAbsolutePath(MetalsEnrichments.scala:478)
at scala.meta.internal.metals.MetalsEnrichments$XtensionString.toAbsolutePath(MetalsEnrichments.scala:475)
at scala.meta.internal.metals.MetalsLanguageServer.didFocus(MetalsLanguageServer.scala:1010)
... 16 more

64 changes: 63 additions & 1 deletion 大数据/spark/spark原理.md
Original file line number Diff line number Diff line change
Expand Up @@ -205,4 +205,66 @@ https://www.cnblogs.com/gnivor/p/5157516.html
https://tech.shmily-qjj.top/38328/


https://blog.csdn.net/Young2018/article/details/108856622
https://blog.csdn.net/Young2018/article/details/108856622


# spark dataset

数据集是域特定对象的强类型集合,可以使用函数或关系操作并行转换这些对象。每个 Dataset 也有一个称为 a 的无类型视图DataFrame,它是一个 Dataset of Row。
数据集上可用的操作分为转换和操作。转换是产生新数据集的那些,而动作是触发计算和返回结果的那些。示例转换包括映射、过滤器、选择和聚合 ( groupBy)。示例操作计数、显示或将数据写入文件系统。

数据集是“惰性的”,即计算仅在调用操作时触发。在内部,数据集表示描述生成数据所需的计算的逻辑计划。当一个动作被调用时,Spark 的查询优化器会优化逻辑计划并生成一个物理计划,以便以并行和分布式的方式高效执行。要探索逻辑计划以及优化的物理计划,请使用该explain功能。

为了有效地支持特定于域的对象,Encoder需要一个。编码器将域特定类型映射T到 Spark 的内部类型系统。例如,给定一个Person 具有name(string) 和age(int)两个字段的类,编码器用于告诉 Spark 在运行时生成代码以将Person对象序列化为二进制结构。这种二进制结构通常具有低得多的内存占用,并且针对数据处理的效率进行了优化(例如,以列格式)。要了解数据的内部二进制表示,请使用该 schema函数。

static Dataset<Row> ofRows(SparkSession sparkSession, org.apache.spark.sql.catalyst.plans.logical.LogicalPlan logicalPlan)
static Dataset<Row> ofRows(SparkSession sparkSession, org.apache.spark.sql.catalyst.plans.logical.LogicalPlan logicalPlan, org.apache.spark.sql.catalyst.QueryPlanningTracker tracker)

ofRows 的一种变体,它允许传入跟踪器,以便我们可以跟踪查询解析时间。

https://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/Dataset.html


# spark 之RPC框架

在Spark中很多地方都涉及网络通信,比如 Spark各个组件间的消息互通、用户文件与Jar包的上传、节点间的Shuffle过程、Block数据的复制与备份等。Spark1.6之前,Spark的Rpc是基于Akka来实现的,Akka是一个基于scala语言的异步的消息框架,但由于Akka不适合大文件的传输,在Spark1.6之前RPC通过Akka来实现,而大文件是基于Jetty实现的HttpFileServer。

在Spark2.0.0中也移除了Jetty,在Spark2.0.0版本借鉴了Akka的设计,重构了基于Netty的Rpc框架体系,其中Rpc和大文件传输都是使用Netty。


下面介绍一些重要概念:

- RpcEnv:RpcEnv 抽象类表示一个 RPC Environment,管理着整个RpcEndpoint的生命周期,每个 Rpc 端点运行时依赖的环境称之为 RpcEnv。
- NettyRpcEnv: RpcEnv的唯一实现类
- RpcEndpoint:RPC 端点 ,Spark 将每个通信实体都都称之一个Rpc端点,且都实现 RpcEndpoint 接口,比如DriverEndpoint,MasterEndpont,内部根据不同端点的需求,设计不同的消息和不同的业务处理。
- Dispatcher:消息分发器(来自netty的概念),负责将 RpcMessage 分发至对应的 RpcEndpoint。Dispatcher 中包含一个 MessageLoop,它读取 LinkedBlockingQueue 中的投递 RpcMessage,根据客户端指定的 Endpoint 标识,找到 Endpoint 的 Inbox,然后投递进去,由于是阻塞队列,当没有消息的时候自然阻塞,一旦有消息,就开始工作。Dispatcher 的 ThreadPool 负责消费这些 Message。
- EndpointData:每个endpoint都有一个对应的EndpointData,EndpointData内部包含了RpcEndpoint、NettyRpcEndpointRef信息,与一个Inbox,收信箱Inbox内部有一个InboxMessage链表,发送到该endpoint的消息,就是添加到该链表,同时将整个EndpointData添加Dispatcher到阻塞队列receivers中,由Dispatcher线程异步处理
- Inbox:一个本地端点对应一个收件箱,Inbox 里面有一个 InboxMessage 的链表,InboxMessage 有很多子类,可以是远程调用过来的 RpcMessage,可以是远程调用过来的 fire-and-forget 的单向消息 OneWayMessage,还可以是各种服务启动,链路建立断开等 Message,这些 Message 都会在 Inbox 内部的方法内做模式匹配,调用相应的 RpcEndpoint 的函数。
- RpcEndPointRef: RpcEndpointRef是一个对RpcEndpoint的远程引用对象,通过它可以向远程的RpcEndpoint端发送消息以进行通信。
- NettyRpcEndpointRef:RpcEndpointRef 的唯一实现类,RpcEndpointRef的NettyRpcEnv版本。此类的行为取决于它的创建位置。在“拥有”RpcEndpoint的节点上,它是RpcEndpointAddress实例的简单包装器。
- RpcEndpointAddress:主要包含了 RpcAddress (host和port) 和 rpc endpoint name的信息
- Outbox:一个远程端点对应一个发件箱,NettyRpcEnv 中包含一个 ConcurrentHashMap[RpcAddress, Outbox]。当消息放入 Outbox 后,紧接着将消息通过 TransportClient 发送出去。
- TransportContext:是一个创建TransportServer, TransportClientFactory,使用TransportChannelHandler建立netty channel pipeline的上下文,这也是它的三个主要功能。TransportClient 提供了两种通信协议:控制层面的RPC以及数据层面的 “chunk抓取”。用户通过构造方法传入的 rpcHandler 负责处理RPC 请求。并且 rpcHandler 负责设置流,这些流可以使用零拷贝IO以数据块的形式流式传输。TransportServer 和 TransportClientFactory 都为每一个channel创建一个 TransportChannelHandler对象。每一个TransportChannelHandler 包含一个 TransportClient,这使服务器进程能够在现有通道上将消息发送回客户端。
- TransportServer:TransportServer是RPC框架的服务端,可提供高效的、低级别的流服务。
- TransportServerBootstrap:定义了服务端引导程序的规范,服务端引导程序旨在当客户端与服务端建立连接之后,在服务端持有的客户端管道上执行的引导程序。用于初始化TransportServer
- TransportClientFactory:创建传输客户端(TransportClient)的传输客户端工厂类。
- TransportClient:RPC框架的客户端,用于获取预先协商好的流中的连续块。TransportClient旨在允许有效传输大量数据,这些数据将被拆分成几百KB到几MB的块。简言之,可以认为TransportClient就是Spark Rpc 最底层的基础客户端类。主要用于向server端发送rpc 请求和从server 端获取流的chunk块。
- TransportClientBootstrap:是在TransportClient上执行的客户端引导程序,主要对连接建立时进行一些初始化的准备(例如验证、加密)。TransportClientBootstrap所作的操作往往是昂贵的,好在建立的连接可以重用。用于初始化TransportClient
- TransportChannelHandler:传输层的handler,负责委托请求给TransportRequestHandler,委托响应给TransportResponseHandler。在传输层中创建的所有通道都是双向的。当客户端使用RequestMessage启动Netty通道(由服务器的RequestHandler处理)时,服务器将生成ResponseMessage(由客户端的ResponseHandler处理)。但是,服务器也会在同一个Channel上获取句柄,因此它可能会开始向客户端发送RequestMessages。这意味着客户端还需要一个RequestHandler,而Server需要一个ResponseHandler,用于客户端对服务器请求的响应。此类还处理来自io.netty.handler.timeout.IdleStateHandler的超时。如果存在未完成的提取或RPC请求但是至少在“requestTimeoutMs”上没有通道上的流量,我们认为连接超时。请注意,这是双工流量;如果客户端不断发送但是没有响应,我们将不会超时。
- 当TransportChannelHandler读取到的request是RequestMessage类型时,则将此消息的处理进一步交给TransportRequestHandler,当request是ResponseMessage时,则将此消息的处理进一步交给TransportResponseHandler。
- TransportResponseHandler:用于处理服务端的响应,并且对发出请求的客户端进行响应的处理程序。
- TransportRequestHandler:用于处理客户端的请求并在写完块数据后返回的处理程序。
- MessageEncoder:在将消息放入管道前,先对消息内容进行编码,防止管道另一端读取时丢包和解析错误。
- MessageDecoder:对从管道中读取的ByteBuf进行解析,防止丢包和解析错误;
- TransportFrameDecoder:对从管道中读取的ByteBuf按照数据帧进行解析;
- StreamManager:处理ChunkFetchRequest和StreamRequest请求
- RpcHandler:处理RpcRequest和OneWayMessage请求
- Message:Message是消息的抽象接口,消息实现类都直接或间接的实现了RequestMessage或ResponseMessage接口。


我们首先要知道 Spark 的心跳有什么用。心跳是分布式技术的基础,我们知道在 Spark 中,是有一个 Master 和众多的 Worker,那么 Master 怎么知道每个 Worker 的情况呢,这就需要借助心跳机制了。心跳除了传输信息,另一个主要的作用就是 Worker 告诉 Master 它还活着,当心跳停止时,方便 Master 进行一些容错操作,比如数据转移备份等等。


https://zhuanlan.zhihu.com/p/28893155

https://zhuanlan.zhihu.com/p/55127453
19 changes: 19 additions & 0 deletions 大数据/数据仓库/SCD缓慢变化维.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# SCD缓慢变化维

因为事实表存储的是维度表的代理键而非自然键,因此在历史数据的查询中会以历史的维度值进行计算。同时在维度值更新后的相关数据自然使用的是新的代理键。完美的解决了大部分缓慢变化维情况。

自增ID一般是代理键,标识记录的唯一性;
记录实体的标识一般是自然键, 标识记录实体的唯一性;


https://www.sqlshack.com/implementing-slowly-changing-dimensions-scds-in-data-warehouses/

https://juejin.cn/post/6844904137419669517

https://zhuanlan.zhihu.com/p/336501748

https://help.aliyun.com/document_detail/295435.html

# 缓慢变化维数据如何更新

https://blog.csdn.net/u014337370/article/details/110677017
9 changes: 9 additions & 0 deletions 安全技能树/安全信息资源/博客资源.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,12 @@ http://www.xdef.org.cn/2012/speech.html
# 安恒学习X平台

https://www.linkedbyx.com/studyCenter/types

https://ti.dbappsecurity.com.cn/

https://developer.tenable.com/reference


https://www.zhihu.com/question/360317437

https://www.freebuf.com/articles/neopoints/245534.html
5 changes: 4 additions & 1 deletion 安全技能树/安全信息资源/黑客工具资源.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@ adversary emulation, 模拟攻击提供了一种用来测试网络在应对高
[CTF 夺旗赛资源](https://ctftime.org/)


https://www.freebuf.com/sectool/94777.htmlGithub:python
https://www.freebuf.com/sectool/94777.htmlGithub:python


https://www.wangan.com/docs/281
126 changes: 126 additions & 0 deletions 安全技能树/渗透测试/xray.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# xray


xray --url http://example.com/ --json-output report.json
xray --url http://example.com/ --html-output front-vuln.html
xray --url http://example.com/ --json-output report.json

https://github.com/chaitin/xray/releases/tag/1.8.2

https://zhuanlan.zhihu.com/p/78132359

https://www.cnblogs.com/cheuhxg/p/14649555.html

https://xray.cool/

https://blog.xray.cool/h

# 登录页面渗透测试

https://cloud.tencent.com/developer/article/1507905

https://www.cnblogs.com/backlion/p/14288456.html

# 漏洞样例

https://docs.xray.cool/assets/report_example.html

# poc编辑示例

为了帮助大家更好的理解 poc 中各部分的作用,此处先介绍一下一个 yaml poc 的执行过程。

在一个 yaml poc 从文件加载到 go 的某个结构后,会首先对表达式进行预编译和静态类型检查,这一过程主要作用于 yaml 中的 set 和 expression 部分,这两部分是 yaml poc 的关键,主要用到了 CEL 表达式。

pocassist 借鉴了 xray 的 poc 框架 phantasm ,通过 CEL 表达式定义 poc。

https://pocassist.jweny.top/pocedit/

https://github.com/jweny/pocassist

https://github.com/knownsec/404StarLink#community


https://docs.xray.cool/#/guide/high_quality_poc


https://zhuanlan.zhihu.com/p/55204575

# xray 内置的poc

```yml
name: poc-yaml-laravel-improper-webdir
manual: true
transport: http
rules:
r0:
request:
cache: true
method: GET
path: /storage/logs/laravel.log
follow_redirects: false
expression: response.status == 200 && (response.content_type.contains("plain") || response.content_type.contains("octet-stream")) && (response.body.bcontains(b"vendor\\laravel\\framework") || response.body.bcontains(b"vendor/laravel/framework")) && (response.body.bcontains(b"stacktrace") || response.body.bcontains(b"Stack trace"))
expression: r0()
detail:
author: Dem0ns (https://github.com/dem0ns)
links:
- https://github.com/dem0ns/improper


name: poc-yaml-laravel-debug-info-leak
manual: true
transport: http
rules:
r0:
request:
cache: true
method: POST
path: /
follow_redirects: false
expression: response.status == 405 && response.body.bcontains(b"MethodNotAllowedHttpException") && response.body.bcontains(b"Environment &amp; details") && (response.body.bcontains(b"vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RouteCollection.php") || response.body.bcontains(b"vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php"))
expression: r0()
detail:
author: Dem0ns (https://github.com/dem0ns)
links:
- https://github.com/dem0ns/improper/tree/master/laravel/5_debug
```
整个POC是一个键值对,其包含3个键:
- name: string
- rules: []Rule
- detail: map[string]string
name是POC的名字,我们使用一个英文字母、数字和短横线进行表示,如poc-yaml-thinkphp523-rce。
rules是一个由规则(Rule)组成的列表,后面会描述如何编写Rule,并将其组成rules。
detail是一个键值对,内部存储需要返回给xray引擎的内容,如果无需返回内容,可以忽略。
如果说Rule是一个POC的灵魂,那么expression表达式就是Rule的灵魂。
https://github.com/chaitin/xray/tree/master/pocs
https://github.com/chaitin/xray/blob/master/pocs/laravel-improper-webdir.yml
https://zhuanlan.zhihu.com/p/78334648
https://github.com/google/cel-spec
https://forum.butian.net/share/160
# CEL表达式
spring使用SpEL表达式,struts2使用OGNL表达式,xray使用了编译性语言Golang,所以为了实现动态执行一些规则,我们使用了Common Expression Language (CEL)表达式。
https://github.com/google/cel-spec
https://phith0n.github.io/xray-poc-generation/
https://www.exploit-db.com/
# nuclei
https://github.com/projectdiscovery/nuclei
3 changes: 3 additions & 0 deletions 安全技能树/渗透测试/代码审计.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 代码自动化扫描系统建设

https://www.freebuf.com/sectool/182779.html
7 changes: 6 additions & 1 deletion 安全技能树/渗透测试/情报搜集.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,9 @@ run
mixin混入类


Kimest 和 airodump-ng
Kimest 和 airodump-ng


# 个人渗透技巧

https://xlmy.net/2020/08/06/%E4%B8%AA%E4%BA%BA%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7%E6%B1%87%E6%80%BB%E7%AC%94%E8%AE%B0/
Loading

0 comments on commit 616401e

Please sign in to comment.