xctf攻防世界 Web高手进阶区 i-got-id-200

博主通过Dirsearch探测发现Perl脚本回显漏洞,利用upload文件功能,通过修改参数和使用`/bin/bash-c`执行命令,成功读取并展示flag。文章详细解析了Perl的param()函数和IFS环境变量的应用。

1. 进入环境,查看题目

在这里插入图片描述
使用dirsearch扫一下,如图:
在这里插入图片描述
没有什么问题,第二个Forms点击去后,发现有回显,于是思考sql注入?一顿操作,发现也没有什么有用的信息。。。麻了!

2. 问题分析

  1. 点击Files,发现可以上传文件
    上传个txt试试,发现上传啥就回显啥。另外发现页面都是.pl,查了查,是脚本语言perl。大概能get到出题的突破口,利用perl漏洞或者回显注入,从而拿到后台的flag,无奈对perl不熟,无从下手,查看wp后跟着操作来。

抓包上传文件,看看传输的内容,如图:
在这里插入图片描述
a.txt内容为123,上传什么出现什么,大神们就能猜到代码了。。。我也是服气。

因为它会将上传的文件内容打印出来,所以猜测后台存在param()函数。param()函数会返回一个列表的文件但是只有第一个文件会被放入到下面的file变量中。如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。对正常的上传文件进行修改,可以达到读取任意文件的目的。我们不猜代码,一步步来:
复制下面一遍代码,将filename删去,内容修改为ARGV,读取file.pl看看有什么(就猜它在/var/www/cgi-bin/下!)同时修改POST地址后的参数,作为要读取的文件,如图:
在这里插入图片描述
我么可以看到回显源码:
在这里插入图片描述
果然验证了有param()函数的猜想。

  1. 利用bash读取一下主目录有啥文件
/cgi-bin/file.pl?/bin/bash%20-c%20ls${IFS}/|

%20是空格,原始命令为:/cgi-bin/file.pl?/bin/bash -c ls${IFS}/|,为什么这么构造?后面有解释,先看效果:
在这里插入图片描述

  1. 发现目录中有flag,同样套路读取flag
    如图:在这里插入图片描述
    cyberpeace{caddee4d044004c61124d0029e8d496c}

  2. 跟着大佬反思

    1. 何为/bin/bash -c?
      /bin/bash -c表示指定将命令转为一个完整命令执行,可以理解为执行linux命令
      例:
      在这里插入图片描述
    2. 何为${IFS}?
      I F S 是 s h e l l 的 特 殊 环 境 变 量 , 是 L i n u x 下 的 内 部 区 域 分 隔 符 。 IFS是shell的特殊环境变量,是Linux下的内部区域分隔符。 IFSshell,LinuxIFS中存储的值可以使空格、制表符、换行符或者其他自定义符号,可以在linux中使用${IFS}代替空格
      例:
      在这里插入图片描述
    3. 为什么要加|?
      |:管道符左边命令的输出就会作为管道符右边命令的输入,这里为什么要加我也没搞明白,如有知道的朋友评论告诉我,谢谢。
      举例一个常见的用法吧:cat后输出的内容,作为|后面内容的输入,这里是交给grep执行
      在这里插入图片描述
    4. 注:经测试,${IFS}和/bin/bash联用时,不代表空格

自行做测试后发现${IFS}被识别为根目录符号,但是不知道为什么会这么识别,另外管道符|,我认识是需要将内容作为ARGV的输入打包,用于显示出查找的内容个。

3. 总结

参考博文:

  • https://www.freesion.com/article/7171487849/
  • https://www.jianshu.com/p/2d34ef30361b
  • https://blog.csdn.net/whuslei/article/details/7187639
  • https://metacpan.org/pod/CGI

太难了,这题跟着wp操作下来的,PERL和shell知道太少了,仅做记录和总结吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

l8947943

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

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

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

打赏作者

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

抵扣说明:

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

余额充值