命令执行漏洞-命令执行-漏洞位点- 代码注入-漏洞利用-联合执行-Bypass(空格,关键字过滤,变量绕过)-例题两道-actf2020exec-GXYCTF2019 Ping Ping Ping

命令执行

命令执行是一种攻击,其目标是通过易受攻击的应用程序在主机操作系统上执行任意命令。当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。

比如PHP中的system,exec,shell_exec等,当用户可以控制命令执行中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

简单举例来说就是,比如想要创建一个目录,可能不会用代码创建,但是知道系统命令是mkdir,借助系统命令mkdir来创建目录。
举例:cp /tmp/sourcefile /app/public/#{userinput}.jpg
cp是copy拷贝,将sourcefile拷贝到图片中去
如果用户的输入(userinput)是aaa;cat /flag,那么还会读取flag中的内容

命令注入是一种常见的 漏洞形态。一旦存在命令注入漏洞,攻击者就可以在目标系统执行任意命令。

命令注入攻击常用在向程序传入不安全参数(命令行参数、http头、cookie)。

注意:命令执行需要:
1.执行系统命令
2.执行的系统命令(参数)至少是可控的(或者部分可控),传参的地方就是用户可控的地方

命令执行继承Web Server用户的权限,一般都有权限写文件,写马、查看隐私信息、窃取源码,甚至可以反弹shell,危害十分大。
(用户通过服务器执行了php代码实现执行系统命令,所以说“命令执行继承Web Server用户的权限”)

一般Linux下最高权限是root,Web server下一般是www-data权限

漏洞位点

程序过滤不严谨,导致用户可以将代码注入并执行。

高危函数:
eval(),assert(),preg_replace(),call_user_func()等等

对于执行命令的函数,参数过滤不严谨,导致直接命令执行。

高危函数:
system(),exec(),shell_exec(),passthru(),pctnl_exec(),popen(),proc_open()
注:反引号是shell_exec()的别名

比如echo ls

代码注入

程序过滤不严谨,导致用户可以将代码注入并执行。

高危漏洞:
eval(),assert(),preg_replace(),call_user_func()等等

和命令执行的 区别是:
一个执行系统命令,一个执行PHP代码

漏洞利用

看一个Demo:

<?php
if (isset($_GET['ip'])){
 $ip = $_GET['ip'];
 echo shell_exec("ping -c 4 " . $ip);
}else{
 highlight_file(__file__);
}

正常情况下,输入主机地址,则正常返回命令执行结果
在这里插入图片描述
代码中的ip参数是直接通过GET方式传入并直接带入了命令中,这时尝试一下使用分隔符并添加一条命令

127.0.0.1;ls -l
在这里插入图片描述

联合执行

分号

cmd1;cmd2;cmd3

cmd1将首先运行,不管cmd1运行成功还是出现错误,cmd2都会在它之后运行,当cmd2命令完成时,cmd3将会运行

三个命令互不干扰

&&

有时候希望确保Linux命令中,只有在前一个命令成功结束时,下一个命令才会执行。这就是逻辑和运算符&&出现的地方

cmd1 && cmd2 && cmd3

当第一个命令出现错误时,&&分隔符的命令会停止执行后面的命令。

||

可以使用逻辑操作符(||)运行命令行,但是只有在前一个命令出现错误时才运行下一个命令:

cmd1 || cmd2 || cmd3

如果cmd1运行失败,则运行cmd2。如果cmd2运行成功,cmd3将不会运行。

前一个命令的结果作为后一个命令的参数

cmd1 | cmd2

例如:

echo xxx | base64

换行符
%0a
%0d

练习:actf2020exec 平台BUUCTF
在这里插入图片描述

在这里插入图片描述

首先尝试127.0.0.1
在这里插入图片描述

127.0.0.1;ls
在这里插入图片描述

;cat /flag
在这里插入图片描述
得到flag是flag{3e9af367-c215-4a33-9196-4b5314327d9f}

Bypass

过滤空格
$IFS
${IFS} //加{}是为了区分(间隔)
$IFS$9
< //在Linux中<表示导入
<>
{cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
%20
%09

过滤某关键字

在这里插入图片描述
练习题目:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
空格过滤

在这里插入图片描述
显然过滤了很多东西:
在这里插入图片描述
在这里插入图片描述
不报错了:(查看源代码得到flag)
在这里插入图片描述
flag{0af120ba-cd98-43e9-a099-3f9abac9de96}
在这里插入图片描述

变量
在这里插入图片描述

(上面那道GXYCTF就是一道用变量解决的例子)

PS补充

1.awd比赛中:无法删去别人的 马
在这里插入图片描述

www-data和ctf/test不属于一个用户组
解决办法:自己写一个马给自己,通过蚁剑连接Web Shell,通过这个Web shell去删除别人 的Web shell

2.如果别人中的马是每隔1秒写一个马,如何解决?

(如果别人的马是通过网页写的)
给自己写个马,连接Web shell (使自己变成www-data组的用户),再去执行kill -9 -1

若对方是(不是通过网页写的):
在这里插入图片描述

那么应该我应该执行:
在这里插入图片描述

3.反弹shell
如果已知IP和端口号:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值