Problem: [CSAWQual 2016]I_Got_ID
思路
- 解题大致思路
抓包发现都是.pl文件,然后两个文件上传文件分别上传发现内容全部打印出来了(php代码没有)
猜想后台应该用了param()函数:param()函数会返回一个列表的文件但是只有第一个文件会被放入到下面的接收变量中。如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。对正常的上传文件进行修改,可以达到读取任意文件的目的。
将上传的文件类型及文件内容处复制再粘贴一行,将filename去掉,然后内容填入ARGV,然后盲猜flag文件,读取试试
当然有更加规范的方法
先ls%20-l%20.%20|(即执行ls -l . |命令)查看当前文件(通过管道的方式,执行任意命令,然后将其输出结果用管道传输到读入流中)
用./file.pl(查看源码)
use strict;
use warnings;
use CGI;
my $cgi= CGI->new;
if ( $cgi->upload( 'file' ) ) {
my $file= $cgi->param( 'file' );
while ( <$file> ) { print "$_"; }
}
ls%20-l%20/%20|(即ls -l / |)(读根目录)
最后cat%20/flag%20|读flag就行。(反正就是要主要空格要编码,命令后要管道符)
EXP
- 具体攻击代码
总结
- 对该题的考点总结
