首页 > 其他分享 >由alias引发的一次对于解释器的探索

由alias引发的一次对于解释器的探索

时间:2024-04-24 18:14:13浏览次数:16  
标签:解释器 探索 echo alias cai lian bash aliases

起因:一开始是记得之前看到过能够让linux把一个命令变成别的命令的方式,比如输入的是ls结果实际执行的是其他东西,然后想将这种方式用在awd上边(千辛万苦打了进来结果一执行发现啥也干不了)

然后搜到了alias这个别名命令

用法:alias 实际输入='实际执行'

比如说alias ls='echo 123',这样ls后输出就会变成123

 (这个命令直接执行就行,我这里是整了一晚上习惯了直接改配置文件

后来试了一晚上,踩了挺多坑才发现实际上实现不了

首先是踩坑,第一个就是bash和zsh的问题记得不要用kali或者其他解释器是zsh的试,如果非要用应该也可以,但是要把所有的bash改成zsh,因为从2020.4版本开始kali就使用zsh作为默认解释器而不是bash,用bash似乎会爆很多错(其实解释器这里我就该意识到不对劲的,唉)

这里我还以为是因为改文件改的不对,捅咕了半天~/.bashrc这个文件

我这里使用的是vps,系统是ubuntu,用的还是bash环境

其次是想要保留原有命令功能,我试了一晚上发现不太行

 通过预先将命令保存到别的别名中好像行不通

然后在解决脚本化的过程中,因为上边的报错(指bash和zsh)将修改的脚本从~/.bashrc换到了~/.bash_aliases

贴下代码:

#!/bin/bash
#目前已知绕过方式:常见的都能绕
#变量拼接:a="ca";b="t";$a$b
#转义符号:ca\t,ca''t
#空变量ca$*t
#直接用路径:/bin/ls等 #恢复后需要重连/执行. .bash_aliases才能变回原来的,否则当前shell还是被改的,同时也改不了已经连接的 echo "alias unalias='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias vi='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias touch='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias rm='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias mkdir='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias rmdir='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias cat='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias ls='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias whoami='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias tac='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias head='echo cai jiu duo lian'" >> ~/.bash_aliases echo "alias tail='echo cai jiu duo lian'" >> ~/.bash_aliases #echo "alias alias='echo cai jiu duo lian'" >> ~/.bash_aliases sleep 3 . .bash_aliases

 这是改命令的脚本,下边是恢复的

sed -i "1,\$d" .bash_aliases
. .bash_aliases

 如上注释所说,执行修改和恢复脚本后都需要重连才能好使

然后是上边保存原有命令功能的问题,我忽然想到既然是要用在awd里,而且需要重连才能生效,那让我们队先连上去然后再开,直接把所有命令都改了也影响不到我们

于是就决定这样愉快地处理这个问题

那现在具体功能已经实现了,也没有什么bug,该想想别人要是有这种东西怎么绕过

结果刚一试就发现,这玩意除了最基本的直接执行原始命令剩下啥都过滤不了,就跟只过滤了flag没过滤任何特殊符号的php题,闭着眼睛都能打

虽然但是这还不是最悲剧的,原本寻思就算不能防任何绕过吧,那万一哪个队写脚本批量打的时候是直接执行命令的,结果正好被我的别名给防住了呢

结果连上蚁剑一试,不好使!

于是乎我开始搜php的system等函数是如何执行代码的

 

然后发现我的alias只能改解释器这边,但是那些函数根本不走这里

我又想到那弹shell不是要用bash吗,虽然他换个nc就能出来了但是总归让我研究了一晚上的东西有点用吧

结果回头一瞅:

 这bash里边也没用命令啊,这我改谁别名去

于是我就想着详细分析一下system这几个命令执行的函数,试图找出某种能够像这样修改它们的命令的方式

想着找找system的源码看到底它们长什么样,结果搜了半天居然没搜到

最后还是找到了p牛的博客(感觉p牛的博客里有着整个宇宙):https://tttang.com/archive/1450/

通过p牛的分析以及我的理解,最终发现它们调用的还是这个sh

而sh又是能够使用alias的

 

理论上来说应该能够让sh里的命令也全部被修改

结果又看到这句话

 

还是太心急了,还是看完p神文章再说吧

然后发现对咱们有帮助的似乎就到这里,总结了一下p牛的文章,大概就是在可以控制环境变量的情况下,执行了一个system函数(不可控的),如何getshell

p牛是从system这个函数下手,经过了popen和sh,找到dash和bash并进行审计

结果很悲伤的是dash这边并没找到利用方式,而是bash有了解决方法(这也和咱们关系不太大)

而咱们目前应该考虑的是dash是否有能够在使用sh -c这种方式时仍然能够像bash一样继续让bash_aliases这种文件生效

但是很遗憾的是不仅是dash,就连bash也不支持

 这又让我想到了-c和不带-c到底有什么区别

进一步尝试发现在手动使用bash命令时甚至没有alias这个命令?

 然后了解到了还有内建命令这一说以及posix标准等等

感觉看不太懂,不如直接学p神瞅瞅dash的源码到底长啥样(虽然我的c语言功底不怎么样,不过就当补基础了)

p牛提供了三种方法,这里对比一下决定使用最简单的第三种直接通过包管理器下载

直接使用apt source命令来下载对应的源码

下载后获取到的这四个文件如p神所说

 这里我们的则是dash的源码

 直接进到第一个dash文件夹中

 源码都在src中,其他都是更新日志之类的东西

 审了半天感觉自己还是太菜了,看不出来啥

连传参的地方到底在哪都没找到

于是就简单看了下p牛找到的地方

 

 感觉能从这种地方找出来洞实在是太强了

实在是审不动代码,最后跟着p牛的文章复现了下收尾

标签:解释器,探索,echo,alias,cai,lian,bash,aliases
From: https://www.cnblogs.com/theskyforfly/p/18154200

相关文章

  • 探索性测试:指南针测试、卖点测试,极限测试等
    指南针测试法“指南针”作用在于为航行者辨别方向。对于测试人员来说,使用指南针测试法可以快速地找到新待测项目的测试切入点。这些“指南针”可以包括:使用手册、接口文档、帮助文档、用户文档、开发文档等等。参考文档进行测试,一则可以检测文档描述的准确性和易于理解性;二则......
  • 基于vllm,探索产业级llm的部署
    一、基本情况vLLM部署大模型官方网址:https://vllm.aigithub地址:https://github.com/vllm-project/vllmvLLM是一个快速且易于使用的库,用于进行大型语言模型(LLM)的推理和服务。它具有以下特点:速度快:在每个请求需要3个并行输出完成时的服务吞吐量。vLLM比HuggingFace......
  • 深度解读《深度探索C++对象模型》之C++虚函数实现分析(二)
    接下来我将持续更新“深度解读《深度探索C++对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。第一篇请从这里阅读:深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)这一篇主要讲解多重继承情况下的虚函数实现分析。在多重......
  • 深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)
    接下来我将持续更新“深度解读《深度探索C++对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。假如有这样的一段代码,代码中定义了一个Object类,类中有一个成员函数print,通过以下的两种调用方式调用:Objectb;Object*p=newObjec......
  • JTCR-探索 java.lang-16
    原始类型包装器为了在必须使用类类型的地方使用原始类型,每个原始类型都有一个包装器,该包装器将原始类型封装成类类型。抽象类Number作为所有数值类型包装类的父类,定义了返回不同类型值的抽象方法。它的子类有Byte、Short、Integer、Long、Float和Double。这些抽象方法形式......
  • 中电金信:向“新”而行——探索融合架构的项目管理在保险行业的应用
    近年来,险企在政策推动、市场牵引、自身发展、新技术应用日趋成熟等内外部因素的驱动下,积极投身到数字化转型的浪潮中。在拜访各类保险客户和合作项目的过程中,我们发现不少险企在数字化转型中或多或少都面临着战略如何落地、技术如何承接和实现业务需求、投入产出比如何最大化等困......
  • 数字化变革探索:检验检测行业转型思路揭秘
    行业背景随着科技的不断进步和实验室管理需求的不断发展,传统实验室管理方式面临着许多问题,如采用纸质记录和手工操作、数据易丢失和难以追溯、效率低下、流程复杂以及质量管理不规范等。这些问题已经成为制约实验室发展和提升运行效能的瓶颈。与此同时,检验检测行业也面临以下挑战......
  • SLS 查询新范式:使用 SPL 对日志进行交互式探索
    作者:无哲引言在构建现代数据和业务系统的过程中,可观测性已经变得至关重要,日志服务(SLS)为Log/Trace/Metric数据提供了大规模、低成本、高性能的一站式平台服务,并提供数据采集、加工、投递、分析、告警、可视化等功能,从而全面提升企业在研发、运维、运营和安全等各种场景的数字化......
  • 深度解读《深度探索C++对象模型》之数据成员的存取效率分析(三)
    接下来我将持续更新“深度解读《深度探索C++对象模型》”系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表。前面两篇请通过这里查看:深度解读《深度探索C++对象模型》之数据成员的存取效率分析(一)深度解读《深度探索C++对象模型》之数据成员的......
  • 使用pipenv后,如何在pycharm中添加解释器
    问题:我用pyenv安装的python3.10,执行pyenvwhichpython3.10显示:/Users/hxjs/.pyenv/versions/3.10.0/bin/python3.10那系统级别的python解释器路径就是:/Users/hxjs/.pyenv/versions/3.10.0/bin/python3.10我在项目下,使用pipenv--python3.10给项目安装了python3.10,并使用pi......