From 616401e0d5ee8b675894c3dd69a8e9d943beeb98 Mon Sep 17 00:00:00 2001 From: jsdu Date: Tue, 30 Nov 2021 10:32:44 +0800 Subject: [PATCH] finebi and security skill. --- .metals/metals.h2.db | Bin 5378048 -> 5378048 bytes .metals/metals.lock.db | 6 +- .metals/metals.log | 41 ++ .../spark/spark\345\216\237\347\220\206.md" | 64 ++- ...42\345\217\230\345\214\226\347\273\264.md" | 19 + ...32\345\256\242\350\265\204\346\272\220.md" | 9 + ...45\345\205\267\350\265\204\346\272\220.md" | 5 +- .../xray.md" | 126 ++++++ ...43\347\240\201\345\256\241\350\256\241.md" | 3 + ...05\346\212\245\346\220\234\351\233\206.md" | 7 +- ...17\346\264\236\344\277\256\345\244\215.md" | 416 ++++++++++++++++++ ...53\346\217\217\345\267\245\345\205\267.md" | 195 ++++++++ .../SGX.md" | 4 + .../mysql/mysql.md" | 127 +++++- .../JAVA/java.md" | 10 +- ...50\345\267\245\345\205\267\345\272\223.md" | 7 +- .../Scala/scala.md" | 94 ++++ ...74\345\207\272\346\226\271\346\241\210.md" | 42 ++ ...\215\256\345\261\225\347\244\272finebi.md" | 44 ++ 19 files changed, 1210 insertions(+), 9 deletions(-) create mode 100644 "\345\244\247\346\225\260\346\215\256/\346\225\260\346\215\256\344\273\223\345\272\223/SCD\347\274\223\346\205\242\345\217\230\345\214\226\347\273\264.md" create mode 100644 "\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/xray.md" create mode 100644 "\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\344\273\243\347\240\201\345\256\241\350\256\241.md" create mode 100644 "\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\344\277\256\345\244\215.md" create mode 100644 "\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\346\211\253\346\217\217\345\267\245\345\205\267.md" create mode 100644 "\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\351\232\220\347\247\201\350\256\241\347\256\227/SGX.md" create mode 100644 "\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\257\274\345\205\245\345\257\274\345\207\272\346\226\271\346\241\210.md" create mode 100644 "\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\261\225\347\244\272finebi.md" diff --git a/.metals/metals.h2.db b/.metals/metals.h2.db index 9fb297b8a441c30ec19285f6c33e07013d04ff0f..df0fa2eb91e3bce758d908fa22319882d25cff98 100644 GIT binary patch delta 407 zcmZY5xiUim6b4|q#FF6N*mpq?vBe(yzHjj``V2GF8g<@5kyr2*9)Uuo;iGkCzB%*% zr#q$cYfz#bMR(cEL)G8pZmq&g6n%vM+WRP7iPEvJ_gJBljDqhlDAZR{`QS5r&IbwM zQJ|U{;?z>d@2!CZNg8RQnUIJSEws``I~{b=MK?Y4(nmi743cJuVMfR>${6EhnIOj` zQ%p0%EP3XbXMshQSZ0L+tE{ok2AgcL%?`WlvCjdA9C6GEr<`%l1(#fLP0=H7-rt^z F@gLc)VjBPe delta 407 zcmZY5xiUim6b4|qM2O|y*mtqTP7wRP?<8-O8HG`5)TtF3MP9*Mc!Vfa8a`TQ=9@GB zf4WmFy#+-|QIvRjeyIAJOu@>%M$t$3uf2=XE{ThA8+BgIrxXl?^__r)-cE z?ggr;AxgX?_+>-amLgoE2 GAO8UZYGU62 diff --git a/.metals/metals.lock.db b/.metals/metals.lock.db index b2ab360..2c4b3ca 100644 --- a/.metals/metals.lock.db +++ b/.metals/metals.lock.db @@ -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 diff --git a/.metals/metals.log b/.metals/metals.log index 0eaa4ae..237eb0c 100644 --- a/.metals/metals.log +++ b/.metals/metals.log @@ -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 + diff --git "a/\345\244\247\346\225\260\346\215\256/spark/spark\345\216\237\347\220\206.md" "b/\345\244\247\346\225\260\346\215\256/spark/spark\345\216\237\347\220\206.md" index a9450f3..84147a5 100644 --- "a/\345\244\247\346\225\260\346\215\256/spark/spark\345\216\237\347\220\206.md" +++ "b/\345\244\247\346\225\260\346\215\256/spark/spark\345\216\237\347\220\206.md" @@ -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 \ No newline at end of file +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 ofRows(SparkSession sparkSession, org.apache.spark.sql.catalyst.plans.logical.LogicalPlan logicalPlan) +static Dataset 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 \ No newline at end of file diff --git "a/\345\244\247\346\225\260\346\215\256/\346\225\260\346\215\256\344\273\223\345\272\223/SCD\347\274\223\346\205\242\345\217\230\345\214\226\347\273\264.md" "b/\345\244\247\346\225\260\346\215\256/\346\225\260\346\215\256\344\273\223\345\272\223/SCD\347\274\223\346\205\242\345\217\230\345\214\226\347\273\264.md" new file mode 100644 index 0000000..bcb8b7a --- /dev/null +++ "b/\345\244\247\346\225\260\346\215\256/\346\225\260\346\215\256\344\273\223\345\272\223/SCD\347\274\223\346\205\242\345\217\230\345\214\226\347\273\264.md" @@ -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 \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\345\215\232\345\256\242\350\265\204\346\272\220.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\345\215\232\345\256\242\350\265\204\346\272\220.md" index bf9ed1a..1618005 100644 --- "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\345\215\232\345\256\242\350\265\204\346\272\220.md" +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\345\215\232\345\256\242\350\265\204\346\272\220.md" @@ -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 \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\351\273\221\345\256\242\345\267\245\345\205\267\350\265\204\346\272\220.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\351\273\221\345\256\242\345\267\245\345\205\267\350\265\204\346\272\220.md" index c83ba7b..456f8d9 100644 --- "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\351\273\221\345\256\242\345\267\245\345\205\267\350\265\204\346\272\220.md" +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\345\256\211\345\205\250\344\277\241\346\201\257\350\265\204\346\272\220/\351\273\221\345\256\242\345\267\245\345\205\267\350\265\204\346\272\220.md" @@ -16,4 +16,7 @@ adversary emulation, 模拟攻击提供了一种用来测试网络在应对高 [CTF 夺旗赛资源](https://ctftime.org/) -https://www.freebuf.com/sectool/94777.htmlGithub:python \ No newline at end of file +https://www.freebuf.com/sectool/94777.htmlGithub:python + + +https://www.wangan.com/docs/281 \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/xray.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/xray.md" new file mode 100644 index 0000000..37d109e --- /dev/null +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/xray.md" @@ -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 & 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 \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\344\273\243\347\240\201\345\256\241\350\256\241.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\344\273\243\347\240\201\345\256\241\350\256\241.md" new file mode 100644 index 0000000..8581666 --- /dev/null +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\344\273\243\347\240\201\345\256\241\350\256\241.md" @@ -0,0 +1,3 @@ +# 代码自动化扫描系统建设 + +https://www.freebuf.com/sectool/182779.html \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\203\205\346\212\245\346\220\234\351\233\206.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\203\205\346\212\245\346\220\234\351\233\206.md" index c6c6eef..3c05888 100644 --- "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\203\205\346\212\245\346\220\234\351\233\206.md" +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\203\205\346\212\245\346\220\234\351\233\206.md" @@ -110,4 +110,9 @@ run mixin混入类 -Kimest 和 airodump-ng \ No newline at end of file +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/ \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\344\277\256\345\244\215.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\344\277\256\345\244\215.md" new file mode 100644 index 0000000..5e2ac06 --- /dev/null +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\344\277\256\345\244\215.md" @@ -0,0 +1,416 @@ +# 漏洞错误类型 + +CNNVD将信息安全漏洞划分为26种类型,分别是:配置错误、代码问题、资源管理错误、数字错误、信息泄露、竞争条件、输入验证、缓冲区错误、格式化字符串、跨站脚本、路径遍历、后置链接、SQL注入、注入、代码注入、命令注入、操作系统命令注入、安全特征问题、授权问题、信任管理、加密问题、未充分验证数据可靠性、跨站请求伪造、权限许可和访问控制、访问控制错误、资料不足。 + + +http://www.cnnvd.org.cn/web/wz/bzxqById.tag?id=3&mkid=3 + +https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html + +# web.config漏洞 + +```sh +total 40 +drwxr-xr-x 6 root root 4096 Mar 25 2021 ./ +drwxr-xr-x 13 root root 4096 May 13 2021 ../ +drwxr-xr-x 2 root root 4096 Dec 24 2020 css/ +-rw-r--r-- 1 root root 0 Nov 9 2020 favicon.ico +-rw-r--r-- 1 root root 603 Nov 9 2020 .htaccess +-rw-r--r-- 1 root root 1731 Nov 9 2020 index.php +drwxr-xr-x 2 root root 4096 Nov 4 13:52 js/ +-rw-r--r-- 1 root root 24 Nov 9 2020 robots.txt +drwxr-xr-x 6 root root 4096 Apr 9 2021 uploads/ +drwxr-xr-x 5 root root 4096 Nov 20 2020 vendor/ +-rw-r--r-- 1 root root 1194 Nov 9 2020 web.config + + +cat /opt/xxx/public/.htaccess + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + + +cat /opt/xxx/public/web.config + + + + + + + + + + + + + + + + + + + + + + + + +``` + +nginx 层做下控制 + +```sh +location ~* \.(config|ini|docx|txt|doc)$ { + # deny all; + return 404; +} +``` + +https://www.freebuf.com/articles/web/173831.html + +https://www.4hou.com/posts/LAlp + +https://learnku.com/laravel/t/50498 + +https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/web-config?view=aspnetcore-6.0 + + +## web.config上传技术研究 + +一种运行ASP的经典代码方法,即通过上传web.config文件来执行存储型XSS攻击。 + +https://xz.aliyun.com/t/6037 + +https://www.stackhawk.com/blog/laravel-xss/ + + +# TLS1.0 TLS1.1 漏洞修复 + +```sh +nmap --script ssl-enum-ciphers -p 443 host + +Starting Nmap 7.60 ( https://nmap.org ) at 2021-11-29 09:38 CST +Nmap scan report for xxx +Host is up (0.00043s latency). + +PORT STATE SERVICE +443/tcp open https +| ssl-enum-ciphers: +| TLSv1.0: +| ciphers: +| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A +| compressors: +| NULL +| cipher preference: server +| TLSv1.1: +| ciphers: +| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A +| compressors: +| NULL +| cipher preference: server +| TLSv1.2: +| ciphers: +| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A +| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A +| TLS_RSA_WITH_AES_256_CCM_8 (rsa 2048) - A +| TLS_RSA_WITH_AES_256_CCM (rsa 2048) - A +| TLS_RSA_WITH_ARIA_256_GCM_SHA384 (rsa 2048) - A +| TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A +| TLS_RSA_WITH_AES_128_CCM_8 (rsa 2048) - A +| TLS_RSA_WITH_AES_128_CCM (rsa 2048) - A +| TLS_RSA_WITH_ARIA_128_GCM_SHA256 (rsa 2048) - A +| TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 (rsa 2048) - A +| TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 (rsa 2048) - A +| TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A +| TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A +| compressors: +| NULL +| cipher preference: server +|_ least strength: A + +Nmap done: 1 IP address (1 host up) scanned in 1.03 seconds +``` + + +https://blog.csdn.net/qq_36292543/article/details/119672523 + +https://blog.csdn.net/qq_39517116/article/details/107504377 + +https://qingsay.com/nginx-disables-tls.html + + +# Application error message + +异常信息泄露(应用程序错误) + +django 处理暴露敏感信息错误 + +https://blog.csdn.net/weixin_39934520/article/details/107381920 + + +https://cloud.tencent.com/developer/article/1368971 + +https://www.leavesongs.com/PENETRATION/django-debug-page-xss.html + + +# Cross-site Scripting XSS攻击 + +Cross-site Scripting (XSS) refers to client-side code injection attack wherein an attacker can execute malicious scripts into a legitimate website or web application. XSS occurs when a web application makes use of unvalidated or unencoded user input within the output it generates. + +laravel 防止XSS攻击 + +```sh +composer require mews/purifier + +# config/app.php的providers中注册HTMLPurifier服务提供者: +'providers' => [ + Mews\Purifier\PurifierServiceProvider::class, +] + +# aliases中注册Purifier门面: + +'aliases' => [ + // ... + 'Purifier' => Mews\Purifier\Facades\Purifier::class, +] + +# 配置文件到config目录: +php artisan vendor:publish + + +#这个配置文件里注意下,'AutoFormat.AutoParagraph' => true, 选项改为false,不然会在过滤字段中增加

字符. 之后在需要做防xss攻击的地方直接调用它即可,比如: + +$form->saving(function (Form $form){ + $form->title = \Purifier::clean($form->title); + $form->uri = \Purifier::clean($form->uri ); +}); + + +In order to prevent XSS attacks, the default output content will be HTML escape, if you don't want to escape the output HTML, you can call the unescape method: + +$show->avatar()->unescape()->as(function ($avatar) { + + return ""; + +}); + +``` +避免xss攻击 + + +https://learnku.com/articles/32529 + +https://learnku.com/articles/20710 + +https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html + +https://www.xiaoxiaoguo.cn/php/laravel-admin-03.html + +https://laravel-admin.org/docs/en/model-show + +https://laravelacademy.org/post/9476 + +http://htmlpurifier.org/ + +https://learnku.com/articles/22588 + +# sql 注入 + +当你使用 Eloquent 查询时,如: + +User::where('name', $input_name)->first(); +Eloquent 内部使用的是 PDO 参数绑定,所以你的请求是安全的。虽然如此,在一些允许你使用原生 SQL 语句的地方,还是要特别小心,例如 whereRaw 或者 selectRaw 。如下: + +User::whereRaw("name = '$input_name'")->first(); +类似于 PDO 参数绑定进行传参,以避免 SQL 注入的风险: + +User::whereRaw("name = ?", [$input_name])->first(); + +https://learnku.com/laravel/wikis/16046 + +https://laravelacademy.org/post/9476 + +# 关闭laravel admin debug模式 +```sh +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=false +APP_URL=http://localhost + +LOG_CHANNEL=single +``` + +https://dev.to/sureshramani/how-to-enable-and-disable-debug-mode-in-laravel-1d5d + +https://github.com/z-song/laravel-admin/issues/3590 + + +# laravel telescope 关闭 + +http://xxx:8000/telescope/requests + +```sh +php artisan telescope:prune +php artisan telescope:clear + + +``` + +https://learnku.com/docs/laravel/5.8/telescope/3948 + +https://stackoverflow.com/questions/54335503/how-can-i-clean-laravel-telescope-debug-log + +https://www.oulub.com/Laravel/telescope-installation + +# URL 重定向攻击 +严格控制将要跳转的域名,如果某个业务事先已经确定将要跳转的网站,最稳妥的方式是将其直接编码在源代码中,通过URL中传入的参数来映射跳转网址。 + +严格验证跳转URL参数的有效性、合法性。 + +校验传入的URL参数是否为可信域名 + +很多软件,比如知乎,简书,如果跳转的是外部链接,会提示用户注意个人隐私安全。 + +这其实是一个不错的处理方式。 + +https://cloud.tencent.com/developer/article/1728654 + +https://houbb.github.io/2020/08/09/web-safe-06-redirect + +https://xz.aliyun.com/t/5189 + +# .htaccess文件攻击 + +在apache里,这个文件作为一个配置文件,可以用来控制所在目录的访问权限以及解析设置。即是,可以通过设置可以将该目录下的所有文件作为php文件来解析,即可绕过 + +方式 +利用某些写文件函数复写.htaccess文件,即可任意定义解析名单 +通过一个.htaccess 文件调用 php 的解析器去解析一个文件名中只要包含”haha”这个字符串的 +任意文件,所以无论文件名是什么样子,只要包含”haha”这个字符串,都可以被以 php 的方 +式来解析,是不是相当邪恶,一个自定义的.htaccess 文件就可以以各种各样的方式去绕过很 +多上传验证机制 +建立一个.htaccess文件内容如下 + + +SetHandler application/x-httpd-php + + +nginx 防护 +```sh +location ~ ^.*\.(htaccess|htpasswd|ini|php|sh)$ { +  deny all; +} + +location ~ ^.*\.(htaccess|htpasswd|ini|php|sh|config)$ { + deny all; + access_log off; + log_not_found off; +} + +location ~ /\.(?!well-known).* { + deny all; + access_log off; + log_not_found off; +} +``` + + +https://xz.aliyun.com/t/8631 + +https://blog.51cto.com/u_15274949/2922449 + +https://serverfault.com/questions/755662/nginx-disable-htaccess-and-hidden-files-but-allow-well-known-directory + + +# jquery 自带的xss漏洞 + +https://cloud.tencent.com/developer/article/1638163 + +https://www.cnblogs.com/nul1/p/12934703.html + +# Clickjacking + + +点击劫持(Click Jacking)是一种视觉上的欺骗手段,攻击者通过使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,通过调整iframe页面的位置,可以使得伪造的页面恰好和iframe里受害页面里一些功能重合(按钮),以达到窃取用户信息或者劫持用户操作的目的。 + +Clickjacking是仅此于XSS和CSRF的前端漏洞,因为需要诱使用户交互,攻击成本高,所以不被重视,但危害不容小觑,攻击效果见案例。 + +对于漏洞的防范大部分浏览器支持的防御办法是使用X-Frame-Options头,通常设置为DENY可以很好地防范漏洞,其次SAMEORIGIN可以在某个页面失守时被绕过,ALLOW-FROM uri不被Chrome支持。其次还有CSP头:Content-Security-Policy: frame-ancestors 'self'仅支持FireFox。 + +也就是说,如果发现系统没有设置上述头,大概率存在ClickJacking漏洞,测试方法很简单,本地构造一个HTML文件,使用iframe包含此页面: + + 主要有三种防御办法: + +1)X-Frame-Options,建议设置为DENY; + +2)Content-Security-Policy:frame-ancestors 'self'或‘none’,不适用于Safari和IE; + +3)js层面:使用iframe的sandbox属性,判断当前页面是否被其他页面嵌套。 + + 当前最推荐的方案是1和3结合防御,深入了解可以阅读原文,下载斯坦福大学对此漏洞的研究论文。 + + +```sh +# nginx配置: + +add_header X-Frame-Options SAMEORIGIN; +X-Frame-Options有三种可能的指示: + +X-Frame-Options: DENY +X-Frame-Options: SAMEORIGIN +X-Frame-Options: ALLOW-FROM https://example.com/ +``` + +https://owasp.org/www-community/attacks/Clickjacking + +https://cloud.tencent.com/developer/article/1516375 + +https://blog.csdn.net/lady_killer9/article/details/108017437 + +https://cloud.tencent.com/developer/section/1190032 \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\346\211\253\346\217\217\345\267\245\345\205\267.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\346\211\253\346\217\217\345\267\245\345\205\267.md" new file mode 100644 index 0000000..321748c --- /dev/null +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\346\270\227\351\200\217\346\265\213\350\257\225/\346\274\217\346\264\236\346\211\253\346\217\217\345\267\245\345\205\267.md" @@ -0,0 +1,195 @@ +# Nessus + +AWVS:商业级 + +IBM Rational AppScan:商业级 + +N-Stealth:商业级 + +OWASP ZAP:免费开源 + +Arachni:免费开源 + +Wfuzz:免费开源 + +Nikto:免费开源 + + +https://www.freebuf.com/articles/web/262914.html + + +https://zh-cn.tenable.com/plugins/nessus/112154 + +https://www.52pojie.cn/thread-1464993-1-1.html + + +https://www.zhihu.com/question/58653011 + + +# 漏洞扫描-AWVS-Nessus-Docker版 + +```sh +docker run -itd -p 6666:3443 -p 6665:8834 leishianquan/awvs-nessus:v3 + +docker exec -it awvs-nessus /bin/bash + +root@f96270a8459e:/# /etc/init.d/nessusd start +Starting Nessus : . +root@f96270a8459e:/# [Thu Nov 25 07:29:23 2021][66.1] Warning -- could not open /usr/share/zoneinfo. Set the NESSUS_TZ_DIR env. variable +``` + +https://www.evec.cc/index.php/archives/2695 + +https://blog.51cto.com/u_15127571/4337431 + + +https://blog.51cto.com/u_15127575/2764792 + +# Nessus 简介 + +基于网络的漏洞扫描器一般由以下几个方面组成: + +1)漏洞数据库模块:漏洞数据库包含各种操作系统和应用程序的漏洞信息,以及如何检测漏洞的指令。新的漏洞会不断出现,因此该数据库需要经常更新,以便能检测到新发现的漏洞。这一点非常类似于病毒库的升级。 + +2)扫描引擎模块:扫描引擎是扫描器的主要部件。根据用户配置控制台部分的相关设置,扫描引擎组装好相应的数据包,发送到目标系统,将接收到的目标系统的应答数据包和漏洞数据库中的漏洞特征进行比较,从而判断所选择的漏洞是否存在。 + +3)用户配置控制台模块:用户配置控制台与安全管理员进行交互,用来设置要扫描的目标系统,以及扫描哪些漏洞。 + +4)当前活动的扫描知识库模块:通过查看内存中的配置信息,该模块监控当前活动的扫描,将要扫描的漏洞的相关信息提供给扫描引擎,同时接收扫描引擎返回的扫描结果。 + +5)结果存储器和报告生成工具:报告生成工具利用当前活动扫描知识库中存储的扫描结果,生成扫描报告。扫描报告将告诉用户配置控制台设置了哪些选项,根据这些设置,在扫描结束后,就可以知道在哪些目标系统上发现了何种漏洞。 + +尽管漏洞扫描器使用起来相当方便,但真正的网络攻击者并不会在对一个具体目标发动攻击时采用它们。一方面,漏洞扫描器的报告并不一定可靠,用户会发现当利用漏洞扫描工具时,虽然能显示出很多目标漏洞,但真正可利用的却很少。另一方面,漏洞扫描器会向目标发送大量数据包,这样就很容易被目标的安全软件发现并检测,从而暴露攻击者,至少会引起目标网络管理员的警觉。漏洞扫描器更多的是应用到安全防护上,网络管理员或是安全专家在为网络制定安全策略前,通常会使用漏洞扫描器对网络进行安全评估。 + +http://www.luckyzmj.cn/posts/477c90d0.html + +https://mp.weixin.qq.com/s?__biz=MzI5MDE0MjQ1NQ%3D%3D&mid=2247498179&idx=2&sn=fa6f117c420bc52306508fe81af3b4d3&hmsr=joyk.com&utm_source=joyk.com&utm_medium=referral + +https://www.freebuf.com/vuls/164198.html + + +https://www.zhihu.com/question/390286425 + + +https://bbs.huaweicloud.com/blogs/138657 + +# Nessus最新插件 + +https://zh-cn.tenable.com/plugins/families/about + +https://mrxn.net/jswz/504.html + + +https://www.shain.cc/archives/nessus8100po-jie-an-zhuang + +https://github.com/0xa-saline/Nessus_update + +更新Nessus插件 + +```sh +docker cp all-2.0.tar.gz awvs-nessus:/opt/ +docker exec -it awvs-nessus /bin/bash +root@050cf4ccaf2d:/# ls /opt/ +all-2.0.tar.gz nessus +root@050cf4ccaf2d:/# /opt/nessus/sbin/nessuscli update /opt/all-2.0.tar.gz +[Fri Nov 26 06:59:45 2021][2587.1] Warning -- could not open /usr/share/zoneinfo. Set the NESSUS_TZ_DIR env. variable + +[info] Copying templates version 202110292034 to /opt/nessus/var/nessus/templates/tmp +[info] Finished copying templates. +[info] Moved new templates with version 202110292034 from plugins dir. + * Update successful. The changes will be automatically processed by Nessus. + +/etc/init.d/nessusd restart +``` + +# 使用教程 + +https://support.huaweicloud.com/topic/1084318-1-N + +https://www.cnblogs.com/csnd/p/11807907.html + + +https://www.freebuf.com/sectool/255475.html + +https://www.cnblogs.com/csnd/p/11807907.html + +https://cloud.tencent.com/developer/article/1076625 + +https://zhuanlan.zhihu.com/p/395459622 + +https://cloud.tencent.com/developer/article/1143719 + +https://blog.csdn.net/weixin_45588247/article/details/119614618 + +https://docs.tenable.com/ + +http://xuan-shu.rukomos.ru/cong_shi_jian_zhong_xue_xi_nessusyu_openvaslou_dong_sao_miao_xin_xi_an_quan_ji_zhu_da_jiang_tang__21309-pdf-download.html + +# 扫描报表导出 + +https://www.freebuf.com/sectool/276468.html + + +# 基线扫描 + +基线检查功能针对服务器操作系统、数据库、软件和容器的配置进行安全检测,并提供检测结果说明和加固建议。基线检查功能可以帮您进行系统安全加固,降低入侵风险并满足安全合规要求。 + +什么是基线 + +基线指操作系统、数据库及中间件的安全实践及合规检查的配置红线,包括弱口令、账号权限、身份鉴别、密码策略、访问控制、安全审计和入侵防范等安全配置检查。云安全中心的安全基线支持弱口令、未授权访问、历史漏洞和配置红线的立体巡检,合规基线支持等保合规和CIS标准。安全基线与合规基线均已覆盖常用的30多个系统版本和10多个数据库及中间件,可以满足企业多种合规需求。 + +https://help.aliyun.com/document_detail/68386.html + + + +# openvas使用 + +https://blog.csdn.net/weixin_43876557/article/details/106495589 + + +# AWVS13.x + + +Acunetix 是一个自动化的 Web 应用程序安全测试工具,可通过检查 SQL 注入,跨站点脚本和其他可利用漏洞等来审核您的 Web 应用程序。一般来说,Acunetix 能够扫描任何通过网络浏览器访问并使用 HTTP/HTTPS 协议的网站或 web 应用程序。 + +Acunetix 提供了强大而独特的解决方案,用于分析现成的和自定义的 Web 应用程序,包括那些使用 JavaScript,AJAX 和 Web 2.0 的 Web 应用程序。Acunetix 有一个高级搜寻器,可以找到几乎所有的文件。这一点很重要,因为无法检查未找到的内容。 + +## 网络扫描 + +可以将 Acunetix 配置为使用 OpenVAS 对 Acunetix 中配置的目标执行网络扫描。网络扫描结果将显示在 Acunetix UI 中。 + +## 杀毒扫描 + +Acunetix 可以与 AntiVirus 引擎一起使用,以检查您站点上的恶意软件。使用的默认引擎是 Windows Defender AntiVirus 服务(如 Windows 8 和 Windows 10)。作为替代方案,Acunetix 还可以与流行的开源防病毒产品 ClamAV 交互。 + + + +AVWS使用的创新技术包括: + + (1)DeepScan —— 用于抓取AJAX 密集型客户端单页面应用程序(SPA) + + (2)业界最先进的SQL注入和跨站点脚本(XSS)测试,包括基于DOM的XSS的高级检测 + + (3)AcuSensor —— 将黑盒扫描技术与放置在源代码中的传感器的反馈相结合 + +https://developer.aliyun.com/article/660816 + +https://www.wangan.com/docs/acunetixweb + +https://www.sqlsec.com/2020/04/awvs.html + +http://blog.tianles.com/89.html + +https://www.freebuf.com/vuls/200745.html + + +https://paper.seebug.org/papers/Archive/drops2/%E7%BC%96%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84Acunetix%20WVS%E6%BC%8F%E6%B4%9E%E8%84%9A%E6%9C%AC.html + +## 与github集成报告漏洞 + + +https://www.wangan.com/docs/485 + +## API开发 + +https://www.sqlsec.com/2020/04/awvsapi.html \ No newline at end of file diff --git "a/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\351\232\220\347\247\201\350\256\241\347\256\227/SGX.md" "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\351\232\220\347\247\201\350\256\241\347\256\227/SGX.md" new file mode 100644 index 0000000..747819c --- /dev/null +++ "b/\345\256\211\345\205\250\346\212\200\350\203\275\346\240\221/\351\232\220\347\247\201\350\256\241\347\256\227/SGX.md" @@ -0,0 +1,4 @@ +# SGX + +https://www.zhihu.com/question/31565742 +https://developer.aliyun.com/article/740793 \ No newline at end of file diff --git "a/\346\225\260\346\215\256\345\272\223/mysql/mysql.md" "b/\346\225\260\346\215\256\345\272\223/mysql/mysql.md" index 978a0f1..fb91cbe 100644 --- "a/\346\225\260\346\215\256\345\272\223/mysql/mysql.md" +++ "b/\346\225\260\346\215\256\345\272\223/mysql/mysql.md" @@ -219,4 +219,129 @@ https://blog.csdn.net/rorntuck7/article/details/50699409 https://cloud.tencent.com/developer/news/458227 https://juejin.im/post/5d7108abe51d453b753a1b37 ->>>>>>> c2a1203da667ebeb9f0cd68b9a536f88b9e69f7c + + + +# mysql 自定义函数 + +https://blog.csdn.net/weixin_42724467/article/details/88795188 + +# 调用mysql存储过程和函数 + +http://c.biancheng.net/view/7996.html + + +# 每行自定义编号 + +```sql +SELECT ROW_NUMBER() OVER (ORDER BY + FIELD( + area, + '玄武区', + '秦淮区', + '建邺区', + '鼓楼区', + '栖霞区', + '雨花台区', + '江宁区', + '浦口区', + '六合区', + '溧水区', + '高淳区', + '江北新区', + '合计' + )) AS row_cnt, + all_tb.area, + all_tb.site_cnt, + all_tb.total_rooms_all, + all_tb.used_rooms_gl, + all_tb.available_rooms, + all_tb.total_nurse_people, + all_tb.other_serve_people, + all_tb.total_work_people, + all_tb.administrator, + all_tb.administrator_phone + FROM + ( + ( + SELECT + a.area, + count( a.name ) AS site_cnt, + CAST( sum( b.total_rooms_all ) AS SIGNED ) AS 'total_rooms_all', + CAST( sum( b.used_rooms_gl ) AS SIGNED ) AS 'used_rooms_gl', + CAST( sum( b.available_rooms ) AS SIGNED ) AS 'available_rooms', + CAST( sum( b.total_nurse_people ) AS SIGNED ) AS 'total_nurse_people', + CAST( sum( b.other_serve_people ) AS SIGNED ) AS 'other_serve_people', + CAST( sum( b.total_nurse_people + b.other_serve_people ) AS SIGNED ) AS 'total_work_people', + GROUP_CONCAT(COALESCE ( b.administrator, "" ), " " ) AS "administrator", + GROUP_CONCAT(COALESCE ( b.administrator_phone, "" ), " " ) AS "administrator_phone" + FROM + dwd_isolation_point a + LEFT JOIN dwd_isolation_site_record b ON ( a.area = b.area AND a.name = b.name ) + WHERE + 1 = 1 + AND a.is_open = "备用" + AND b.created_at = ( + SELECT MAX( t2.created_at ) + FROM dwd_isolation_site_record t2 + WHERE ( t2.area = a.area AND t2.name = a.name ) + ) + group by a.area + ) + UNION + ( + SELECT + "合计" as area, + count( a.name ) AS site_cnt, + CAST( sum( b.total_rooms_all ) AS SIGNED ) AS 'total_rooms_all', + CAST( sum( b.used_rooms_gl ) AS SIGNED ) AS 'used_rooms_gl', + CAST( sum( b.available_rooms ) AS SIGNED ) AS 'available_rooms', + CAST( sum( b.total_nurse_people ) AS SIGNED ) AS 'total_nurse_people', + CAST( sum( b.other_serve_people ) AS SIGNED ) AS 'other_serve_people', + CAST( sum( b.total_nurse_people + b.other_serve_people ) AS SIGNED ) AS 'total_work_people', + "" AS "administrator", + "" AS "administrator_phone" + FROM + dwd_isolation_point a + LEFT JOIN dwd_isolation_site_record b ON ( a.area = b.area AND a.name = b.name ) + WHERE + 1 = 1 + AND a.is_open = "备用" + AND b.created_at = ( + SELECT MAX( t2.created_at ) + FROM dwd_isolation_site_record t2 + WHERE ( t2.area = a.area AND t2.name = a.name ) + ) + + ) + ) AS all_tb +``` + +https://developer.aliyun.com/article/696685 + + +# mysql view视图算法与优化 + +```sql +CREATE + [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] +VIEW [database_name].[view_name] +AS +[SELECT statement] +``` +create view 可选项 ALGORITHM 子句表示视图处理算法 +共三个参数: MERGE | TEMPTABLE | UNDEFINED + +MERGE +引用视图和视图定义的语句的文本被合并,使视图定义的部分取代语句的相应部分。 + +TEMPTABLE +视图中的结果被检索到一个临时表中,然后用来执行语句。 + +UNDEFINED +MySQL选择使用哪种算法。如果可能的话,它更倾向于MERGE而不是TEMPTABLE,因为MERGE通常更有效率,而且如果使用临时表,视图无法更新。 + + +https://blog.csdn.net/zhangyongze_z/article/details/108731087 + +https://stackoverflow.com/questions/17600564/create-algorithm-undefined-definer \ No newline at end of file diff --git "a/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java.md" "b/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java.md" index 1c5ad85..bc4d3f3 100644 --- "a/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java.md" +++ "b/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java.md" @@ -732,4 +732,12 @@ https://github.com/sofastack/sofa-ark https://www.sofastack.tech/projects/sofa-boot/sofa-ark-readme/ -https://github.com/sofastack \ No newline at end of file +https://github.com/sofastack + + +# AtomicReference + +AtomicReference类提供了一个可以原子读写的对象引用变量。 原子意味着尝试更改相同AtomicReference的多个线程(例如,使用比较和交换操作)不会使AtomicReference最终达到不一致的状态。 AtomicReference甚至有一个先进的compareAndSet()方法,它可以将引用与预期值(引用)进行比较,如果它们相等,则在AtomicReference对象内设置一个新的引用。 + + +https://www.jianshu.com/p/5521ae322743 \ No newline at end of file diff --git "a/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java\345\270\270\347\224\250\345\267\245\345\205\267\345\272\223.md" "b/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java\345\270\270\347\224\250\345\267\245\345\205\267\345\272\223.md" index 4fb0708..28febbc 100644 --- "a/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java\345\270\270\347\224\250\345\267\245\345\205\267\345\272\223.md" +++ "b/\347\274\226\347\250\213\350\257\255\350\250\200/JAVA/java\345\270\270\347\224\250\345\267\245\345\205\267\345\272\223.md" @@ -371,4 +371,9 @@ https://arthas.aliyun.com/doc/ https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn&id=arthas-basics -http://www.macrozheng.com/#/reference/arthas_start \ No newline at end of file +http://www.macrozheng.com/#/reference/arthas_start + + +# 钻石依赖问题 + +https://blog.csdn.net/john1337/article/details/96825349 \ No newline at end of file diff --git "a/\347\274\226\347\250\213\350\257\255\350\250\200/Scala/scala.md" "b/\347\274\226\347\250\213\350\257\255\350\250\200/Scala/scala.md" index 7e08d98..a79bcd6 100644 --- "a/\347\274\226\347\250\213\350\257\255\350\250\200/Scala/scala.md" +++ "b/\347\274\226\347\250\213\350\257\255\350\250\200/Scala/scala.md" @@ -110,6 +110,12 @@ https://docs.scala-lang.org/zh-cn/overviews/collections/conversions-between-java https://blog.csdn.net/u013256816/article/details/80057661 +## var, val, def + +val 用于常量常用于读取配置等 +var 定义变量 +def 用于函数定义 + ## scala中下划线的用法 _ https://www.baeldung.com/scala/underscore @@ -226,3 +232,91 @@ def functionName ([参数列表]) : [return type] = { } ``` +## case class + +样例类一般被优化用于模式匹配 + +https://blog.csdn.net/qq_36342616/article/details/98848873 + +https://blog.csdn.net/lovehuangjiaju/article/details/47176829 + + +## with 关键字 + +with means that the class is using a Trait via mixin. + +https://docs.scala-lang.org/tour/mixin-class-composition.html + +https://blog.csdn.net/beckham1984/article/details/43972605 + +https://stackoverflow.com/questions/6761534/scala-with-keyword-usage + +## scala 反射 + +反射(Reflection)是指程序在运行过程中可以解析并甚至修改自身的一种能力。 在横跨面向对象、函数式编程以及逻辑编程范式方面有着悠久的历史。 虽然一些编程语言在设计之初就引入了反射作为指导原则,但是也有一些编程语言是随着时间演化逐渐引入了反射这一能力。 + +反射就是在程序运行中,将程序中隐式元素具体化(比如,使之显式化)的能力。 这些隐式元素可以是静态编程中的元素,比如类、方法、或表达式。 也可以是动态的元素,比如当前正在执行的计算续体或方法调用和访问字段这种正在执行的事件。 一般根据在编译阶段执行反射还是在运行阶段执行反射来区分反射的类型。 在程序编译期的反射是用于开发转换器和生成器时的好办法。 在程序运行器的反射常用于调整语言语义或用于支持软件组件之间的后期绑定。 + +什么是运行时反射呢?就是指在程序运行时,给定某个类型或某些对象的实例,反射可以做到: + +- 解析包括泛型在内的各种对象的类型 +- 能去实例化一个对象 +- 能去访问或调用对象中的成员 + +### 核心概念 + +Universe是Scala反射的切入点。 + +universe提供了使用反射所关联的很多核心概念,比如Types,Trees,以及Annotations。 更多细节请参阅指南中Universes部分,或者看scala.reflect.api包的Universes API文档。 + +本指南中提供了大多数情况下Scala反射要用到的部分,一般在使用运行时反射的场景下,直接导入所有universe成员去用即可: + +```scala +import scala.reflect.runtime.universe._ +``` + +Mirrors(镜像) 是Scala反射中的核心概念。 反射所能提供的信息都是通过镜像去访问的。 根据不同的类型信息或不同的反射操作,必须要使用不同类型的镜像。 + + + + +```scala +var classLoader = Thread.currentThread().getContextClassLoader +if (classLoader == null) { + classLoader = scala.reflect.runtime.universe.getClass.getClassLoader +} +val tb = runtimeMirror(classLoader).mkToolBox() +``` +https://segmentfault.com/a/1190000014772704 + +https://docs.scala-lang.org/zh-cn/overviews/reflection/overview.html + +https://blog.csdn.net/dounine/article/details/87989967 + +# scala 类型提供机制 + +在Scala中,宏扩展可产生任何代码程序员喜欢,包括ClassDef,ModuleDef,DefDef,和其他定义的节点,所以类型提供者的代码生成部分被覆盖。 + +Flags are used to provide modifiers for abstract syntax trees that represent definitions via the flags field of scala.reflect.api.Trees#Modifiers. Trees that accept modifiers are: + +- scala.reflect.api.Trees#ClassDef. Classes and traits. +- scala.reflect.api.Trees#ModuleDef. Objects. +- scala.reflect.api.Trees#ValDef. Vals, vars, parameters, and self type annotations. +- scala.reflect.api.Trees#DefDef. Methods and constructors. +- scala.reflect.api.Trees#TypeDef. Type aliases, abstract type members and type parameters. + + +https://docs.scala-lang.org/overviews/macros/typeproviders.html + + +https://docs.scala-lang.org/overviews/reflection/annotations-names-scopes.html#:~:text=ClassDef%20%28Modifiers%20%28PRIVATE%20%7C%20FINAL%29%2C%20TypeName%20%28%22C%22%29%2C%20Nil%2C...%29,a%20wildcard%20import%20for%20this%2C%20e.g.%2C%20import%20scala.reflect.runtime.universe.Flag._.%29 + + +# transient 实现序列化的关键字 + +https://blog.csdn.net/sofeld/article/details/99347795 + + +# scala __getattr__ + +https://stackoverflow.com/questions/10658920/scala-equivalent-of-python-getattr-setattr \ No newline at end of file diff --git "a/\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\257\274\345\205\245\345\257\274\345\207\272\346\226\271\346\241\210.md" "b/\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\257\274\345\205\245\345\257\274\345\207\272\346\226\271\346\241\210.md" new file mode 100644 index 0000000..1c00e8c --- /dev/null +++ "b/\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\257\274\345\205\245\345\257\274\345\207\272\346\226\271\346\241\210.md" @@ -0,0 +1,42 @@ +# Excel导入导出 + +## 大数据量 + +使用sax + + +## 使用easypoi的场景 + + +1. 正规excel导出 (格式简单,数据量可以,5W以内吧) + 注解方式: ExcelExportUtil.exportExcel(ExportParams entity, Class pojoClass,Collection dataSet) +2. 不定多少列,但是格式依然简单数据库不大 + 自定义方式: ExcelExportUtil.exportExcel(ExportParams entity, List entityList,Collection dataSet) +3. 数据量大超过5W,还在100W以内 + 注解方式 ExcelExportUtil.exportBigExcel(ExportParams entity, Class pojoClass,IExcelExportServer server, Object queryParams) + 自定义方式: ExcelExportUtil.exportBigExcel(ExportParams entity, List excelParams,IExcelExportServer server, Object queryParams) +4. 样式复杂,数据量尽量别大 + 模板导出 ExcelExportUtil.exportExcel(TemplateExportParams params, Map map) +5. 一次导出多个风格不一致的sheet + 模板导出 ExcelExportUtil.exportExcel(Map> map,TemplateExportParams params) +6. 一个模板但是要导出非常多份 + 模板导出 ExcelExportUtil.exportExcelClone(Map>> map,TemplateExportParams params) +7. 模板无法满足你的自定义,试试html + 自己构造html,然后我给你转成excel ExcelXorHtmlUtil.htmlToExcel(String html, ExcelType type) +8. 数据量过百万级了.放弃excel吧,csv导出 + 注解方式: CsvExportUtil.exportCsv(CsvExportParams params, Class pojoClass, OutputStream outputStream) + 自定义方式: CsvExportUtil.exportCsv(CsvExportParams params, List entityList, OutputStream outputStream)### 导入 + +如果想提高性能 ImportParams 的concurrentTask 可以帮助并发导入,仅单行,最小1000 +excel有单个的那种特殊读取,readSingleCell 参数可以支持 +1. 不需要检验,数据量不大(5W以内) + 注解或者MAP: ExcelImportUtil.importExcel(File file, Class pojoClass, ImportParams params) +2. 需要导入,数据量不大 + 注解或者MAP: ExcelImportUtil.importExcelMore(InputStream inputstream, Class pojoClass, ImportParams params) +3. 数据量大了,或者你有特别多的导入操作,内存比较少,仅支持单行 + SAX方式 ExcelImportUtil.importExcelBySax(InputStream inputstream, Class pojoClass, ImportParams params, IReadHandler handler) +4. 数据量超过EXCEL限制,CSV读取 + 小数据量: CsvImportUtil.importCsv(InputStream inputstream, Class pojoClass,CsvImportParams params) + 大数据量: CsvImportUtil.importCsv(InputStream inputstream, Class pojoClass,CsvImportParams params, IReadHandler readHandler) + +http://doc.jeecg.com/2325817 \ No newline at end of file diff --git "a/\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\261\225\347\244\272finebi.md" "b/\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\261\225\347\244\272finebi.md" new file mode 100644 index 0000000..ef07395 --- /dev/null +++ "b/\350\247\243\345\206\263\346\226\271\346\241\210/\346\225\260\346\215\256\345\261\225\347\244\272finebi.md" @@ -0,0 +1,44 @@ +# FineBI + + +# sql数据集合传参 + +跳转时添加跳转参数 +```sql +SELECT * +FROM +app_isolation_person_record AS a +JOIN dwd_isolation_point b ON ( a.point_area = b.area AND a.point_name = b.NAME ) +WHERE + b.is_open = '是' + AND a.is_release = '0' + and a.point_area in ('${point_area}') + and a.point_name in ('${point_name}') +``` + +https://help.fanruan.com/finebi/doc-view-729.html + +https://help.fanruan.com/finebi/doc-view-86.html + +查询动态列 + +https://help.fanruan.com/finebi/doc-view-763.html + +# 数据钻取 + +https://help.fanruan.com/finebi/doc-view-133.html + + +# Excel 导出问题 + +导出时需要设置分享链接为预览跳转链接这样能够保证excel导出功能是正常的. + +https://help.fanruan.com/finebi/doc-view-578.html + +# 解决驱动冲突 + +https://help.fanruan.com/finebi/doc-view-697.html + +# 分享跳转 + +https://help.finebi.com/513/index.php?doc-view-149.html \ No newline at end of file