前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【openwrt】netifd组件——netifd-proto脚本分析

【openwrt】netifd组件——netifd-proto脚本分析

作者头像
知否知否应是绿肥红瘦
发布于 2025-02-19 13:35:13
发布于 2025-02-19 13:35:13
19400
代码可运行
举报
文章被收录于专栏:Openwrt知识Openwrt知识
运行总次数:0
代码可运行
netifd-proto脚本

  • utils.sh脚本
  • netifd-proto.sh脚本
  • netifd-wireless.sh

netifd工具提供如下3个脚本用于网络配置

  • utils.sh脚本
  • netifd-proto.sh脚本
  • netifd-wireless.sh脚本

utils.sh脚本

utils.shnetifd-proto.shnetifd-wireless.sh提供一些基础功能。一般用户不会直接调用。

  • append
  • add_default_handler
  • set_default
  • config_add_int
  • config_add_array
  • config_add_string
  • config_add_boolean

下面仅列举出部分函数定义,详见源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /lib/netifd/utils.sh

N="
"

append() {
	local var="$1"
	local value="$2"
	local sep="${3:- }"

	eval "export -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
}

add_default_handler() {
	case "$(type $1 2>/dev/null)" in
		*function*) return;;
		*) eval "$1() { return; }"
	esac
}

set_default() {
	local __s_var="$1"
	local __s_val="$2"
	eval "export -- \"$__s_var=\${$__s_var:-\$__s_val}\""
}

_config_add_generic() {
	local type="$1"; shift

	for name in "$@"; do
		json_add_array ""
		json_add_string "" "$name"
		json_add_int "" "$type"
		json_close_array
	done
}

config_add_int() {
	_config_add_generic 5 "$@"
}

config_add_array() {
	_config_add_generic 1 "$@"
}

config_add_string() {
	_config_add_generic 3 "$@"
}

config_add_boolean() {
	_config_add_generic 7 "$@"
}

1.append()函数说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
append() {
	local var="$1"
	local value="$2"
	local sep="${3:- }"

	eval "export -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
}

append()函数作用等效于:

  • var为空
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var = $value
  • var不为空 var 的值是新增的value和旧的值的叠加

用法示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
append PROTO_DNS "$address"
# PROTO_DNS是某个全局变量名
# $address 值

eval第一遍扫描结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export -- "PROTO_DNS=${PROTO_DNS:+${PROTO_DNS}${value:+$sep}}$value"

其执行情况为:

  • PROTO_DNS为空,则不执行替换,PROTO_DNS=$value
  • 若PROTO_DNS不为空,需要执行替换,上述表达式变为PROTO_DNS={PROTO_DNS}{value:+sep}value,接下来需要继续判断value: value为空,原表达式为PROTO_DNS={PROTO_DNS}valuevalue不为为空,原表达式为PROTO_DNS={PROTO_DNS}sep

2.config_add_int() config_add_string() config_add_array()等函数使用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/ # cat test.sh
#!/bin/sh

. /usr/share/libubox/jshn.sh

_config_add_generic() {
        local type="$1"; shift

        echo "$@"
        for name in "$@"; do
                json_add_array ""
                json_add_string "" "$name"
                json_add_int "" "$type"
                json_close_array
        done
}

config_add_int() {
        _config_add_generic 5 "$@"
}

config_add_string() {
        _config_add_generic 3 "$@"
}

json_init

json_add_array "config"

config_add_int mtu
config_add_int auth
config_add_string apn

json_dump

执行结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ "config": [ [ "mtu", 5 ], [ "auth", 5 ], [ "apn", 3 ] ] }

config_add_int()、config_add_string()的作用就是创建json数组保存用于后面的参数,一个参数对应一个数组,如果存在多个参数就会生成多个数组。上述示例中,config_add_int()和config_add_string()创建的数组是嵌套进config数组的。

其中的数字表示不同的数据类型: 5 ==> int 3 ==> string 7 ==> bool 1 ==> array

config_add_int()、config_add_string()创建的数组必须嵌套进另一个json数组,不可以单独存在,因为_config_add_generic()函数中json_add_array创建的数组的name为空,后面使用json_add_string添加成员后,只会将这些成员保存至环境变量,使用json_dump打印该json也是{ }空值。

netifd-proto.sh脚本

netifd-proto.sh提供一些配置网络参数的函数,这些函数是基于utils.sh里面的函数实现的。用户可以直接调用netifd-proto.sh里面的部分函数。

  • proto_config_add_int
  • proto_config_add_string
  • proto_config_add_boolean
  • proto_config_add_array
  • proto_init_update
  • proto_set_keep
  • proto_add_dns_server
  • proto_add_ipv4_address
  • proto_add_ipv6_address
  • proto_add_ipv4_route
  • proto_add_ipv6_route
  • proto_send_update
  • proto_run_command
  • proto_kill_command
  • proto_notify_error
  • proto_block_restart
  • proto_set_available
  • proto_setup_failed
  • init_proto

1.proto_init_update()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proto_init_update() {
	local ifname="$1"
	local up="$2"
	local external="$3"

	PROTO_KEEP=0
	PROTO_INIT=1
	PROTO_TUNNEL_OPEN=
	PROTO_IPADDR=
	PROTO_IP6ADDR=
	PROTO_ROUTE=
	PROTO_ROUTE6=
	PROTO_PREFIX6=
	PROTO_DNS=
	PROTO_DNS_SEARCH=
	PROTO_NEIGHBOR=
	PROTO_NEIGHBOR6=
	json_init
	json_add_int action 0
	[ -n "$ifname" -a "*" != "$ifname" ] && json_add_string "ifname" "$ifname"
	json_add_boolean "link-up" "$up"
	[ -n "$3" ] && json_add_boolean "address-external" "$external"
}

初始化一组interface用到的参数,例如ifname,link状态up,ipv4信息PROTO_IPADDR等等。

action对应netifd的一种操作,详见netifd的proto_shell_notify()函数。

同时初始化一个json对象用于保存这些参数,最终这些参数会通过json对象传递到netifd。

2.proto_set_keep()、proto_add_dns_server()、 proto_add_dns_search()、proto_add_ipv4_route()、proto_add_ipv6_route()

以上函数的作用是设置proto_init_update()初始化的那些参数。用户会直接调用这些函数进行参数配置。

这里以proto_add_ipv4_address()函数为例介绍其执行流程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proto_add_ipv4_address() {
	local address="$1"
	local mask="$2"
	local broadcast="$3"
	local ptp="$4"

	append PROTO_IPADDR "$address/$mask/$broadcast/$ptp"
}

proto_add_ipv4_address "192.168.1.2" "255.255.255.0" "192.168.1.0" "0" 

proto_add_ipv4_address()最多会接收4个参数,经过这一步设置后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PROTO_IPADDR=192.168.1.2/255.255.255.0/192.168.1.0/0

proto_add_ipv4_address()做的事情实际上就这么多,只是设置PROTO_IPADDR的值而已。为了方便理解,接下来会继续讲下PROTO_IPADDR解析和传递过程。

协议脚本最终在发送时会调用proto_send_update()函数向netifd传递这些参数用于更新interface,在发送时先会对参数进行解析,接下来以PROTO_IPADDR参数为例讲解如何解析和传递的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proto_send_update() {

    ......
	_proto_push_array "ipaddr" "$PROTO_IPADDR" _proto_push_ipv4_addr
	......
}

_proto_push_array()函数执行流程如下:

  • 创建一个名为$1(ipaddr)的json数组
  • 依次用3处理2中每一个参数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_proto_push_array() {
	local name="$1"
	local val="$2"
	local cb="$3"

	[ -n "$val" ] || return 0
	json_add_array "$name"
	for item in $val; do
		eval "$cb \"\$item\""
	done
	json_close_array
}

上述3是 _proto_push_ipv4_addr(),2是PROTO_IPADDR

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PROTO_IPADDR=192.168.1.2/255.255.255.0/192.168.1.0/0

_proto_push_ipv4_addr()的行为如下:

  • PROTO_IPADDR存入变量str
  • address = str删掉第一个/及其右边的字符串 > 192.168.1.1
  • str = str删掉第一个/及其左边的字符串 > 255.255.255.0/192.168.1.0/0
  • mask = str删掉第一个/及其右边的字符串 > 255.255.255.0
  • 以此类推,从PROTO_IPADDR解析出全部4个变量
  • 新建匿名json对象
  • 将上述4个变量添加进json对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_proto_push_ipv4_addr() {
	local str="$1"
	local address mask broadcast ptp

	address="${str%%/*}"
	str="${str#*/}"
	mask="${str%%/*}"
	str="${str#*/}"
	broadcast="${str%%/*}"
	str="${str#*/}"
	ptp="$str"

	json_add_object ""
	json_add_string ipaddr "$address"
	[ -n "$mask" ] && json_add_string mask "$mask"
	[ -n "$broadcast" ] && json_add_string broadcast "$broadcast"
	[ -n "$ptp" ] && json_add_string ptp "$ptp"
	json_close_object
}

示例code:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/sh         
. /usr/share/libubox/jshn.sh                                  
append() {       
        local var="$1"        
        local value="$2"    
        local sep="${3:- }"       
        eval "export -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\""
}     

_proto_push_ipv4_addr() {                                                  
        local str="$1"
        local address mask broadcast ptp       
        address="${str%%/*}"
        str="${str#*/}"
        mask="${str%%/*}"
        str="${str#*/}"
        broadcast="${str%%/*}"
        str="${str#*/}"       
        ptp="$str"       
        json_add_object ""   
        json_add_string ipaddr "$address"
        [ -n "$mask" ] && json_add_string mask "$mask"          
        [ -n "$broadcast" ] && json_add_string broadcast "$broadcast"      
        [ -n "$ptp" ] && json_add_string ptp "$ptp"          
        json_close_object                                                  
}
_proto_push_array() {        
        local name="$1"           
        local val="$2"                                
        local cb="$3"    
        [ -n "$val" ] || return 0       
        json_add_array "$name"
        for item in $val; do
                eval "$cb \"\$item\""    
        done      
        json_close_array         
}    

proto_add_ipv4_address() { 
        local address="$1"
        local mask="$2"
        local broadcast="$3"
        local ptp="$4"
        append PROTO_IPADDR "$address/$mask/$broadcast/$ptp"    
}                                                                       

proto_add_ipv4_address "192.168.1.2" "255.255.255.0" "192.168.1.255" "0"   
echo PROTO_IPADDR = ${PROTO_IPADDR}                             
json_init                                                       
_proto_push_array "ipaddr" "$PROTO_IPADDR" _proto_push_ipv4_addr 
json_dump                                                       

运行结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PROTO_IPADDR = 192.168.1.2/255.255.255.0/192.168.1.255/0
{ "ipaddr": [ { "ipaddr": "192.168.1.2", "mask": "255.255.255.0", "broadcast": "192.168.1.255", "ptp": "0" } ] }

3.proto_send_update()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_proto_notify() {
	local interface="$1"
	local options="$2"
	json_add_string "interface" "$interface"
	ubus $options call network.interface notify_proto "$(json_dump)"
}

proto_send_update() {
	local interface="$1"

	proto_close_nested
	json_add_boolean keep "$PROTO_KEEP"
	_proto_push_array "ipaddr" "$PROTO_IPADDR" _proto_push_ipv4_addr
	_proto_push_array "ip6addr" "$PROTO_IP6ADDR" _proto_push_ipv6_addr
	_proto_push_array "routes" "$PROTO_ROUTE" _proto_push_route
	_proto_push_array "routes6" "$PROTO_ROUTE6" _proto_push_route
	_proto_push_array "ip6prefix" "$PROTO_PREFIX6" _proto_push_string
	_proto_push_array "dns" "$PROTO_DNS" _proto_push_string
	_proto_push_array "dns_search" "$PROTO_DNS_SEARCH" _proto_push_string
	_proto_push_array "neighbor" "$PROTO_NEIGHBOR" _proto_push_ipv4_neighbor
	_proto_push_array "neighbor6" "$PROTO_NEIGHBOR6" _proto_push_ipv6_neighbor
	_proto_notify "$interface"
}

proto_send_update()函数的目的是将proto_init_update()中创建的参数:ipaddr,ip6addr,routes等传递到netifd。传递的方式是ubus call network.interface notify_proto

4.proto_run_command()、proto_kill_command()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proto_run_command() {
	local interface="$1"; shift

	json_init
	json_add_int action 1
	json_add_array command
	while [ $# -gt 0 ]; do
		json_add_string "" "$1"
		shift
	done
	json_close_array
	[ -n "$_EXPORT_VARS" ] && {
		json_add_array env
		for var in $_EXPORT_VARS; do
			eval "json_add_string \"\" \"\${$var}\""
		done
		json_close_array
	}
	_proto_notify "$interface"
}

proto_kill_command() {
	local interface="$1"; shift

	json_init
	json_add_int action 2
	[ -n "$1" ] && json_add_int signal "$1"
	_proto_notify "$interface"
}

proto_run_command()是通知netifd运行某个命令; proto_kill_command()是通知netifd停止运行某个命令;

5.proto_block_restart()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proto_block_restart() {
	local interface="$1"; shift

	json_init
	json_add_int action 4
	_proto_notify "$interface"
}

proto_block_restart()设置struct interface成员autostart = false ,禁止interface自动set up。

6.proto_set_available()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proto_set_available() {
	local interface="$1"
	local state="$2"
	json_init
	json_add_int action 5
	json_add_boolean available "$state"
	_proto_notify "$interface"
}

proto_set_available()设置interface的状态(struct interface成员available),如果状态为true,表明这个interface已经准备好了,可以进行set up。

7.proto_notify_error()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proto_notify_error() {
	local interface="$1"; shift

	json_init
	json_add_int action 3
	json_add_array error
	while [ $# -gt 0 ]; do
		json_add_string "" "$1"
		shift
	done
	json_close_array
	_proto_notify "$interface"
}

proto_notify_error()作用是向netifd发送指定interface的错误码。错误码可以任意的字符串。

8.init_proto()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
init_proto() {
	proto="$1"; shift
	cmd="$1"; shift

	case "$cmd" in
		dump)
			add_protocol() {
				no_device=0
				no_proto_task=0
				available=0
				renew_handler=0
				teardown_on_l3_link_down=0

				add_default_handler "proto_$1_init_config"

				json_init
				json_add_string "name" "$1"
				json_add_array "config"
				eval "proto_$1_init_config"
				json_close_array
				json_add_boolean no-device "$no_device"
				json_add_boolean no-proto-task "$no_proto_task"
				json_add_boolean available "$available"
				json_add_boolean renew-handler "$renew_handler"
				json_add_boolean lasterror "$lasterror"
				json_add_boolean teardown-on-l3-link-down "$teardown_on_l3_link_down"
				json_dump
			}
		;;
		setup|teardown|renew)
			interface="$1"; shift
			data="$1"; shift
			ifname="$1"; shift

			add_protocol() {
				[[ "$proto" == "$1" ]] || return 0

				case "$cmd" in
					setup) _proto_do_setup "$1";;
					teardown) _proto_do_teardown "$1" ;;
					renew) _proto_do_renew "$1" ;;
					*) return 1 ;;
				esac
			}
		;;
	esac
}

/lib/netifd/proto/目录下每一种协议执行时都会调用init_proto().然后再通过init_proto()处理dump、setup、teardown等事件。

下面以dhcp.sh协议为例介绍其执行流程:

1.ducp.sh '' dump流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmgG5y4D-1652324663394)(B58F5119F738417E85B1A2FA495C477B)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmgG5y4D-1652324663394)(B58F5119F738417E85B1A2FA495C477B)]
  • init_proto "$@"只会增加一个函数add_protocol()
  • add_protocol dhcp才是真正调用add_protocol()的地方

2.dhcp.sh setup流程

ducp.sh setup并不是用户手动调用的,通常都是由netifd调用,另外set up一般是需要携带多个参数的。这里只是为了介绍流程而提供的一个简单示例。

netifd-wireless.sh

待续

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Fortinet Fortimail 7.0.1 跨站脚本
# 软件链接:https://fortimail.fortidemo.com/m/webmail/(厂商在线演示)
Khan安全团队
2022/03/03
4990
【网络安全】「漏洞复现」(二)使用 Typora 的程序员注意了!不要再复制粘贴了!
本篇博文是《从0到1学习安全测试》中漏洞复现系列的第二篇博文,主要内容是分析 Typora 出现 XSS 漏洞的原因,对该漏洞进行复现,并在多场景中进行实现,往期系列文章请访问博主的 安全测试 专栏;
sidiot
2023/09/07
9680
【网络安全】「漏洞复现」(二)使用 Typora 的程序员注意了!不要再复制粘贴了!
CRLF攻击原理介绍和使用
注意:本文分享给安全从业人员,网站开发人员和运维人员在日常工作中使用和防范恶意攻击,请勿恶意使用下面描述技术进行非法操作。
全栈工程师修炼指南
2020/10/23
7.6K0
CRLF攻击原理介绍和使用
CVE-2023-27121漏洞分析:Pleasant Password Manager的XSS漏洞导致凭证泄露
为此,研究人员对该组织所采用的密码管理解决方案(Pleasant Password Server)进行了详细分析,并成功从中发现了一个反射型跨站脚本漏洞,即CVE-2023-27121,而该漏洞将导致存储的密码发生泄漏。
FB客服
2023/10/06
3530
CVE-2023-27121漏洞分析:Pleasant Password Manager的XSS漏洞导致凭证泄露
漏洞利用:如何利用Office Word远程代码执行漏洞CVE-2021-40444
在本文中,我们将给大家提供一个针对微软Office Word远程代码执行漏洞CVE-2021-40444的PoC。这个PoC中,我们会使用一个恶意docx生成器,并成功利用CVE-2021-40444,即微软Office Word远程代码执行漏洞。
FB客服
2021/10/11
1.4K0
Electron 安全与你我息息相关
它的应用面如此之广,以至于我们很难忽略它的存在。这篇文章的目的在于介绍当前 Electron 安全发展态势,更关键的是,最近 XZ 后门事件直接导致了供应链安全的担忧,虽然很多应用程序并不一定开源,但是这篇文章会给大家介绍一些通用的切实可行的检测措施,找出 Electron 程序可能存在的 XSS To RCE 和有危害的供应链威胁
意大利的猫
2024/04/15
2.2K0
Electron 安全与你我息息相关
Weblogic漏洞利用总结
Weblogic是美国Oracle公司出品的一个应用服务器(application server),确切的说是一个基于Java EE架构的中间件,是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器
黑白天安全
2021/03/16
4.9K0
Weblogic漏洞利用总结
CISA在漏洞利用列表中增加了7个新漏洞
美国网络安全和基础设施安全局(CISA)在其积极漏洞利用的安全问题列表中新添加了7个漏洞,其中包括来自Microsoft、Linux和Jenkins的漏洞。所谓的已知被利用漏洞列表是在网络攻击中被积极利用并需要由联邦民事执行局(FCEB)机构修补的漏洞列表。
FB客服
2022/06/08
7060
CISA在漏洞利用列表中增加了7个新漏洞
Nebula漏洞利用包CVE-2016-0189漏洞利用分析
1. 引言 在最近的一年里, 漏洞利用工具包(EK/Exploit Kit)市场风云变幻。2016年六月初,曾经极为猖獗的Angler EK 销声匿迹,Neutrino EK 迅速填补了空白。随后短短不到3个月时间,Neutrino EK 又转为地下,RIG EK继而成为最流行的漏洞利用工具包。今年3月初,RIG又淡出视线,而迎来了新的Nebula EK。 Nebula EK包中对CVE-2016-0189的漏洞利用,比其它漏洞利用包的漏洞利用方有了一定改进,这里进行一下深入分析。 所用工具: IE11(调
FB客服
2018/02/24
1.6K0
Nebula漏洞利用包CVE-2016-0189漏洞利用分析
Lanproxy 任意文件读取漏洞 (CVE-2021-3019)漏洞利用
Lanproxy是一个将局域网个人电脑、服务器代理到公网的内网穿透工具,支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面等等)本次Lanproxy 路径遍历漏洞 (CVE-2021-3019)通过../绕过读取任意文件。该漏洞允许目录遍历读取/../conf/config.properties来获取到内部网连接的凭据。
释然IT杂谈
2022/10/27
7490
Lanproxy 任意文件读取漏洞 (CVE-2021-3019)漏洞利用
CVE-2019-0708-Bluekeep漏洞利用告警
‍‍‍(‍9月7号0点左右)MSF更新了CVE-2019-0708漏洞利用模块,在MSF下使用,但根据官方显示‍,该模块仅针对64位的Win7系统和Server 2008 R2,但对于Server 2008 R2也有漏洞的特定的条件。
洛米唯熊
2019/09/09
7110
CVE-2019-0708-Bluekeep漏洞利用告警
Kibana 任意代码执行漏洞
这几天,有人公开了 Kibana 任意代码执行漏洞(CVE-2019-7609)的 POC。这个漏洞的主要原理是因为 Kibana 中的 Timelion 中具有原型链污染漏洞,因此可以导致指定变量的原型链污染,通过传递 NODE 环境变量参数,利用 Kibana 的 Canvas 会创建新进程的特性可以达到远程执行命令的效果。
madneal
2019/11/28
1.3K0
怎样利用CVE任意文件读取漏洞
怎么样通过hhhttttppp字符进行漏洞攻击(CVE-2023任意文件读取漏洞):
用户11372489
2024/11/20
480
IIS - 远程代码执行漏洞
开启WebDAV服务的IIS 6.0被爆存在缓存区溢出漏洞导致远程代码执行,目前针对Windows Server 2003 R2可以稳定利用,该漏洞最早在2016年7,8月份开始在野外被利用。
渗透攻击红队
2019/11/20
2.4K0
IIS - 远程代码执行漏洞
发现一款容器逃逸漏洞利用神器!
有在关注容器逃逸漏洞,最近在github上发现了一款零依赖Docker/K8s渗透工具包,集成了多个漏洞PoC/EXP,可轻松逃脱容器并接管K8s集群。
Bypass
2021/01/05
1.6K0
发现一款容器逃逸漏洞利用神器!
【安全漏洞】GitLab远程代码执行漏洞
GitLab是一个用于仓库管理系统的开源项目,其使用Git作为代码管理工具,可通过Web界面访问公开或私人项目。
运维朱工
2022/08/29
1.3K0
MyBB <= 1.8.31:SQL注入漏洞利用
MyBB是一种非常流行的开源论坛软件。然而,即使是一个流行的工具也可能包含可能导致整个系统崩溃的错误或错误链。在本文中,我们将介绍远程代码执行漏洞利用链。
信安百科
2023/10/02
6670
MyBB <= 1.8.31:SQL注入漏洞利用
Adobe Flash爆出严重漏洞:可导致代码任意执行 获取个人隐私
众所周知,Flash是网络攻击的首选目标。值得注意的是,Adobe在2017年7月宣布计划将Flash推入使用寿命终止状态,这意味着它将在今年年底不再更新或分发Flash Player。不过仍然在使用Adobe的用户需要警惕,因为Adobe 在今年5月被爆出了多个严重漏洞,好在Adobe于6月9日发布了安全更新,修复了漏洞。
行云博客
2020/08/11
1.2K0
漏洞情报|Drupal任意PHP代码执行漏洞风险通告
近日,腾讯云安全运营中心监测到,Drupal官方发布安全更新,披露了一个任意PHP代码执行漏洞,攻击者可利用该漏洞执行恶意代码,入侵服务器。 为避免您的业务受影响,腾讯云安全建议您及时开展安全自查,如在受影响范围,请您及时进行更新修复,避免被外部攻击者入侵。 漏洞详情 Drupal项目使用PEAR Archive_Tar库。PEAR Archive_Tar库已经发布了影响Drupal的安全更新(漏洞编号:CVE-2020-28949/CVE-2020-28948)。如果将Drupal配置为允许.tar,.
云鼎实验室
2020/11/26
6310
任意文件下载/读取漏洞利用
字面意思理解,就是你能够读取任何 你有权限读取到的文件,但有一个最主要的问题就是,你不知道 文件名
Elapse
2020/08/17
4.8K0
推荐阅读
相关推荐
Fortinet Fortimail 7.0.1 跨站脚本
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档