不包含数字和字母的webshell
前言
已经做了两题有关无数字和字母的getshell,这里整理一下‘
基础篇
方法一:异或运算获得字符
在PHP中,两个字符串进行异或操作以后,得到的还是一个字符串,原理很简单,直接贴脚本了:
import re |
同类型的还有一个取反
方法二:++特性取字符
|
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html
提高篇
长度限制+不包含$和_
php7中关于变量处理的变化
1.解析顺序
对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析2.执行动态函数方法
PHP7前是不允许用($a)();
这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过('phpinfo')();
来执行函数,第一个括号中可以是任意PHP表达式。
payload:
(~%8F%97%8F%96%91%99%90)(); //(phpinfo)() |
PHP5中如何执行方法
思维导入
大部分语言都不是单纯的逻辑语言,一门全功能的语言必然需要和操作系统进行交互,操作系统里面包含最重要的两个功能就是shell(系统命令)和文件系统。
PHP自然也能够和操作系统进行交互,“反引号”就是PHP中最简单的执行shell的方法。那么,在使用PHP无法解决问题的情况下,为何不考虑用“反引号”+“shell”的方式来getshell呢?
这里有个知识点需要了解一下,在linux系统中,许多系统命令都是有自己的脚本文件在,我们可以通过调用这些脚本文件来执行shell命令,这也就是之前所说的linux系统中,一切皆文件的思想,即使用bash执行file文件中的命令
介绍两个shell知识点:
1、shell可以用.来执行任意脚本,并且不需要file有x权限
2、linux文件名支持用glob通配符代替
思路
上传bash文件——执行文件
问题一:没有上传窗口文件该如何上传?
使用脚本
import requests |
利用脚本post直接上传
问题二:不能用字母数字,如何选中所要执行的文件?
这个时候就利用了glob通配符的知识了,我们知道,上传的文件会被临时储存在/tmp/文件夹下,那么如何确定其他的字符呢?
*首先可以代表0个及以上的任意字符**
?可以代表1个任意字符
所以我们的文件名就可以表示为/*/??????或者/???/??????(这里假定文件名为6位)
但是此时,符合此文件名可能不止一位,所以该如何更精准的定位呢?
深入理解glob通配符
glob支持用[^x]
的方法来构造“这个位置不是字符x”并且支持利用[0-9]来表示一个范围。
筛选方法:
1.???[^x]
??筛选出第四个字符不是x的项
2.???[@-[]??筛选出第四个字符时大写字母的项(这里利用了ascc码的一个范围)
参考:https://www.php.net/manual/zh/migration70.incompatible.php
不包含数字和字母的webshell