命令执行漏洞(教材:从零到一 CTFer成长之路)

目录

一、什么是命令执行漏洞

二、基础知识

1、转义字符

2、多条命令执行

 3、注释符号

三、常见绕过和技巧

1、缺少空格

2、黑名单关键字

2.1、利用变量拼接

2.2、使用通配符

2.3、借用已有字符串

 3、执行无回显

3.1、HTTP通道

3.2、DNS通道

3.3、时间盲注

3.4、写入文件,二次返回

一、什么是命令执行漏洞

由于开发者使用一些执行命令函数其未对用户输入的数据进行安全检查时,可注入恶意命令,实现恶意命令执行。

命令执行一般发生在远程,故称远程命令执行RCE(Remote Command Exec或Remote Code Exec)。

以PHP的syste()函数为例:

<?php

    $str = $_GET['name'];
    system("echo hello ".$str);  //调用系统程序执行命令

?>

正常输入?name=lusong,返回的正常字符。

单输入?name=lusong%26%26ls%20/ 爆出了系统根目录(URL编码 &:%26)

即系统执行:echo hello lusong &&ls /

&&、|| 对应:adn、or(具有惰性)下面会详细讲解。

所有命令执行就是注入特殊字符,改变原本执行意图,实现执行想要的命令。

二、基础知识

1、转义字符

字面意思:改变字符的意义,即改变具有特殊作用的字符含有,让其失去特性

windows下为:^

linux下为:\

2、多条命令执行

Windows下:&&、||、%0a

linux下:&&、||、;、$()、··(反引号TAB上面的那个键)、%0a、%0d

&&:命令1 && 命令2            如果命令1执行出错则不会执行命令2

||:命令1 || 命令2            如果命令1执行成功则不会执行命令2

$()、··:功能一样,用于命令嵌套

 %oa、%od:回车和换行。

 3、注释符号

windows为:::

linux为:#

三、常见绕过和技巧

1、缺少空格

在代码审计中经常会对输入进行空格过滤的情况,这使得我们的注入代码缺少空格作为分隔符而执行出错。

<?php

    $str = str_replace(" ","",$_GET['name']);     #将空格变为空
    
    system("echo hello ".$str);  //调用系统程序执行命令

?>

空格被过滤(URL 编码:%20)我们可用采用burp suite对%00~%FF区间进行字符串测试,看有没有其他能替代。

kali下启动burp suite 设置代理

 本地打开浏览器(以火狐为列)点击设置>网络设置 出现配置框:

 勾选手动配置代理,输入ip和端口都输入上一步在burp suite里设置的ip 端口。
返回burp suite 下在intercept下将intercept is on 打开,表示拦截。

 返回火狐浏览器输入网址后会一直处于等待中

 此时返回burp suite 会看到拦截的http数据。

 点击Forward 将数据转发出去。点击HTTP history 查看数据

 现在我们利用burp suite对网址进行空格符号的代替符号爆破

在burp suite 处于拦截http数据下在浏览器输入:

http://192.168.198.128/ctf/?name=lusong%26%26cat%20../a.txt

然会返回 burp suite 将数据发送给 intruder模块: 

 点击intruder>Target,设置攻击目标(因为我这个靶场运行在kali中所有就是kali的的ip)

 在Prositions 先点一下clear  标选中要进行数据爆破的字符(%20),然后点击 add按钮。

 在Payloads下加载爆破文件(事先准备好)

文件内容为 %00~%FF
%00
%01
......
%FF

点击start att ack 开始运行

等待运行完后 根据返回数据的Length判断成功 如下%09

 我跑完后能用的有 %09 %3C

则可用其代替%20 空格来进行命令注入

上面具体介绍了利用burp suite工具进行Fuzz。还可以直接利用字符串截取来获取空格。

windows下:%ProgramFiles% 环境变量一般为 C:\Program Files,~相当于截取符,从第十个字符开始截取一个字符 及空格

 linux下一些常用的绕过空格方式

$IFS$9              ------bash有效、zsh、dash无效

{cmd,args}         ------bash有效、zsh、dash无效

cat<>falg        ------读取文件时,发现不能目录穿刺穿刺可用用  cat<../../../flag(刚burp suite测出来的不知道有没有其他系统怎么样)

2、黑名单关键字

 对一些关键字进行拦截如 flag、cat等

2.1、利用变量拼接

2.2、使用通配符

?:一个字符

* :一个字符串

 

2.3、借用已有字符串

利用substr() 、awk

 

 3、执行无回显

命令执行后不在网页上显示的情况,怎么来获取执行结果的问题,解决数据外带

利用VTest平台

3.1、HTTP通道

将执行结果拼接在URL后,实现外带

3.2、DNS通道

将执行结果数据拼接在域名前缀中

3.3、时间盲注

利用&&、||的执行惰性和一些耗时命令(如sleep)

3.4、写入文件,二次返回

将执行结果写入web目录里的文件,然后二次访问读取(权限问题:www-data没有web目录写入权限)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值