考点:
Perl后端文件上传
传入ARGV的文件,Perl会将传入的参数作为文件名读出来
启动环境:
有三个链接,依次点击查看:
输入框尝试了一些简单注入,并无结果,查看文件上传点,其提示是Perl文件上传
首先上传一个文件内容为test的文本文件,与输入框结果相似,上传成功后回显了文件内容:
做到这就没了思路,查阅大佬Writeup,均是猜测出后端代码,参考资料:
[CSAW 2016 I Got Id – Web200]i_got_id](https://tsublogs.wordpress.com/2016/09/18/606/)
use strict;
use warnings;
use CGI;
my $cgi= CGI->new;
if ( $cgi->upload( 'file' ) )
{
my $file= $cgi->param( 'file' );
while ( <$file> ) { print "$_"; } }
其中my $file= $cgi->param( 'file' );:
param()函数返回一个列表的文件。但是只有第一个文件会被放入file变量中。
while ( <$file> )中,<>不能处理字符串,除非是ARGV,因此循环遍历并将每个值使用open()
调用。
对于读文件,如果传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。
所以,在上传的正常文件前加上一个文件上传项ARGV,然后在URL中传入文件路径参数,就可以读取任意文件。
在上传文件时抓取数据包:
复制16-17行内容,并删除filename属性,并填入ARGV,也就是如下形式:
在请求的URL中填入所执行的命令cat+/ect/passwd(空格用+代替):
成功得到回显:
接下来猜测flag在/目录下,构造命令cat+/flag:
发送数据包后,得到回显:
原文来自CSDN博主「Senimo_」|侵删
原文始发于微信公众号(寰宇卫士):BUUCTF [CSAWQual 2016] i_got_id-解题步骤详解
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论