CSAW CTF 2016 Quals: I Got Id


CSAW CTF 2016 Quals: I Got Id

摘自攻防世界,仅作个人收藏学习

【实验原理】

Perl语言漏洞

【实验目的】

了解和利用Perl语言漏洞

【实验环境】

Linux

【实验工具】

浏览器

【实验步骤】

1.打开题目环境,点击Files会跳转到/cgi-bin/file.pl文件中进行执行。

2.这里可以上传任何一个文件,然后会在下方打印出内容。那么我们猜测后台逻辑大概是这样的。

use strict; use warnings; use CGI;

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

3.那么,这里就存在一个可以利用的地方,param()函数会返回 一个列表的文件 但是 只有第一个文件会被放入到下面的file变量中。如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。

4.在正常的上传文件前面加上一个文件上传项ARGV,然后在URL中传入文件路径参数,可以实现读取任意文件。

5.那么到了这里,可以有两种方法处理:第一种,直接猜出flag文件/flag

6.第二种,通过管道的方式,执行任意命令,然后将其输出结果用管道传输到读入流中,这样就可以保证获取到flag文件的位置了。这里用到了${IFS}来作命令分割,原理是会将结果变成bash -c "ls/"的等价形式。最后得到flagFLAG{p3rl_6_iz_EVEN_BETTER!!1}

【实验总结】

CTF