提起linux命令想必大家都不陌生
诸如经常用到的 ls、cat、cd
通过这些命令可以执行相应的系统功能
那么你知道这些命令的调用原理吗?
Linux命令又分为内部命令和外部命令
内部命令
shell内嵌命令内置命令在系统启动时就调入内存,常驻内存效率高。
内部命令是写在bash源码里面的,执行速度快,因为解析内部命令shell不需要创建子进程。
外部命令
系统的软件功能,用户需要时才从硬盘中读入内存,是磁盘中的可执行程序。
Linux外部命令本质上是elf可执行程序,当我们在终端输入相应的命令时,其实是在调用这些 $PATH目录中的可执行程序。
外部命令是在bash之外额外安装的,可通过“echo $PATH”命令查看外部命令的存储路径。
常见$PATH /bin,/sbin,/usr/bin,/usr/sbin,/usr/local/sbin
具体命令的源码实现大家可查看GNU源码 http://ftp.gnu.org/gnu/
可通过type 命令查看是否内部命令
如图所示,cd为shell内建命令,cat为外部命令,路径/bin。
常见 内部命令 cd、echo、read、source、exit等。
可通过enable 命令查看内部命令
图中所示为部分内部命令
图示为/bin 目录下的外部程序,删除ls以及cat命令 (*危险操作建议备份)
*删除ls命令可能导致系统UI 错误,建议备份后还原。
现在测试一下
提示ls、cat未安装,无法完成命令操作。
But……
因为 ls、cat本身是可执行程序,把它们放在测试目录下直接运行,就可以实现原有命令的功能操作。具体使用参数和命令操作没有区别。
最后记得还原
扩展思考
在一些ctf比赛中,可能将查看flag的一些外部命令ban掉,导致获取flag的难度增大。
遇到这种情况就可以使用内部命令组合的方式实现获取flag。
使用 linux 内部命令 read 实现ls功能
read -e -p "plz press TAB:" list
使用 linux 内部命令 read 读取flag文件
第一种方法:read -u
创建 fd
exec 3<flag
读取
read -u 3 var
显示
echo "Line $count:$var"
关闭 fd
exec 3<&-
【沙箱可用】第二种方法:重定向
文件内容作为输入
read line <flag
显示
echo "Line $count:$line"
以上内部命令的功能及详细使用方法可以自行查阅。
至于一些其他的组合功能,这里抛砖引玉,大家可以自行尝试。
如果你还想了解CTF比赛中一些相关知识,在这里也推荐给大家四叶草安全创研中心的CTF竞赛培训班,在线学习+实操,提升更快哦~
原文始发于微信公众号(小草培养创研中心):技术流丨关于linux命令那点事
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论