小白学安全-KunLun-M静态白盒扫描工具

news2024/11/26 21:45:06

一、KunLun-M简介

        KunLun-M是一个完全开源的静态白盒扫描工具,支持PHP、JavaScript的语义扫描,基础安全、组件安全扫描,Chrome Ext\Solidity的基础扫描。开源地址:https://github.com/LoRexxar/Kunlun-M

        Cobra是一款源代码安全审计工具,支持检测多种开发语言源代码中的大部分显著的安全问题和漏洞。 GitHub - FeeiCN/Cobra: Source Code Security Audit (源代码安全审计)

        Cobra-W是从Cobra2.0发展而来的分支,将工具重心从尽可能的发现威胁转变为提高发现漏洞的准确率以及精度。 https://github.com/LoRexxar/Kunlun-M/tree/cobra-w    

        Kunlun-Mirror是从Cobra-W2.0发展而来,在经历了痛苦的维护改进原工具之后,昆仑镜将工具的发展重心放在安全研究员的使用上,将会围绕工具化使用不断改进使用体验。

       目前工具主要支持php、javascript的语义分析,以及chrome ext, solidity的基础扫描.    

       KunLun-M(昆仑镜)已进入弱维护阶段,如果有bug或者明显的问题会更新,但不会再更新新功能,主要是我认为Kunlun-M的架构拖累了后续的发展方向,仅在PHP扫描中以当前的架构已经几乎做到极限了,后续可能会有新的工具?也可能没有?敬请期待~

        请使用python3.6+运行该工具,已停止维护python2.7环境    

二、特点

与其他代码审计相比:

  • 静态分析,环境依赖小。

  • 语义分析,对漏洞有效性判断程度更深。

  • 多种语言支持。

  • 开源python实现,更易于二次开发。

与Cobra相比:

  • 深度重写AST,大幅度减少漏洞误报率。

  • 底层api重写,支持windows、linux等多平台。

  • 多层语义解析、函数回溯,secret机制,新增多种机制应用于语义分析。

  • 新增javascript语义分析,用于扫描包含js相关代码。

与Cobra-W相比(todo):

  • 深度优化AST分析流程,使其更符合QL的概念,便于下一阶段的优化。

  • 深度优化辅助审计的流程,使其更符合人类安全研究员审计辅助的习惯。

  • 深度重构代码结构,使其更符合可拓展,可优化的开源理念。

三、安装

3.1 源码安装

    3.1.1 下载源代码

D:\opt>git clone https://github.com/LoRexxar/Kunlun-M.git
Cloning into 'Kunlun-M'...
remote: Enumerating objects: 12076, done.
remote: Counting objects: 100% (1175/1175), done.
remote: Compressing objects: 100% (398/398), done.
remote: Total 12076 (delta 819), reused 1106 (delta 777), pack-reused 10901
% (12076/12076), 16.14 MiB | 53.00 KiB/s
Receiving objects: 100% (12076/12076), 16.16 MiB | 37.00 KiB/s, done.
Resolving deltas: 100% (4295/4295), done.

    3.1.2 安装依赖

cd Kunlun_M
pip3 install -r requirements.txt 
#使用清华源
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/

    3.1.3 配置文件迁移

#linux系统
cp Kunlun_M/settings.py.bak Kunlun_M/settings.py
#windows系统
copy Kunlun_M\settings.py.bak Kunlun_M\settings.py

     3.1.4 初始化数据库,默认采用sqlite作为数据库

python kunlun.py init initialize
#注意不能用python3 kunlun.py init initialize

3.1.5 加载规则进数据库

注意:每次修改规则文件都需要加载

python kunlun.py config load

  3.2  docker安装

sudo docker build -t kunlun-m -f ./docker/Dockerfile .

四、使用方法

 4.1 命令行模式

 4.1.1  使用scan模式扫描各类源代码

python kunlun.py scan -t ./tests/vulnerabilities/
D:\opt\Kunlun-M>python kunlun.py scan -t ./tests/vulnerabilities/
D:\opt\Kunlun-M
[15:30:35] [INIT] start Scan Task...
[15:30:35] [INIT] set logging level: 10
[15:30:35] [INIT] ScanTask for vulnerabilities has been executed.
[15:30:35] [INIT] whether rescan Task vulnerabilities?(Y/N) (Default N)
[15:30:44] TaskID: 2
[15:30:44] [INIT] New Log file ScanTask_2.log .
[15:30:44] [INIT] Vendor Vuls Scan Status: True
[15:30:44] [INIT][IGNORE] New ignore regex \.crx_files
[15:30:44] [INIT][IGNORE] New ignore regex [\/\\]vendor[\/\\]
[15:30:44] [INIT][IGNORE] New ignore regex [\/\\]\.idea[\/\\]
[15:30:44] [INIT][IGNORE] New ignore regex [\/\\]static[\/\\]
[15:30:44] [PARSE-ARGS] Target Mode: folder
[15:30:44] [PARSE-ARGS] Output Mode: stream
[15:30:44] [CLI] Target Mode: folder
[15:30:44] [PARSE-ARGS] target directory: ./tests/vulnerabilities/
[15:30:44] [CLI] Target : D:\opt\Kunlun-M\tests\vulnerabilities/
[15:30:44] [PICKUP] D:\opt\Kunlun-M\tests\vulnerabilities/
[15:30:44] [PICKUP] [FILES] |--v.p12
[15:30:44] [PICKUP] [FILES] |--v.php
[15:30:44] [PICKUP] [FILES] |--v_parser.php

-------------------------------------------------------------------------
[15:30:47] [Chain] Vul 20
[15:30:47] [SCAN] ending
-------------------------------------------------------------------------
[15:30:47] [SCAN] Trigger Vulnerabilities (20)
+----+-------+-------------------------+-------------+----------+-------------------------+-------------------+------------------------------------------+-----------------------------+
| #  | CVI   | Rule(ID/Name)           | Lang/CVE-id | Level    | Target-File:Line-Number | Commit(Author)    | Source Code Content                      | Analysis                    |
+----+-------+-------------------------+-------------+----------+-------------------------+-------------------+------------------------------------------+-----------------------------+
| 1  | 1000  | Reflected XSS           | php         | medium   | v.php:58                | LoRexxar/wufeifei | print("Hello " . $cmd)                   | Function-param-controllable |
| 2  | 1000  | Reflected XSS           | php         | medium   | v_parser.php:7          | LoRexxar/wufeifei | print(system(trim('ls'.$_GET['test'])))  | Function-param-controllable |
| 3  | 10002 | Reflected XSS           | php         | medium   | v.php:10                | LoRexxar          | echo($callback . ";                      | Function-param-controllable |
| 4  | 10002 | Reflected XSS           | php         | medium   | v.php:55                | LoRexxar          | echo get_headers($url,1);                | Function-param-controllable |
| 5  | 10002 | Reflected XSS           | php         | medium   | v.php:58                | LoRexxar          | print("Hello " . $cmd);                  | Function-param-controllable |
| 6  | 10002 | Reflected XSS           | php         | medium   | v.php:121               | LoRexxar          | echo "a".$a;                             | Function-param-controllable |
| 7  | 10002 | Reflected XSS           | php         | medium   | v_parser.php:7          | LoRexxar          | print(system(trim('ls'.$_GET['test']))); | Function-param-controllable |
| 8  | 1001  | SSRF                    | php         | medium   | v.php:44                | LoRexxar/wufeifei | curl($cmd)                               | Vustomize-Match             |
| 9  | 1002  | SSRF                    | php         | medium   | v.php:50                | LoRexxar/wufeifei | file_get_contents($url)                  | Function-param-controllable |
| 10 | 1004  | SQLI                    | php         | high     | v.php:77                | LoRexxar/wufeifei | "select name from users where id =$id";  | Vustomize-Match             |
| 11 | 1007  | RFI                     | php         | high     | v.php:81                | LoRexxar/wufeifei | require_once($cmd)                       | Function-param-controllable |
| 12 | 1008  | Xml injection           | php         | medium   | v.php:101               | LoRexxar/wufeifei | simplexml_load_string($xml)              | Function-param-controllable |
| 13 | 1009  | RCE                     | php         | critical | v.php:19                | LoRexxar/wufeifei | eval($cmd)                               | Function-param-controllable |
| 14 | 1011  | RCE                     | php         | critical | v.php:20                | LoRexxar/wufeifei | system('ls' + $cmd)                      | Function-param-controllable |
| 15 | 1011  | RCE                     | php         | critical | v_parser.php:7          | LoRexxar/wufeifei | system(trim('ls'.$_GET['test'])))        | Function-param-controllable |
| 16 | 1012  | Information Disclosure  | php         | low      | v.php:84                | LoRexxar/wufeifei | highlight_file($cmd)                     | Function-param-controllable |
| 17 | 1013  | URL Redirector Abuse    | php         | low      | v.php:94                | LoRexxar/wufeifei | header("Location: ".$url)                | Function-param-controllable |
| 18 | 1014  | variable shadowing      | php         | high     | v.php:12                | LoRexxar/wufeifei | extract($cmd)                            | Function-param-controllable |
| 19 | 1015  | unserialize vulerablity | php         | medium   | v.php:98                | LoRexxar/wufeifei | unserialize($test)                       | Function-param-controllable |
| 20 | 5001  | 硬编码密码              | base        | low      | v.php                   | LoRexxar          | password = $_POST['                      | Regex-only-match            |
+----+-------+-------------------------+-------------+----------+-------------------------+-------------------+------------------------------------------+-----------------------------+
[15:30:47] [MainThread] New evil Function list by NewCore:
+---+-------------+-----------------+------------------+
| # | NewFunction | OriginFunction  | Related Rules id |
+---+-------------+-----------------+------------------+
| 1 | curl        | ['curl_setopt'] | 1001             |
| 2 | curl        | ['curl_setopt'] | 1001             |
+---+-------------+-----------------+------------------+
[15:30:47] [EXPORT] No filename given, save into default path(result/).
[15:30:47] [EXPORT] Scan result exported successfully: D:\opt\Kunlun-M\result\vulnerabilities.csv
[15:30:47] [INIT] Done! Consume Time:11.81710433959961s

4.1.2 使用config模式加载本地的rule/tamper

python kunlun.py config load         # 加载rule进数据库
python kunlun.py config recover      # 将数据库中的rule恢复到文件
python kunlun.py config loadtamper   # 加载tamper进数据库
python kunlun.py config retamper     # 将数据库中的tamper恢复到文件

    使用show模式查看目前的所有rule/tamper

python kunlun.py show rule           # 展示所有的rule
python kunlun.py show rule -k php    # 展示所有php的rule
python kunlun.py show tamper         # 展示所有的tamper

4.2 web页面模式

    KunLun-M Dashbroad,并且允许通过apitoken来访问api获取数据,默认9999端口。

4.2.1 启动命令

python .\kunlun.py web -p 9999
 [16:09:51] Start KunLun-M Web in Port: 9999
Watching for file changes with StatReloader
November 09, 2023 - 16:09:51
Django version 4.2.7, using settings 'Kunlun_M.settings'
Starting development server at http://127.0.0.1:9999/
Quit the server with CTRL-BREAK.

4.2.2 浏览器访问http://127.0.0.1:9999/

4.2.3 注册账号

4.2.4 功能界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190632.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题

在调试计算任务的时候,手动重置任务为初始状态,但是并没有重新开始计算,检查定时任务代码: 从Scheduled(fixedRate 120000)可以看到,应该是间隔120秒执行一次该定时任务,查看后台日志,并没有重…

追寻Moonbeam身影,泰国区块链周正在火热进行中!

继Moonbeam参与HK Web3月之后,下一站便是由Cryptomind Group举办的泰国2023年区块链周。本次位于泰国的区块链周以“熊市中建设,牛市中崛起”为理念,旨在为对区块链技术感兴趣的个人和投资者提供机会接触行业中的团队和专家,并邀请…

跨境虾皮Shopee和Lazada商品详情接口采集方案

跨境虾皮和Lazada商品详情接口采集方案可以采用以下步骤: 了解接口文档:首先需要了解跨境虾皮和Lazada的商品详情接口文档,包括接口地址、请求参数、返回结果等信息。获取API密钥:为了使用API接口,需要获取跨境虾皮和…

五个做原型的好处和意义

绘制原型不仅是产品开发的重要基础,也是UI设计师在设计过程中应该采用的主要路径标识。绘制原型的重要性不亚于建筑师手中的设计图纸!虽然原型设计可能会给产品开发带来一些误解,但毫不夸张地说,任何开发人员都可以将优秀的开发产…

将Modbus转Profinet网关用于自动给料机的案例

自动给料机通过使用Modbus转Profinet网关(XD-MDPN100)连接1200PLC与G120变频器Modbus通信。这种通信方式可以实现设备之间的数据交换和控制命令传输,大大提高了自动给料机的运行效率和精度。使用这个网关,1200PLC可以准确地将控制…

13 # 手写 concat 方法

concat 的使用 concat() 方法用于合并两个或多个数组。此方法不会更改现有数组&#xff0c;而是返回一个新数组。如果省略了所有参数&#xff0c;则 concat 会返回调用此方法的现存数组的一个浅拷贝。 <script>var arr1 ["k", "a", "i"…

ES|QL(Elasticsearch 查询语言)入门

作者&#xff1a;Ninoslav Miskovic 通过使用 ES|QL 直接从 Discover 创建聚合、可视化和警报&#xff0c;缩短获得见解的时间。 什么是 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;&#xff1f; ES|QL&#xff08;Elasticsearch 查询语言&#xff09;是 Elastic 全…

文件包含 [ZJCTF 2019]NiZhuanSiWei1

打开题目 代码审计 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ 首先isset函数检查text参数是否存在且不为空 用file_get_contents函数读取text制定的文件内容并与welcome to the zjctf进行强比较 echo "<br><h…

ByteBuf和ByteBuffer

一、背景简介 ByteBuf&#xff0c;顾名思义&#xff0c;就是字节缓冲区&#xff0c;是Netty中非常重要的一个组件。熟悉jdk NIO的同学应该知道ByteBuffer&#xff0c;正是因为jdk原生ByteBuffer使用比较复杂&#xff0c;某些场景下性能不是太好&#xff0c;netty开发团队重新设…

QT QSplitter

分裂器QSplitter类提供了一个分裂器部件。和QBoxLayout类似&#xff0c;可以完成布局管理器的功能,但是包含在它里面的部件,默认是可以随着分裂器的大小变化而变化的。 比如一个按钮放在布局管理器中,它的垂直方向默认是不会被拉伸的,但是放到分裂器中就可以被拉伸。还有一点不…

多篇论文介绍-摘要

论文地址https://arxiv.org/pdf/2301.10051.pdf 目录 01CIEFRNet&#xff1a;面向高速公路的抛洒物检测算法 02改进 YOLOv5 的 PDC 钻头复合片缺损识别 03 基于SimAM注意力机制的DCN-YOLOv5水下目标检测 04 基于改进YOLOv7-tiny 算法的输电线路螺栓缺销检测 ​编辑05 基于改进Y…

jquery的项目,html页面使用vue3 +element Plus

vue3&#xff0c;element引入 <script src"../vue3.3.8/vue.global.js"></script> <link rel"stylesheet" href"js/elementPlus/index.css"> <script src"js/elementPlus/index.full.js"></script>…

Linux友人帐之网络编程基础NFS服务器

一、概述 1.1NFS基础概念 NFS服务器&#xff08;Network File System&#xff09;是一种网络文件系统协议&#xff0c;它允许不同计算机之间共享文件系统中的文件。它是一种专门用于在网络上共享文件和目录的服务器。NFS服务器可以把本地的文件系统目录通过网络共享给其它计算…

【C++】——类与对象(一)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

Python tkinter实现复刻Windows记事本UI和菜单的文本编辑器(一)

下一篇&#xff1a;Python tkinter实现复刻Windows记事本UI和菜单的文本编辑器&#xff08;二&#xff09;-CSDN博客 介绍&#xff1a; Windows操作系统中自带了一款记事本应用程序&#xff0c;通常用于记录文字信息&#xff0c;具有简单文本编辑功能。Windows的记事本可以新…

LoadRunner脚本编写之二

下面来回顾一下嵌套循环例子。 Action() {int i,j; //生命两个变量for (i1;i<5;i) //第一重循环&#xff0c;循环5次{if (i3) break; //当i等于3时&#xff0c;跳出本重循环elselr_output_message("i%d",i); //否则&#xff0c;输入i的值for (j1;j<…

效率提升75%!要做矩阵号,更要做好矩阵号管理

在如今的信息数字化时代&#xff0c;面对竞争日趋激烈的市场&#xff0c;数字化转型成为了企业提高效率和竞争力、实现可持续发展的重要手段。 这一两年来&#xff0c;我们也发现&#xff0c;越来越多的品牌企业开始探索数字化转型的实践&#xff0c;通过使用自建或者采买的数据…

Spring Task定时任务框架

二十四、Spring Task 24.1 介绍 Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a;定时任务框架 作用&#xff1a;定时自动执行某段Java代码 为什么要在Java程序中使用Spring Task&#xff1f; 应用场景…

linux系统,确认账户密码正确

linux系统&#xff0c;确认账户密码正确 1、问题背景2、解决方法 1、问题背景 有时在linux系统安装软件时&#xff0c;有的软件可能会在安装过程中创建系统用户&#xff0c;同时会给出这个用户的密码。过了一段时间我们不确定这个密码是否还正确&#xff0c;那怎么确认这个密码…

大数据-玩转数据-Flume

一、Flume简介 Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集、聚集、移动的服务,Flume只能在Unix环境下运行。Flume基于流式架构,容错性强,也很灵活简单。Flume、Kafka用来实时进行数据收集,Spark、Flink用来实时处理数据,impala用来实时查询。二、Flume…