Buuctf Web [ACTF2020 新生赛]Exec 1 菜鸟刷题之旅

打开靶场,就是一个明显的命令注入题
我们ping 127.0.0.1;ls试试,

可以看到,没有过滤分号和ls

接着我们就遍历目录了,通过cd …/达到访问上一个目录的目的,再通过ls 达到查看该目录有哪些文件

当我们到…/…/…/时可以看到有我们想要的flag了,

1、什么是命令注入

    Command Injection,即命令注入攻击,是指由于嵌入式应用程序或者 web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。

    在命令注入的漏洞中,最为常见的是PHP的命令注入。PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。例如,当黑客提交的数据内容为向网站目录写入PHP文件时,就可以通过该命令注入攻击漏洞写入一个PHP后门文件,进而实施进一步的渗透攻击。

原理:web应用在调用这些函数执行系统命令的时候,在没有做好过滤用户输入的情况下,如果用户将自己的输入作为系统命令的参数拼接到命令行中,就会造成命令注(命令执行)的漏洞。

2、命令注入攻击是如何形成的?

    嵌入式应用程序或者 web应用程序有时需要调用一些系统命令的函数,如linux C中的system(),exec(),shell-exec() 等等,当用户能够控制这些函数中的参数时,就可以将恶意参系统命令拼接到正常命令中,从而造成命令注入攻击设备系统:

命令注入的形成需要如下三个条件:

    1)使用了内部调用shell的函数:system(),exec()等
    2)将外界传入的参数没有足够的过滤,直接传递给内部调用shell的函数
    3)参数中shell的元字符没有被转义

危害:继承嵌入式应用程序或者 web应用程序的权限去执行系统命令读写执行文件,导致系统有可能会被恶意攻击或者泄露系统用户信息。

3、命令注入相关的特殊字符

4、命令注入解法策略:

    1)校验外部数据命令:在执行system、eval等命令执行功能的函数前,确定参数内容。

            a. 对数据的合法性进行校验(不是校验是否包含命令注入的特殊字符):比如IP地址,直接校验IP地址的格式(inet_aton() ); 如果是url域名,则从url域名中获取IP地址(gethostname(),inet_ntop() )后,在进行IP格式校验,若获取失败或者校验失败,则认为数据非法。

           b. 使用正则表达式对外部数据命令进行校验:白名单过滤?

    2)使用白名单安全过滤:比较适用于固定不变的命令或者数据(校验包含哪些目标字符,而不是定义不能包含什么字符)或者直接将命令定义为宏,然后使用system() 系统调用。

    3)使用黑名单过滤命令:黑名单机制还还是有可能会绕过系统校验,进行命令注入;所以不建议使用

    4)使用 exec系列族 函数代替 system() 系统调用函数,选择不调用系统命令的实现方法、避免使用内部调用shell的函数、不将外界传入的字符串传递给命令行参数

    5)使用安全的函数对传递给系统命令的参数进行转义
    6)将应用程序的权限降到最低
   7)给web服务器系统及使用的中间件及时打上安全补丁

    8)使用escapeshellarg函数处理相关参数。Escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。

(主要参考大佬博客:https://blog.csdn.net/llzhang_fly/article/details/119685242?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164670069516780265482957%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164670069516780265482957&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-119685242.pc_search_result_control_group&utm_term=%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%85%A5&spm=1018.2226.3001.4187)

深入理解其他命令注入类别:
https://blog.csdn.net/qq_26406447/article/details/89882086?ops_request_misc=&request_id=&biz_id=102&utm_term=命令注入&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-89882086.nonecase&spm=1018.2226.3001.4187)

posted @ 2022-03-08 09:04  B1smarck  阅读(689)  评论(0编辑  收藏  举报