XCTF-高手进阶区:i-got-id-200

题目

在这里插入图片描述
在这里插入图片描述
三个文件,都是perl写的,Files存在上传文件,它会将上传的文件内容打印出来
在这里插入图片描述
没接触过perl,看了别人的wp,就简单说一下,以后学了perl再来回味
因为它会将上传的文件内容打印出来,所以猜测后台存在param()函数
param()函数会返回一个列表的文件但是只有第一个文件会被放入到下面的file变量中。如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。对正常的上传文件进行修改,可以达到读取任意文件的目的
大佬们猜的后台代码

use strict;
use warnings; 
use CGI;
my $cgi= CGI->new;
if ( $cgi->upload( 'file' ) ) { 
    my $file= $cgi->param( 'file' );
     while ( <$file> ) { print "$_"; }
} 

接下来就是payload了
1、先bp抓包,然后将上传的文件名和内容复制一份粘贴,如下:
在这里插入图片描述
2、将filename删去,内容修改为ARGV,读取file.pl看看有什么(就猜它在/var/www/cgi-bin/下!)
在这里插入图片描述
3、根据返回的信息,可以肯定这里存在parm函数,然后我们利用bash来读取文件,先看看/目录下有哪些文件
在这里插入图片描述
4、读取flag文件
在这里插入图片描述

补充

1、何为/bin/bash -c
/bin/bash -c表示指定将命令转为一个完整命令执行,可以理解为执行linux命令
例:
在这里插入图片描述
2、何为${IFS}
$IFS是shell的特殊环境变量,是Linux下的内部区域分隔符。$IFS中存储的值可以使空格、制表符、换行符或者其他自定义符号,可以在linux中使用${IFS}代替空格
例:
在这里插入图片描述
3、为什么要加|?
|:管道符左边命令的输出就会作为管道符右边命令的输入,这里为什么要加我也没搞明白,如有知道的朋友评论告诉我,谢谢。
举例一个常见的用法吧:
cat后输出的内容,作为|后面内容的输入,这里是交给grep执行
在这里插入图片描述
注:经测试,${IFS}和/bin/bash联用时,不代表空格,为啥,有大佬知道的可以告诉下,我之后也去查查资料,如果知道了,会更新。
在这里插入图片描述
IFS更详细的可以参考:https://www.jianshu.com/p/2d34ef30361b

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1stPeak

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

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

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

打赏作者

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

抵扣说明:

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

余额充值