MENU

安全学习-17-代码执行漏洞

December 15, 2021 • 网络安全

[TOC]

代码执行漏洞

代码执行漏洞原理

用户输入的数据被当作后端代码进行执行。

RCE

RCE(remote command/code execute)远程命令或代码执行。

现在因为RCE这个词的滥用,RCE的范围比较广,只要渗透的最终情况可以实现执行命令或者是代码都数据RCE,例如代码执行、文件包含、反序列化、命令执行,甚至是写文件Getshell都可以数据RCE。

造成代码执行函数解析

  1. 以后可以代码审计,锁定这些危险函数去找漏洞;
  2. 如果你们的一句话木马被查杀了或者过滤了,那么可以尝试替代。

在PHP中存在诸多函数可以做到代码执行。

1、eval($a); // 可多行执行

eval是代码执行用的最多的,他可以多行执行eval($_REQUEST['a'])

2、assert($a); // 只能单行执行

assert($_REQUEST['a']) 虽然只能执行单行,但是我们可以通过file_put_contents()写一个替代执行的文件出来进行代码执行即可!

3、preg_replace()

preg_replace(匹配的部分,满足匹配后替换,需要进行匹配的字符串)

preg_replace('/a/e',$_GET[8],'abc')

当需要配置的部分加上e修饰符以后,满足匹配后替换的部分会被当作代码执行!
注意:

  1. 这里会固定报错,告诉你不建议你使用/e修饰符;
  2. 替换必须把真实发生才会触发函数,不发生替换,不会触发。

4、create_function()

# 定义后又调用了
<?php
$a=create_function('$id',$_REQUEST[8])
echo $a('abcde')
?>
# 定义后未调用
//直接传入 8=}phpinfo();//
} 符号用于闭合函数,然后执行phpinfo(),后面的//注释后面的原函数的}

5、array_map()回调函数,调用某个函数。

<?php
function cube($n)
{
    return ($n*$n*$n);
}
$a = [1,2,3];
$b = array_map('cube',$a); //可以使用自定义函数或自带函数,可以对列表,依次取出执行函数
#$b = array_map('phpinfo',$a);
#$b = array_map('assert',$_REQUEST);
#$b = array_map($_REQUEST[1],$_REQUEST[2]);
#$b = array_map($_REQUEST[1],arry($_REQUEST[2]);
?>

6、特殊组合(二次组合利用,文件删除+代码执行)

// 先删除CMS的安装锁文件,然后重新安装设置username是否可以利用双引号字符串,造成代码执行漏洞!
$b="${phpinfo()}"
$b="${eval($_REQUEST[8])}"  
// PHP版本5.5及以上可以使用,在字符串里面使用 ${},里面内容可以被当作代码执行!

PHP版本5.5及以上可以使用,在字符串下面使用 "${phpinfo()}"!,该字符串中phpinfo()会被当作代码执行!,注意PHP版本!

CMS安装的本质,把原始数据写入数据库!

靶场实战

1.本地安装CMS


2.由于是个CMS,通过代码审计得到可能存在问题的点

由于CMS,判断安装与否都是通过一个.lock文件进行判断时候安装过!,所以我们可以通过unlink尝试能否删除该.locak文件。

2


3.判断问题

3

4

5

同时由该处可以得知,删除时得到的删除文件名是由于查询数据库得到的!


4.获取修改数据库该值的点

6

当前数据库的值!

7


5.抓包修改数据包,update该值

8

9

10

删除成功后,自动跳转到安装首页!

11


6.寻找安装写马漏洞

12

13

14

15

由于本地环境我的PHP版本过低!!!一直报错,还找了半天的问题,问题就是版本号过低不支持${}


线上靶场实战

1.靶场地址

http://59.63.200.79:24950/admin/mobile.php

1


2.修改数据库存储的logo文件字段

16

3.删除logo

17

18

lock文件删除后,跳转到安装首页!


4.安装写入木马

19

20

21