还能这样执行命令?命令执行绕过及防护规则研究

一、引言

我是渗透工程师->很多小伙伴在做攻防实战时发现有时在命令执行的payload中穿插单双引号命令也能执行成功,有时却又不行。那么到底在什么条件下用什么样的方式能实现对命令的切分呢?其中的原理又是如何?有没有其他绕过方式?本篇文章将详细探讨此类问题。

我是安全研究员->对防护侧而言,针对命令执行的拦截一直是老大难问题。这里我们还是首推终端上的解决方案,通过在终端上去hook危险命令的方式是目前最有效的拦截方案。但很多时候我们不具备这种条件不得不采用流量监测的方式去拦截危险操作,这时我们就需要深入了解其中的原理以便更精准的定位和拦截了。

二、关键字

2.1 关键字 '

windows:

' 在windows里无任何特殊意义,仅代表单引号字符本身

linux:

' 在linux里表示字符串拼接,字符串拼接的主要是为了应对空格本身对命令的分割。运用这个特性我们可以将命令进行“拆分”,从而绕过关键字检测,注意'必须成双成对的出现(偶数个)。

以下命令均等效于whoami:

'whoam'iw'h'oamiwh''oami /*连续两个单引号并不是双引号*/w''h''oa'm'i

使用奇数个'会使命令进入交互式shell导致无法执行成功:

2.2 关键字 "

windows:

" 在windows里表示字符串拼接,主要也是为了应对空格本身对命令的分割,但有趣的是在windows下的拼接符并没有linux下使用那么严格,我们可以用一个例子来说明,访问C:\Program Files\WinRAR\WinRAR.exe

直接访问肯定报错(由于没有加引号,命令被空格分割了):

加上双引号后问题解决:

事实上我们可以用双引号这样分割,也能正常访问:

C:\Progr"am F"iles\WinRAR\WinRAR.exe

对应到我们的实际应用中来,windows下的双引号在命令执行时都会被直接忽略掉,并且在不引入空格的条件下,无论个数如何都不影响:

以下命令均等效于whoami:

who"amiwh"o"amiwho""ami

linux:

linux下双引号和单引号是一个效果,但是双引号依旧只能以偶数个出现:

2.3 关键字 \

windows:

\ 在windows里无任何特殊意义,仅代表反斜线字符本身

linux:

\ 在linux里表示转义符,利用这个特性可以切割任何命令。因为代表的是转义符,因此奇数个或者偶数个自然无所谓(只要不连续出现)

以下命令均等效于whoami:

who\ami

wh\o\ami

2.4 关键字 ^

windows:

^ 在windows里表示转义符,利用这个特性可以切割任何命令。因为代表的是转义符,因此奇数个或者偶数个自然无所谓(只要不连续出现)

以下命令均等效于whoami:

w^hoami

w^h^oami

linux:

^ 在linux里无任何意义,仅代表^字符本身

2.5 关键字 ` 与&()

windows:

`和&() 在windows里无任何意义,仅代表`字符本身

linux:

` 在linux里反引号括起来的内容是系统命令,在bash上会优先执行它,其作用与$()一样

那么在命令拼接时,我们只需要保证``或$()里命令执行的结果为空就能实现命令的分割了,也就是说只要出现偶数个连续的`就可以:

除此之外,我们想找一些命令执行结果为null的命令穿插在命令执行符内实现截断分割的效果。但实际测试的时候发现,即使命令执行不成功,返回了null后也不影响原有命令的执行,也就是说实际在命令执行符内穿插任何字符串(只要字符串执行命令失败)都能起到分割的效果。

以下命令均等效于whoami:

wh`xxxanycodexxx`oami

wh$(xxxanycodexxx)oami

2.6 关键字 $*和$@和$1

windows:

代表字符本身

Linux:

$x 在linux里有特殊含义,包括:

$$

Shell本身的PID(ProcessID,即脚本运行的当前进程ID号)

$!

Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)

$?

最后运行的命令的结束代码(返回值)即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)

$-

显示shell使用的当前选项,与set命令功能相同

$*

所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。

$@

所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。

$@ 跟$*类似,但是可以当作数组用

$#

添加到Shell的参数个数

$0

Shell本身的文件名

$1~$n

添加到Shell的各参数值。$1是第1参数、$2是第2参数…

感兴趣的小伙伴可以自行研究,总之可以直接利用$*、$@、$1这三个字符进行无限制关键字切分

以下命令均等效于whoami:

wh$*oami

wh$@oami

wh$1oami

wh$*o$*$*ami

2.7 总结

关键字windowslinux
'无法利用偶数个
"无限制利用偶数个
\无法利用无限制利用(不能连续)
^无限制利用(不能连续)无法利用
`无法利用偶数个(可穿插字符串)
$()无法利用无限制利用(可穿插字符串)
$*无法利用无限制利用
$@无法利用无限制利用
$1无法利用无限制利用

三、其他利用场景

3.1 字符串拼接(linux)

a=w;b=ho;c=ami;$a$b$c

3.2 字符串拼接(windows)

set a=who&&set b=ami && call %a%%b%

3.3 base64编码

仅限linux环境:

echo "d2hvYW1p"|base64 -d|bash

`echo 'd2hvYW1p'|base64 -d`

$(echo 'd2hvYW1p'|base64 -d)

3.4 hex编码

仅限linux环境:

echo 77686F616D69 | xxd -r -p |bash

3.5 利用环境变量

仅限linux环境:

echo ${PATH}

${PATH:6:1} ->o

${PATH:8:1} ->a

wh${PATH:6:1}${PATH:8:1} mi ->whoami

当然这里不一定非要用${PATH},能找到其他利用点也行。

3.6 绕过文件名限制

以下规则可用于绕过命令执行时文件名上的限制(对文件包含、读取等在url参数上的利用实际没效果,因为此类操作一般是通过脚本语言去读的文件而不是系统命令)

cat sh[abcde]el.php

cat sh[a-z]el.php

cat sh*

cat /???/pass*

cat /etc$u/passwd

四、关于命令拼接

众所周知,命令拼接是命令执行漏洞最经典的利用方式。命令拼接通常是通过管道符的方式完成利用的,不同管道符含义不同,这也给我们在流量侧穷举危险命令提供了更大阻碍,下列字符都可以作为命令拼接使用:

windows 下:

| 直接执行后面的语句

|| 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句

& 前面和后面命令都要执行,无论前面真假

&& 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

Linux 下:

; 前面和后面命令都要执行,无论前面真假

| 直接执行后面的语句

|| 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句

& 前面和后面命令都要执行,无论前面真假

&& 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

实际上几乎所有的命令拼接符在漏洞挖掘和利用时都能使用,如何结合前面的绕过方法做准确拦截是需要仔细斟酌的问题,像 ; 这样的字符规则写不好很容易产生误报。

五、关于空格

有些时候我们会遇到在命令中无法穿插空格的场景,以下字符可以代替空格使用(仅限linux):

$IFS$1~9

${IFS}

{command, parameter}

题外话

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

  • 2023届全国高校毕业生预计达到1158万人,就业形势严峻;
  • 国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。

 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 

网络安全行业特点

1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

 2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。

 行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

 1.学习路线图 

 攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

  (都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。 

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。 

 还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

 最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取 

  

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

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

相关文章

openlayers 轨迹回放(历史轨迹),实时轨迹

本篇介绍一下使用openlayers轨迹回放(历史轨迹),实时轨迹 1 需求 轨迹回放(历史轨迹)实时轨迹 2 分析 主要是利用定时器,不断添加feature 轨迹回放(历史轨迹),一般是…

Ubuntu 22.04 MySQL安装并设置远程访问

Ubuntu 22.04 LTS环境下 1 安装 # 更新软件包列表 sudo apt update# 查看可使用的安装包 sudo apt search mysql-server# 安装最新版本(显示冲突装不了,可以先卸了再装) sudo apt install -y mysql-server # 安装指定版本 sudo apt install…

rga_mm: RGA_MMU unsupported Memory larger than 4G!解决

目录 报错完整log如下:解决方案:报错完整log如下: [ 3668.824164] rga_mm: RGA_MMU unsupported Memory larger than 4G! [ 3668.824305] rga_mm: scheduler core[4] unsupported mm_flag[0x0]! [ 3668.824320] rga_mm: rga_mm_map_buffer map dma_buf err

如何有效地优化 Erlang 程序的内存使用,以应对大规模数据处理的需求?

要有效地优化Erlang程序的内存使用,以应对大规模数据处理的需求,可以考虑以下几个方面: 减少不必要的内存分配:避免过多的数据复制和不必要的数据结构创建。可以使用Erlang的二进制数据类型来避免数据复制,使用原子数据…

Linux环境下安装MySQL5.7.20(源码安装)

📣📣📣 哈喽!大家好,本专栏主要发表mysql实战的文章,文章主要包括: 各版本数据库的安装、备份和恢复,性能优化等内容的学习。。 📣 ***如果需要观看配套视频的小伙伴们,请…

【Apache Doris】周FAQ集锦:第 8 期

【Apache Doris】周FAQ集锦:第 8 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…

MySQL集群如何实现读写分离

数据源配置:定义了主从数据库的连接池。读写分离规则:通过MasterSlaveRuleConfiguration定义了主从数据库的读写分离规则。负载均衡算法:定义了从数据库的负载均衡算法。创建ShardingDataSource:使用数据源和读写分离规则创建了Sh…

STM32学习-HAL库 定时器

这里先介绍一些HAL的一些库函数,HAL_XXX_Init()这种是外设初始化函数,一般是传入结构体。 HAL_XXX_MspInit()这种是外设硬件相关的初始化函数,包括GPIO,NVIC,CLOCK等,一般会在HAL_XXX_Init()中调用。HAL_XXX_IT()这是与外设中断相…

Scikit-learn:原理与使用指南

文章目录 1. Scikit-learn 的原理1.1 一致性API1.2 模块化和可扩展性1.3 高效性 2. Scikit-learn 的使用2.1 安装 Scikit-learn2.2 导入必要的库和数据2.3 训练模型2.4 预测和评估2.5 交叉验证和网格搜索 3. 总结 Scikit-learn 是 Python 中一个非常强大且易于使用的机器学习库…

【CSS】深入探讨 CSS 的 `calc()` 函数

深入探讨 CSS 的 calc() 函数 calc() 是一个 CSS 函数,用于在样式表中进行数学计算,从而动态地设置 CSS 属性值。它允许开发者在指定长度、百分比、数值等时,进行加减乘除运算。通过 calc() 函数,我们可以实现更灵活和响应式的设…

vue3项目使用@antv/g6实现可视化流程功能

文章目录 项目需求一、需要解决的问题二、初步使用1.动态数据-组件封装(解决拖拽会留下痕迹的问题,引用图片,在节点右上角渲染图标,实现,事现旋转动画,达到loading效果)2.文本太长,超出部分显示(...),如下函…

Fluent udf编译的一些注意事项

Fluent udf编译的一些注意事项 参考链接:1.fluent UDF编译环境处理_哔哩哔哩_bilibili 2.【觉兽课堂】ANSYS FLUENT UDF教学02:UDF语法及编写 小白入门必备_哔哩哔哩_bilibili #1 需要注意的内容 ##1.1 修改vs的路径 在fluent路径中,打开ud…

Golang笔记:使用serial包进行串口通讯

文章目录 目的使用入门总结 目的 串口是非常常用的一种电脑与设备交互的接口。这篇文章将介绍golang中相关功能的使用。 本文使用的包为 :go.bug.st/serial https://pkg.go.dev/go.bug.st/serial https://github.com/bugst/go-serial 另外还有一些常见的包如&…

cpp入门(命名空间,输入输出与缺省参数)

目录 cpp关键字 命名空间 命名空间的使用 1.加名称及作用域限定符 2.使用using将命名空间中某个成员引入 3.展开命名空间 注意 输入输出 缺省参数 cpp关键字 命名空间 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字&#xff0c…

【odoo | JavaScript | ES6】浅谈前端导入(import)和导出(export)

概要 前端开发中的导入(import)和导出(export)是指在JavaScript模块系统中引入和输出代码的机制。ES6(ECMAScript 2015)引入了这种模块化系统,使开发者可以更加高效地组织和管理代码。 导出 导…

素数普遍公式与哥德巴赫猜想

详见百度百科【素数普遍公式】 公元前250年同样是古希腊的数学家埃拉托塞尼提出一种筛法: (一)“要得到不大于某个自然数N的所有素数,只要在2---N中将不大于 的素数的倍数全部划去即可”。 (二)将上面的…

NodeJs实现对本地 mysql 数据库的增删改查

写在前面 今天我们接着写nodejs对数据库的操作,今天实现简单的增删改查,读之前请先移步到这里NodeJs 连接本地 mySql 数据库获取数据,避免后续一些代码出险阅读断层。 安装 nodemon npm install nodemon因为 nodejs 的服务是本地启动,避免后…

FPGA开发Vivado安装教程

前言 非常遗憾的一件事情是,在选修课程时我避开了FPGA,选择了其他方向的课程。然而,令我没有想到的是,通信项目设计的题目竟然使用FPGA,这简直是背刺。在仅有的半个月时间里,准备这个项目确实是非常紧张的…

故障模式与影响分析(FMEA)

故障模式与影响分析FMEA 故障模式与影响分析(FMEA)是一种系统性的风险评估方法,主要用于识别潜在的产品或过程故障模式(即系统或组件失效的方式),以及这些故障对系统性能的影响程度。FMEA通过分析可能的故…

高考英语3500词

DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 DAY7 DAY8 DAY9 DAY10 DAY11 DAY12 DAY13 DAY14 DAY15 DAY16 DAY17 DAY18 DAY19 DAY20 DAY21 DAY22 DAY23 DAY24 DAY25 DAY26 DAY27 DAY28 DAY29 DAY30 DAY31 DAY32 DAY33 DAY34 DAY35 DAY36 DAY37 DAY38 DAY39 DAY40