高级cmd攻击命令_一步一步学习DVWA渗透测试(Command Injection命令行注入)-第七次课...

fef09f9456ca44f851d79cff439755bc.png

各位小伙伴,今天我们继续学习Command Injection,翻译为中文就是命令行注入。是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。在OWASP TOP 10中一种存在注入漏洞,最常见的就是SQL和命令行注入。PHP开发的系统中存在命令注入漏洞,也是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型漏洞。

命令执行漏洞的产生原因一般就是将用户输入未经过滤或者过滤不严就直接当作系统命令进行执行,我们可以通过批处理中的一些技巧来一次执行多条命令,这样就可以执行任意命令。在命令执行中,常用的命令连接符号有五个:&&、&、||、|和;

&&:前一个指令执行成功,后面的指令才继续执行,就像进行与操作一样

||:前一个命令执行失败,后面的才继续执行,类似于或操作

&:直接连接多个命令

|:管道符,将前一个命令的输出作为下一个命令的输入

;:直接连接多个命令

1、Low低级别

首先查看源代码

<?php

if( isset( $_POST[ 'Submit' ] ) ) {

// Get input

$target = $_REQUEST[ 'ip' ];

// Determine OS and execute the ping command.

if( stristr( php_uname( 's' ), 'Windows NT' ) ) {

// Windows

$cmd = shell_exec( 'ping ' . $target );

}

else {

// unix/Linux

$cmd = shell_exec( 'ping -c 4 ' . $target );

}

// Feedback for the end user

$html .= "<pre>{$cmd}</pre>";

}

?>

分析:

服务器端首先获取用户提交的ip,接着获取服务端的系统信息,根据不同操作系统选择不同的ping命令格式,但是后续并没有对用户的输入做任何的过滤,就会导致严重的漏洞

stristr()函数定义和用法:

stristr() 函数搜索字符串在另一字符串中的第一次出现。

注释:该函数是二进制安全的。

注释:该函数是不区分大小写的。如需进行区分大小写的搜索,请使用 strstr() 函数。

语法:stristr(string,search,before_search)

php_uname(mode)函数定义和用法:

这个函数会返回运行php的操作系统的相关描述,参数mode可取值:

”a”(此为默认,包含序列”s n r v m”里的所有模式),

”s”(返回操作系统名称),

”n”(返回主机名),

“r”(返回版本名称),

”v”(返回版本信息),

”m”(返回机器类型)。

漏洞利用

无论是linux系统还是windows系统,我们都可以用&&来执行多条命令语句。所以我们执行的payload可以是127.0.0.1&&ipconfig可以发现返回了执行结果,ip详细信息,见下面截图:

04c68a1cdebaaa12fd1128d465ca91be.png

当然,这里的127.0.0.1可以换成任何IP地址,而&&后面可以接各种命令,例如127.0.0.1&&del c:windowsinfo.log, 则删除windows目录下info.log文件,del文件不会显示任何信息。

7f1171c12e39bd7b25fdeca43c12125f.png

2、Medium 中级别

<?php

if( isset( $_POST[ 'Submit' ] ) ) {

// Get input

$target = $_REQUEST[ 'ip' ];

// Set blacklist

$substitutions = array(

'&&' => '',

';' => '',

);

// Remove any of the charactars in the array (blacklist).

$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

// Determine OS and execute the ping command.

if( stristr( php_uname( 's' ), 'Windows NT' ) ) {

// Windows

$cmd = shell_exec( 'ping ' . $target );

}

else {

// *nix

$cmd = shell_exec( 'ping -c 4 ' . $target );

}

// Feedback for the end user

$html .= "<pre>{$cmd}</pre>";

}

?>

分析:

通过源码我们可以看出,相对比于low级别,medium级别设置了黑名单,将&&和;做了过滤处理,&&不行,我们可以改用&

这里说明下几个符号的区别:

command1&command2&command3 三个命令同时执行

command1;command2;command3 不管前面命令执行成功没有,后面的命令继续执行

command1&&command2 只有前面命令执行成功,后面命令才继续执行

漏洞利用

我们就改用&,所以payload就变成了127.0.0.1&ipconfig

17e31857a93ef31deb63325edbb71694.png

可以看到payload执行成功

3、High 高级别

<?php

if( isset( $_POST[ 'Submit' ] ) ) {

// Get input

$target = trim($_REQUEST[ 'ip' ]);

// Set blacklist

$substitutions = array(

'&' => '',

';' => '',

'| ' => '',

'-' => '',

'$' => '',

'(' => '',

')' => '',

'`' => '',

'||' => '',

);

// Remove any of the charactars in the array (blacklist).

$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

// Determine OS and execute the ping command.

if( stristr( php_uname( 's' ), 'Windows NT' ) ) {

// Windows

$cmd = shell_exec( 'ping ' . $target );

}

else {

// *nix

$cmd = shell_exec( 'ping -c 4 ' . $target );

}

// Feedback for the end user

$html .= "<pre>{$cmd}</pre>";

}

?>

分析:

还以为会是多么高端的过滤方式,只不过是把黑名单稍微细化了一下,但是依然可以使用|

Command 1 | Command 2

“|”是管道符,表示将Command 1的输出作为Command 2的输入,并且只打印Command 2执行的结果。

漏洞利用

127.0.0.1|ipconfig

ae62907e7626c480cd891c599bd70377.png

依旧可以执行。

4、Impossible 不可能级别

<?php

if( isset( $_POST[ 'Submit' ] ) ) {

// Check Anti-CSRF token

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

// Get input

$target = $_REQUEST[ 'ip' ];

$target = stripslashes( $target );

// Split the IP into 4 octects

$octet = explode( ".", $target );

// Check IF each octet is an integer

if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {

// If all 4 octets are int's put the IP back together.

$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

// Determine OS and execute the ping command.

if( stristr( php_uname( 's' ), 'Windows NT' ) ) {

// Windows

$cmd = shell_exec( 'ping ' . $target );

}

else {

// *nix

$cmd = shell_exec( 'ping -c 4 ' . $target );

}

// Feedback for the end user

$html .= "<pre>{$cmd}</pre>";

}

else {

// Ops. Let the user name theres a mistake

$html .= '<pre>ERROR: You have entered an invalid IP.</pre>';

}

}

// Generate Anti-CSRF token

generateSessionToken();

?>

分析:

通过源代码分析我们可以看到:

1、该模块中加入了Anti-CSRF token来防范CSRF攻击,同时每次随机生成了一个token,当用户提交的时候,在服务器端比对一下token值是否正确,不正确就丢弃掉,正确就验证通过。

// Check Anti-CSRF token

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

2、通过加入stripslashes函数来对输入的ip信息进行删除字符串中的反斜杠操作。

$target = stripslashes( $target );

3、对输入的信息通过“.”号进行分割,分割成多个数组。

// Split the IP into 4 octects

$octet = explode( ".", $target );

4、然后采用白名单机制来验证输入的信息是不是都是数字组成,然后把所有的数字通过“.”进行拼接,这样就保证了输入的信息只能是以“数字.数字.数字.数字”的形式限定了只能输入IP地址,避免了命令执行漏洞。

if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {

// If all 4 octets are int's put the IP back together.

$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

(完)

---------------------------------------------------------------------------

关注安全 关注作者


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA插件之 CodeGlance

在编辑代码最右侧&#xff0c;显示一块代码小地图 这款插件使用效果图如下&#xff0c;个人感觉还是有点用处&#xff0c;滚动条太小&#xff0c;有这个地图&#xff0c;拖动起来更加方便一点 原文地址:http://tengj.top/2017/02/22/idea1-1/转载于:https://www.cnblogs.com/al…

移动端图片上传方法

移动端图片上传方法 实现效果 文件下载 http://files.cnblogs.com/files/sntetwt/移动端图片上传.rar 实现步骤 一、隐藏<input type"file" id"file" name"Filedata" style"display:none;" accept"image/*" /> 二、…

SQL UPDATE with INNER JOIN

mysql - SQL UPDATE with INNER JOIN - Stack Overflowhttps://stackoverflow.com/questions/14491042/sql-update-with-inner-join MySQL UPDATE JOIN | Cross-Table Update in MySQLhttp://www.mysqltutorial.org/mysql-update-join/ 转载于:https://www.cnblogs.com/rgqancy…

linux 29900端口,USB2.0接口100M以太网芯片SR9900(A)的应用

1&#xff1a;SR9900A和SR9900有啥区别&#xff1a;(就是同一颗料)SR9900A默认随机MAC地址&#xff1a;00E0XXXXXXXXXXSR9900默认纯0MAC地址&#xff1a;000000000000都可以二次烧录MAC地址的… 如果SR9900没货用SR9900A没问题的&#xff0c;但是SR9900A没货&#xff0c;用SR99…

easyui常见问题

1.EasyUI的combobox可以看到选项但是不能选择怎么办 检查一下绑定的字段是否名称一样&#xff0c;valueField:id,textField:name&#xff0c;主要检查valueField $(#contentsName).combotree({panelHeight: auto,panelMaxHeight: 200,multiple: false,required: false,editable…

c语言最大公约数和最小公倍数_五年级奥数课堂之七:公因数和公倍数

乘积尾0的个数公因数和公倍数的基本概念公因数的释义给定若干个整数&#xff0c;如果有一个(些)数是它们共同的因数&#xff0c;那么这个(些)数就叫做它们的公因数。而全部公因数中最大的那个&#xff0c;称为这些整数的最大公因数。公约数与公倍数相反&#xff0c;就是既是A的…

RxJava:从未来到可观察

大约4年前&#xff0c;我第一次在Matthew Podwysocki的博客上遇到了Reactive Extensions &#xff0c;但是直到我几周前看到Matthew在Code Mesh上发表演讲之后&#xff0c;我才对它有所了解。 它似乎最近变得越来越流行&#xff0c;我注意到&#xff0c;现在有一个由Netflix编…

手机站CSS

手机web——自适应网页设计&#xff08;html/css控制&#xff09;内核&#xff1a;-ms- /* IE 9 */-moz- /* Firefox */-webkit- /* Safari and Chrome */-o- /* Opera */一. 网页宽度自动适应手机屏幕的宽度&#xff0c;在head标签内加上以下内容&#xff1a;<meta na…

linux的kerne启动过程,linux

333.6Khttp://www.vuse.vanderbilt.edu/~srs/linux-papers-talks/iee-2002.pdfvuse.vanderbilt.edu全网免费399.3Khttp://www.stillhq.com/pdfdb/000478/data.pdfstillhq.com全网免费333.6Khttp://www.researchgate.net/profile/Gillian_Heller/publication/220386856_Maintain…

设计模式(五)--工厂模式汇总

LZ想把简单工厂模式、工厂方法模式和抽象工厂模式整理到一篇博文当中&#xff0c;由浅入深&#xff0c;应该能方便理解和记忆&#xff0c;话不多说&#xff0c;进入正题。 一、简单工厂模式 定义&#xff1a;从设计模式的类型上来说&#xff0c;简单工厂模式是属于创建型模式&a…

如何估算内存消耗?

这个故事可以追溯到至少十年之前&#xff0c;当时我第一次接触PHB时遇到一个问题&#xff1a;“在生产部署中&#xff0c;我们需要购买多大服务器”。 我们正在构建的新的&#xff0c;闪亮的系统距离生产开始还有9个月的时间&#xff0c;显然该公司已承诺提供包括硬件在内的整个…

python爬取b站403_Python如何爬取b站热门视频并导入Excel

代码如下 #encoding:utf-8 import requests from lxml import etree import xlwt import os # 爬取b站热门视频信息 def spider(): video_list [] url "https://www.bilibili.com/ranking?spm_id_from333.851.b_7072696d61727950616765546162.3" html requests.g…

url文件的格式

[DEFAULT]BASEURL[InternetShortcut]URLWorkingDirectoryShowCommandIconIndexIconFileModifiedHotKey  其中BASEURL、URL和WorkingDirectory这3项的含义是不言而明的。ShowCommand规定Internet Explorer启动后窗口的初始状态&#xff1a;7表示最小化&#xff0c;3表示最大化…

vscode 编辑器常用快捷键

最近&#xff0c;打算换个编辑器&#xff0c;而 vscode 是一个不错的选择。大部分快捷键和 sublime 还是很像的&#xff0c;但有些也不一样。特此整理一份小笔记。 参考&#xff1a; vscode: Visual Studio Code 常用快捷键非常全的VsCode快捷键常用快捷键 主命令&#xff1a;c…

linux sudo永久免密码,linux 免密码 使用sudo 直接使用root权限执行命令

1.切换到root用户下,怎么切换就不用说了吧,不会的本身百度去.百度2.添加sudo文件的写权限,命令是:权限chmod uw /etc/sudoers密码3.编辑sudoers文件文件vi /etc/sudoersvi找到这行 root ALL(ALL) ALL,在他下面添加xxx ALL(ALL) ALL (这里的xxx是你的用户名)sudops:这里说下你能…

Derek解读Bytom源码-创世区块

作者&#xff1a;Derek 简介 Github地址&#xff1a;https://github.com/Bytom/bytom Gitee地址&#xff1a;https://gitee.com/BytomBlockchain/bytom 本章介绍Derek解读-Bytom源码分析-创世区块 作者使用MacOS操作系统&#xff0c;其他平台也大同小异 Golang Version: 1.8 创…

使用调试器进行事后跟踪

我最近一直在使用的大多数调试器的好功能是能够在断点上记录信息。 这对理解代码而无需修改是非常有用的&#xff0c;它涉及字节码修改。 让我们考虑一下这种非常琐碎且效率低下的函数实现&#xff0c;以返回斐波那契数列中的第n个数字。 public class Fib {public long fib(…

链表排序c++代码_[链表面试算法](一) 链表的删除-相关题型总结(6题)

在数据结构的最高层抽象里&#xff0c;只有两种结构&#xff0c;数组和链表。这两种结构&#xff0c;是所有其他数据结构实现的基础。队列和栈&#xff0c;可以用链表和数组来实现。图&#xff0c;可以用邻接表和邻接矩阵来实现&#xff0c;其中&#xff0c;邻接表就是链表&…

JS原生方法实现jQuery的ready()

浏览器加载页面的顺序&#xff1a; 1、 解析HTML结构 2、 加载外部脚本和样式表文件 3、 解析并执行脚本代码 4、 构造HTML DOM模型ready() 5、 加载图片等组件 6、 页面加载完毕onload() ready事件是在DOM模型构造完毕时触发 load事件是在页面加载完毕后触发 function…

程序员高效工具列表

FQ必备 *** 文件管理器 wox 或者 Listary , everything 截图软件 Snipaste 下载器 Fish 冰点 Markdown 工具 Typora 图床工具 PicGo 思维导图 Xmind 抓包工具 Wireshark 协议工具 Fiddler 接口测试工具 PostMan 剪切板工具 Ditto 害怕截图丢失&#xff1f; 博客园…