一,命令执行
参考资料( 命令执行漏洞详解_Toert_T的博客-CSDN博客)
(WEB常见漏洞之命令执行(基础原理篇)-阿里云开发者社区 (aliyun.com))
1,命令执行含义
当应用需要调用一些外部程序去处理内容情况下,就会用到一些执行系统命令的函数,比如php中的 system , exec , shell_exec , passthru , popen(PHP可动态执行PHP代码的有eval(system()) jsp有Runtime、getruntime()、exec() Asp/aspx有eval等)
当用户调用这些函数时,将恶意系统命令注入到正常命令中,造成命令执行漏洞
2,常见的命令
- 列出目录 ls 列出目录下的所有文件,包括以 . 开头的隐含文件的详细信息。
ls -al
读取文件的 用法(cat 文件名 )
- cat (cat 文件名 )
其中,"文件名"是待读取的文件名称,可以是相对路径或绝对路径。执行上述命令后, cat
将会打印出该文件的全部内容,并在终端显示。
- tac (
tac
会按照逆序打印出该文件的每一行内容,并在终端中显示。与cat
命令不同,tac
会 以文件的尾部开始读取,而不是从开头开始。) - nl(
nl
是一个命令行工具,用于在文本文件中添加行号。它可以显示文件的内容,并在每一 行前面添加行号。) - less(
less
是一个命令行文本文件查看器,用于浏览和查看大型文本文件的内容。与传统的 文本编辑器不同,less
允许您按页逐步滚动文件,并提供了一些快捷键和功能来帮助 您在文件中进行导航和搜索。) - more(与
less
类似,与less
不同的是,more
只支持向前浏览文件,而不支持向后浏览或搜索关键词。如果需要更强大的功能,例如向前向后翻页、搜索等,推荐使用less
命令。)
3,Windows系统支持的管道符如下:(CTFHub -技能树 命令注入-无过滤_ctfhub 命令注入-无过滤_So4ms的博客-CSDN博客)
“;”:执行完前面的语句再执行后面的语句。
“|”:显示后面语句的执行结果。
“||”:当前面的语句执行出错时,执行后面的语句。
“&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
4, 尝试一下ctfhub的命令注入(无过滤)题目
CTFHub(ctf--web--rce--命令注入) 解题参考(ctfhub技能树RCE命令注入解题 - FreeBuf网络安全行业门户)
二, 命令执行 绕过过滤
(命令执行绕过小技巧 - NPFS - 博客园 (cnblogs.com))
1,常见的过滤方式有
过滤了:
空格
命令分隔符
关键字
限制长度
限制回显
学习的小建议(https://blog.csdn.net/2301_77152761/article/details/131458009)
建议二:学会观察
我常说满互联网都是宝藏,观察是第一必备技能。如果你善于观察与总结,会更快发现一些门道,这种门道会让你比别人活得轻松。
建议三:圈子
在上面的这些过程中,你一定会对一些 ID 逐渐熟悉。你想结交一些人?拿出你的实力吧,分享很重要,没人喜欢伸手党或喷子。
特别建议去理解下圈子具备所有群体的那些经典属性,推荐书籍《自私的基因》与《乌合之众》。
建议四:创造力
我以前提过要具备足够的创造力,有两点很关键,一个是「视野」,一个是「专注」。视野是横,专注是纵,这两者需要平衡,因为人的精力有限(能量守恒定律)。只要任何一个失衡,两者都不将存在。
对大多数人来说,专注是最难的,毕竟这是一个立竿见影的熵减过程,一个信息的自组织过程。严肃地说,因为你的专注,加速了宇宙灭亡。至于为什么,这里就不展开了。总之,专注确实很难,很多时候你得逼自己。
因为自私的基因,人,总是在有意识无意识地爆发自己的创造力。有的创造力可以改变世界,有的创造力可以改变家庭,有的创造力可以改变自己。这些都是创造力。你需要多大的创造力,取决于你的基因,取决于你希望自己成为怎样的人。
毕竟,能改变世界的人也就「寥寥无几」...
建议五:一些不错的资源
打开你的浏览器,搜索:
i春秋、乌云、知道创宇研发技能表v3.0、FreeBuf,够了!
如果这几个线索还不能打开你的黑客世界观,不能让你具备足够多的创造力,那你问再多也没用。我建议你真的认真去细细品味他们给出的一些知识,顺藤摸瓜,逐渐将触角伸至全球。我前面说了学会观察
三, 文件包含
1,原理
通过PHP函数引入文件时,传入的文件名没有经过合理的验证,从而操作了预想之外的文件,就可能导致意外的文件泄漏甚至恶意代码注入(后端编程人员一般会把重复使用的函数写到单个文件中,需要使用时再直接调用此文件即可,该过程也就被称为文件包含。文件包含的存在使得开发变得更加灵活和方便,但同时也带了安全问题,导致客户端可以远程调用文件,造成文件包含漏洞。这个漏洞在php中十分常见,其他语言也有)
2,文件包含漏洞的环境要求
allow_url_fopen=On(默认为On) 规定是否允许从远程服务器或者网站检索数据 allow_url_include=On(php5.2之后默认为Off) 规定是否允许include/require远程文件
3, 文件包含分类
本地文件包含 Local File Inclusion,LFI
<?php
$file = $_GET['file'];
include $file;
?>
远程文件包含 Remote File Inclusion,RFI
四, 伪协议(CTF中常用的php伪协议总结_ctf php 伪协议_Y4tacker的博客-CSDN博客)
1, php伪协议
PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。
PHP伪协议其实就是支持的协议和封装协议
2, 常用的伪协议
file://用于访问本地文件系统,并且不受allow_url_fopen,allow_url_include影响 file://协议主要用于访问文件(绝对路径、相对路径以及网络路径)比如:http://www.xx.com?file=file:///etc/passsword
php:// 在allow_url_fopen,allow_url_include都关闭的情况下可以正常使用 php://作用为访问输入输出流 php://filter ,php://input
- php://filter
读取源代码并编码输出,
例如:http://127.0.0.1/cmd.php?cmd=php://filter/read=convert.base64-encode/resource=flag.php(针对php文件需要base64编码)
说明:
1. resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流
2. read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔
3. write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
4. <;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链
- php://input
php://input执行post数据中的代码:
例如: http://127.0.0.1/cmd.php?cmd=php://input POST数据:<?php phpinfo();?>
注意:当enctype=“multipart/form-data”的时候 php://input` 是无效的
- data://
自PHP>=5.2.0起,可以使用data://数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。一般需要用到base64编码传输
比如:通过data://text/plain协议来进行漏洞利用。
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
url=data://text/plain,<?php print_r(glob("*")); ?>