# [CSAWQual2016]i_got_id
开局三个超链接:
helloworld 提示 perl:
Forms 登陆页面,没有有用的信息,正常显示,无二次注入点,SQL 注入,ssti 都没有
就是 files 上传文件了,可以发现要上传 perl 文件:
直接猜测后端代码:
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 中传入文件路径参数,就可以读取任意文件。
抓包:将里面的东西删除,复制 15,16 行空一行粘贴
第一个 ------- 删除 Content-Type,加的那个加上这个,在添加的地方前面加上 ARGV
在 url 加上?cat+/etc/passwd (cat+/flag)(空格用 + 替代):
然后就出了:
参考链接:[CSAW 2016 I Got Id – Web200] i_got_id](https://tsublogs.wordpress.com/2016/09/18/606/)