文档库 最新最全的文档下载
当前位置:文档库 › php漏洞全解

php漏洞全解

php漏洞全解
php漏洞全解

PHP网页的安全性问题

针对PHP的网站主要存在下面几种攻击方式:

1.命令注入(Command Injection)

2.eval注入(Eval Injection)

3.客户端脚本攻击(Script Insertion)

4.跨网站脚本攻击(Cross Site Scripting, XSS)

5.SQL注入攻击(SQL injection)

6.跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)

7.Session 会话劫持(Session Hijacking)

8.Session 固定攻击(Session Fixation)

9.HTTP响应拆分攻击(HTTP Response Splitting)

10.文件上传漏洞(File Upload Attack)

11.目录穿越漏洞(Directory Traversal)

12.远程文件包含攻击(Remote Inclusion)

13.动态函数注入攻击(Dynamic Variable Evaluation)

14.URL攻击(URL attack)

15.表单提交欺骗攻击(Spoofed Form Submissions)

16.HTTP请求欺骗攻击(Spoofed HTTP Requests)

几个重要的php.ini选项

Register Globals

php>=4.2.0,php.ini的register_globals选项的默认值预设为Off,当

register_globals的设定为On时,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于PHP不必事先初始化变量的值,从而导致很大的安全隐患.

例1:

//check_admin()用于检查当前用户权限,如果是admin设置$is_admin变量为true,然后下面判断此变量是否为true,然后执行管理的一些操作

//ex1.php

if (check_admin())

{

$is_admin = true;

}

if ($is_admin)

{

do_something();

}

?>

这一段代码没有将$is_admin事先初始化为Flase,如果register_globals为On,那么我们直接提交https://www.wendangku.net/doc/c517967113.html,/ex1.php?is_admin=true,就可以绕过check_admin()的验证

例2:

//ex2.php

if (isset($_SESSION["username"]))

{

do_something();

}

else

{

echo "您尚未登录!";

}

?>

当register_globals=On时,我们提交

https://www.wendangku.net/doc/c517967113.html,/ex2.php?_SESSION[username]=dodo,就具有了此用户的权限

所以不管register_globals为什么,我们都要记住,对于任何传输的数据要经过仔细验证,变量要初始化

safe_mode

安全模式,PHP用来限制文档的存取.限制环境变量的存取,控制外部程序的执行.启用安全模式必须设置php.ini中的safe_mode = On

1.限制文件存取

safe_mode_include_dir = "/path1:/path2:/path3"

不同的文件夹用冒号隔开

2.限制环境变量的存取

safe_mode_allowed_env_vars = string

指定PHP程序可以改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么php可以改变任何环境变量

safe_mode_protected_env_vars = string

用来指定php程序不可改变的环境变量的前缀

3.限制外部程序的执行

safe_mode_exec_dir = string

此选项指定的文件夹路径影响system.exec.popen.passthru,不影响

shell_exec和"` `".

disable_functions = string

不同的函数名称用逗号隔开,此选项不受安全模式影响

magic quotes

用来让php程序的输入信息自动转义,所有的单引号("'"),双引号("""),反斜杠("\")和空字符(NULL),都自动被加上反斜杠进行转义

magic_quotes_gpc = On 用来设置magic quotes 为On,它会影响HTTP请求的数据(GET.POST.Cookies)

程序员也可以使用addslashes来转义提交的HTTP请求数据,或者用stripslashes来删除转义

命令注入攻击

PHP中可以使用下列5个函数来执行外部的应用程序或函数

system.exec.passthru.shell_exec.``(与shell_exec功能相同)

函数原型

string system(string command, int &return_var)

command 要执行的命令

return_var 存放执行命令的执行后的状态值

string exec (string command, array &output, int &return_var) command 要执行的命令

output 获得执行命令输出的每一行字符串

return_var 存放执行命令后的状态值

void passthru (string command, int &return_var)

command 要执行的命令

return_var 存放执行命令后的状态值

string shell_exec (string command)

command 要执行的命令

漏洞实例

例1:

//ex1.php

$dir = $_GET["dir"];

if (isset($dir))

{

echo "

";

system("ls -al ".$dir);

echo "

";

}

?>

我们提交https://www.wendangku.net/doc/c517967113.html,/ex1.php?dir=| cat /etc/passwd

提交以后,命令变成了 system("ls -al | cat /etc/passwd");

eval注入攻击

eval函数将输入的字符串参数当作PHP程序代码来执行

函数原型:

mixed eval(string code_str) //eval注入一般发生在攻击者能控制输入的字符串的时候

//ex2.php

$var = "var";

if (isset($_GET["arg"]))

{

$arg = $_GET["arg"];

eval("\$var = $arg;");

echo "\$var =".$var;

}

?>

当我们提交https://www.wendangku.net/doc/c517967113.html,/ex2.php?arg=phpinfo();漏洞就产生了动态函数

func A()

{

dosomething();

}

func B()

{

dosomething();

}

if (isset($_GET["func"]))

{

$myfunc = $_GET["func"];

echo $myfunc();

}

?>

程序员原意是想动态调用A和B函数,那我们提交

https://www.wendangku.net/doc/c517967113.html,/ex.php?func=phpinfo漏洞产生

防范方法

1.尽量不要执行外部命令

2.使用自定义函数或函数库来替代外部命令的功能

3.使用escapeshellarg函数来处理命令参数

4.使用safe_mode_exec_dir指定可执行文件的路径

esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号"'",替换成"\'",双引号""",替换成"\"",分号";"替换成"\;"

用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内

safe_mode = On

safe_mode_exec_di r= /usr/local/php/bin/

客户端脚本植入

客户端脚本植入(Script Insertion),是指将可以执行的脚本插入到表单.图片.动画或超链接文字等对象内.当用户打开这些对象后,攻击者所植入的脚本就会被执行,进而开始攻击.

可以被用作脚本植入的HTML标签一般包括以下几种:

1. 无限弹框

插入 跳转钓鱼页面

或者使用其他自行构造的js代码进行攻击

防范的方法

一般使用htmlspecialchars函数来将特殊字符转换成HTML编码

函数原型

string htmlspecialchars (string string, int quote_style, string charset) string 是要编码的字符串

quote_style 可选,值可为ENT_COMPAT ENT_QUOTES ENT_NOQUOTES,默认值

ENT_COMPAT,表示只转换双引号不转换单引号.ENT_QUOTES,表示双引号和单引号都要转换.ENT_NOQUOTES,表示双引号和单引号都不转换

charset 可选,表示使用的字符集

函数会将下列特殊字符转换成html编码:

& ----> &

" ----> "

' ----> '

< ----> <

> ----> >

把show.php的第98行改成

然后再查看插入js的漏洞页面

xss跨站脚本攻击

XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表

css(Cascading Style Sheet)区别,缩写为XSS

跨站脚本主要被攻击者利用来读取网站用户的cookies或者其他个人数据,一旦攻击者得到这些数据,那么他就可以伪装成此用户来登录网站,获得此用户的权限.

跨站脚本攻击的一般步骤:

1.攻击者以某种方式发送xss的http链接给目标用户

2.目标用户登录此网站,在登陆期间打开了攻击者发送的xss链接

3.网站执行了此xss攻击脚本

4.目标用户页面跳转到攻击者的网站,攻击者取得了目标用户的信息

5.攻击者使用目标用户的信息登录网站,完成攻击

当有存在跨站漏洞的程序出现的时候,攻击者可以构造类似

https://www.wendangku.net/doc/c517967113.html,/search.php?

key= ,诱骗用户点击后,可以获取用户cookies值

防范方法:

利用htmlspecialchars函数将特殊字符转换成HTML编码

函数原型

string htmlspecialchars (string string, int quote_style, string charset) string 是要编码的字符串

quote_style 可选,值可为ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES,默认值ENT_COMPAT,表示只转换双引号不

转换单引号。ENT_QUOTES,表示双引号和单引号都要转换。ENT_NOQUOTES,表示双引号和单引号都不转换

charset 可选,表示使用的字符集

函数会将下列特殊字符转换成html编码:

& ----> &

" ----> "

' ----> '

< ----> <

> ----> >

$_SERVER["PHP_SELF"]变量的跨站

在某个表单中,如果提交参数给自己,会用这样的语句

" method="POST"> ......

$_SERVER["PHP_SELF"]变量的值为当前页面名称

例:

https://www.wendangku.net/doc/c517967113.html,/get.php

get.php中上述的表单

那么我们提交

https://www.wendangku.net/doc/c517967113.html,/get.php/">" method="POST">

跨站脚本被插进去了

防御方法还是使用htmlspecialchars过滤输出的变量,或者提交给自身文件的表单使用

这样直接避免了$_SERVER["PHP_SELF"]变量被跨站

SQL注入攻击

SQL注入攻击(SQL Injection),是攻击者在表单中提交精心构造的sql语句,改变原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql 注入攻击.

SQL注入攻击的一般步骤:

1.攻击者访问有SQL注入漏洞的网站,寻找注入点

2.攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句

3.新的sql语句被提交到数据库中进行处理

4.数据库执行了新的SQL语句,引发SQL注入攻击

WebLogic 组件反序列化漏洞补丁升级操作手册

weblogic反序列化补丁安装 梁裕 1、到weblogic官网下载补丁包(p2*******_1036_Generic.zip、 p2*******_1036012_Generic.zip如果找不到的朋友,可以在回复中给我留下邮箱,我会定期回复。) 2、10.3.6对应的补丁包p2*******_1036012_Generic.zip ,补丁包需要依赖于一个大的升级 包,所以需要把p2*******_1036_Generic.zip也下载下来。 3、登录linux的weblogic用户,切换到/home/weblogic/Oracle/Middleware/utils/bsu/目录下。 4、确认当前weblogic版本,并确认所有域的进程全部关闭 ./bsu.sh -prod_dir=/home/weblogic/Oracle/Middleware/wlserver_10.3/ -status=applied -verbose –view 5、查看是否存在/home/weblogic/Oracle/Middleware/utils/bsu/cache_dir 目录,没有的需要 手工创建。 6、将补丁包上传到/home/weblogic/Oracle/Middleware/utils/bsu/cache_dir目录下 7、首先打大的升级包,解压p2*******_1036_Generic.zip unzip p2*******_1036_Generic.zip EJUW对应就是后面命令的patchlist 8、执行补丁安装命令。 ./bsu.sh -install -patch_download_dir=/home/weblogic/Oracle/Middleware/utils/bsu/cache_dir -patchlist=EJUW-prod_dir=/home/weblogic/Oracle/Middleware/wlserver_10.3 –verbose 9、打序列化的补丁包,解压p2*******_1036012_Generic.zip unzip p2*******_1036012_Generic.zip ./bsu.sh -install -patch_download_dir=/home/weblogic/Oracle/Middleware/utils/bsu/cache_dir -patchlist=ZLNA-prod_dir=/home/weblogic/Oracle/Middleware/wlserver_10.3 –verbose 10、在打ZLNA补丁包时,遇到了内存溢出的问题。需要修改bsu.sh脚本,将内存调大。 11、启动weblogic的域,查看输出日志。确定版本是否生效。

PHP文件包含漏洞详解

PHP文件包含漏洞详解(1) 一、什么才是”远程文件包含漏洞”? 回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。 涉及到的危险函数:include(),require()和include_once(),require_once() Include:包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php文件继续执行。 Require:跟include唯一不同的是,当产生错误时候,include下面继续运行而require停止运行了。 Include_once:这个函数跟include函数作用几乎相同,只是他在导入函数之前先检测下该文件是否被导入。如果已经执行一遍那么就不重复执行了。 Require_once:这个函数跟require的区别跟上面我所讲的include和include_once是一样的。所以我就不重复了。 php.ini配置文件:allow_url_fopen=off 即不可以包含远程文件。Php4存在远程&本地,php5仅存在本地包含。 二、为什么要包含文件? 程序员写程序的时候,不喜欢干同样的事情,也不喜欢把同样的代码(比如一些公用的函数)写几次,于是就把需要公用的代码写在一个单独的文件里面,比如 share.php,而后在其它文件进行包含调用。在php里,我们就是使用上面列举的那几个函数来达到这个目的的,它的工作流程:如果你想在 main.php里包含share.php,我将这样写include(“share.php”)就达到目的,然后就可以使用share.php中的函数了,像这个写死需要包含的文件名称的自然没有什么问题,也不会出现漏洞,那么问题到底是出在哪里呢? 有的时候可能不能确定需要包含哪个文件,比如先来看下面这个文件index.php的代码: if ($_GET[page]) { include $_GET[page]; } else { include ”home.php”; }

信息安全管理与评估竞赛第二阶段题库

2019年山东省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 第二阶段题库 任务1:Web渗透测试 任务环境说明: DCST: 攻击机场景:hackerpc 攻击机场景操作系统:WindowsXP 攻击机场景安装服务/工具1:sqlmap 攻击机场景安装服务/工具2:burpsuite 攻击机场景安装服务/工具3:firefox浏览器及hackbar插件攻击机场景安装服务/工具4:中国菜刀 服务器场景:WEB2017 服务器场景操作系统:Microsoft Windows Server 2003 服务器场景安装服务:apache2.4+php5.4+mysql集成环境 任务内容: 1.从hackerpc访问DCST中的WEB2017服务器的web页面(访问 靶机,在登录界面连按五次shift可获取靶机IP),找到注 入点并进行sql注入攻击,获取藏在数据库中的flag,并对 结果进行截图。 2.尝试找到网站的后台并进行登录,获取放在后台页面中的flag 值,并对结果进行截图。

3.寻找后台存在漏洞的上传点,编写一句话木马并绕过上传,利 用一句话木马查看上传目录下的flag文件,并对结果进行截 图。 4.利用一句话木马进入服务器后,尝试找到藏在管理员用户开机 自启文件夹中的flag文件,并对结果进行截图。 5.该服务器上存在一隐藏用户,尝试从注册表中找到这个隐藏用 户,flag值为此用户的用户名,flag格式为flag{隐藏用户 的用户名},并对结果进行截图。 任务2:Mysql数据库攻防与加固 任务环境说明: DCST: 服务器场景:MYSQLserver 服务器场景操作系统:Centos 6.5 服务器场景安装服务:mysql服务 任务内容: 1.访问DCST中的MYSQLserver,在/var/log目录下创建 access.log文件,并修改mysql服务配置文件,使其能够记 录所有的访问记录,对操作步骤进行截图。 2.进入mysql数据库,找到可以从任何IP地址进行访问的用户, 对操作过程进行截图。 3.对题号2中的漏洞进行加固,删除可从任意IP地址进行登录 的用户,对操作步骤进行截图。

文件上传漏洞及解析漏洞总结

文件上传漏洞及解析漏洞总结 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。 文件上传后导致的常见安全问题一般有: 1)上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。 2)上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似); 3)上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。 4)上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本;等等。 要完成这个攻击,要满足以下几个条件: 首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。 其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。 最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。 一、从FCKEditor文件上传漏洞谈起 FCKEditor是一款非常流行的富文本编辑器,为了方便用户,它带有一个文件上传功能,但是这个功能却出过多次漏洞。 FCKEditor针对ASP/PHP/JSP等环境都有对应的版本,以PHP为例,其文件上传功能在:

PHP漏洞原理

PHP漏洞原理 PHP是一种服务器端的,嵌入HTML的脚本语言。PHP区别其他语言的地方是它的代码在服务器端执行,例如收集表格数据,生成动态页面内容,或者收发cookies等,今天我们来了解一下它的漏洞问题。 一全局变量 全局变量,就是能够在整个程序执行的过程中都存在的变量。基于PHP的应用程序的主函数一般都是接受用户的输入,然后对输入数据进行处理,然后把结果返回到客户端浏览器。为了使PHP代码访问用户的输入尽可能容易,实际上PHP是把这些输入数据看作全局变量来处理的。

这段代码会显示一个文本框和提交按钮。当用户点击提交按钮时,页面就会将用户输入的数据传递到“get.php”,当“get.php”运行时,“$test”就会自动创建,包含了用户在文本框输入的数据。我们可以看出,攻击者可以按照自己的意愿创建任意的全局变量。下面的认证代码暴露了PHP的全局变量所导致的安全问题: 上面的代码首先检查用户的密码是否为“monster”,如果匹配的话,则设置“$pass”为“1”,之后如果“$pass”的值为“1”的话,就会认证通过。 从表面看起来,这是正确的,但是这段代码犯了想当然的错误,它假定“$pass”在没有设置值的时候是空的,却没有想到,攻击者可以创建任何全局变量并赋值,通过提交“http://server/get.php?pass=1”的方法,我们完全可以欺骗这段代码,使它相信我们是已经认证过的。 二过滤输入/输出转义 过滤是Web应用安全的基础。它是你验证数据合法性的过程。通过在输入时确认对所有的数据进行过滤,你可以避免未过滤数据在你的程序中被误信及误用。大多数流行的PHP 应用的漏洞最终都是因为没有对输入进行恰当过滤造成的。最好的方法是把过滤看成是一个检查的过程。 另外一个Web应用安全的基础是对输出进行转义或对特殊字符进行编码,以保证原意不变。例如,O'Reilly在传送给MySQL数据库前需要转义成O\'Reilly。单引号前的反斜杠代表单引号是数据本身的一部分,而不是并不是它的本义。 为了区分数据是否已转义,还是建议定义一个命名机制。对于输出到客户机的转义数据,使$html数组进行存储,该数据首先初始化成一个空数组,对所有已过滤和已转义数据进行保存。

Java-Jackson反序列化漏洞及挖洞思路

源码分析Jackson反序列化漏洞 前言: 本次分析从Java序列化和反序列化源码开始分析,进一步分析Jackson源码,找出造成漏洞的原因,最后以Jackson2.9.2版本,JDK1.80_171,resin4.0.52,CVE-2020-10673为例复现漏洞。 一.JA V A反序列化原理 1.1 Class对象 每一个类都有一个Class对象,Class对象包含每一个类的运行时信息,每一个类都有一个Class对象,每编译一个类就产生一个Class对象,Class类没有公共的构造方法,Class对象是在类加载的时候由JVM以及通过调用类加载器中的DefineClass()方法自动构造的,因此不能显式地声明一个Class对象。在类加载阶段,类加载器首先检查这个类的Class对象是否已经被加载。如果尚未加载,默认的类加载器就会根据类的全限定名查找.class文件。一旦某个类的Class对象被载入内存,我们就可以它来创建这个类的所有对象以及获得这个类的运行时信息。 获得Class对象的方法: 1).Class.forName(“类的全名”);//com.xx.xx.xx 2).实例对象.getClass() 3).类名.class 1.2反射 JA V A反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

实现Java反射机制的类都位于https://www.wendangku.net/doc/c517967113.html,ng.reflect包中: 1).Class类:代表一个类 2).Field类:代表类的成员变量(类的属性) 3).Method类:代表类的方法 4).Constructor类:代表类的构造方法 5).Array类:提供了动态创建数组,以及访问数组的元素的静态方法 简单反射调用代码 Class clz=this.getClass(); Object obj= clz.getMethod("方法名",Class对象序列).invoke(this,Object参数序列); 1.3 反序列化 Java 序列化是指把Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的writeObject() 方法可以实现序列化。 Java 反序列化是指把字节序列恢复为Java 对象的过程,ObjectInputStream 类的readObject() 方法用于反序列化。 RMI:是Java 的一组拥护开发分布式应用程序的API,实现了不同操作系统之间程序的方法调用。值得注意的是,RMI 的传输100% 基于反序列化,Java RMI 的默认端口是1099 端口。 JMX:JMX 是一套标准的代理和服务,用户可以在任何Java 应用程序中使用这些代理和服务实现管理,中间件软件WebLogic 的管理页面就是基于JMX 开发的,而JBoss 则整个系统都基于JMX 构架。 只有实现了Serializable接口的类的对象才可以被序列化,Serializable 接口是启用其序列化功能的接口,实现java.io.Serializable 接口的类才是可序列化的,没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。 readObject() 方法的作用正是从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回,readObject() 是可以重写的,可以定制反序列化的一些行为。 readObject()主要做的事情,其实就是读取正常应该被序列化的字段信息后,

挖掘PHP整站程序漏洞的一些思路和经验

挖掘PHP整站程序漏洞的一些思路和经验 (廖坚先)Bykid@广东科干 第一次写稿同时也是第一次投稿,文章写的不好,大家多多包涵;进入正题,今天要跟大家分享的是挖掘PHP整站程序漏洞的一些思路,就拿phpcms2007整站(版本:PHPCMS 2007-更新日期:20080717)来说吧。 先给大家展示我在phpcms2007挖掘到的几个安全漏洞和安全隐患,虽然有的已经在phpcms2008中不存在,但是却可以从中得到一些经验或许这些漏洞在其它整站程序中存在也不稀奇啊,然后呢再引出我是如何快捷的发现它们的,所以重点还在后面,大家要耐心看下去啊。 Bug->1:漏洞出现在安装整站的文件install.php,关键源代码:在217行“file_put_contents(PHPCMS_ROOT.'/data/uninstall/phpcms/phpcms.php',phpcms_encode(serial ize($user),'uninstall'));”和473行“@unlink(PHPCMS_ROOT.'/data/install/phpcms/phpcms.php');”,大家可以按照这个路径去找找看有没有install这个文件夹。答案是没有的,phpcms.php 是在uninstall\phpcms\下面。这里应该是程序员笔误,他应该是想删除217行建立的phpcms.php,此文件的作用是为了最后的安装操作传递用户填的管理员的账号和密码的。账号和密码经过了自写的函数“phpcms_encode”的加密但是可还原,同时这些编码是没有以PHP代码的形式存放的,也就是说我们浏览那个文件就可以看到内容并且通过“include\auth.func.php”里面的“phpcms_decode”函数解密来查看。 Bug->2:漏洞出现在corpandresize\ui.php,关键代码如下: $dirnames=dirname($PHP_QUERYSTRING);//得到url问号后面的参数 $tmp=PHPCMS_ROOT.'/'.str_replace($PHPCMS['siteurl'],'',$dirnames).'/'; $tmp_url=str_replace($PHPCMS['siteurl'],'',$dirnames); if(preg_match("/http:/",$tmp))//重点:只要提交的是外部站点的地址就会执行花括号的代码{ include_once PHPCMS_ROOT."/include/upload.class.php"; $tmp=PHPCMS_ROOT.'/'.$PHPCMS['uploaddir'].'/'.date('Ym').'/'; $tmp_url=$PHPCMS['uploaddir'].'/'.date('Ym'); dir_create($uploaddir); } 我们的目的是利用dir_create($uploaddir),$uploaddir是未初始化的这样我们可以post这个变量上去,同样也应该是程序员的笔误,按照正常的逻辑$uploaddir这里应该是$tmp来的,这样就让我们有机可乘了(*^__^*)嘻嘻……顾名思义dir_create就是创建文件夹的,这个函数在“include\global.func.php”中被定义,值传递进去后没有什么限制,就不贴代码了。 Bug->3:这个是Oday漏洞来的,phpcms2008SP3-20100125版本中还存在,漏洞出现在“corpandresize\process.php”关键代码: $thumbfile=$_COOKIE['thumbfile']; if($thumbfile)@unlink(TMP_PATH.'/'.$thumbfile); 变量$thumbfile是从cookie中来的,大家可以自由发挥,TMP_PATH这个常量定义在“config.inc.php”里面,其实他也是cookie中传来的变量$tmp,所以$tmp+$thumbfile就可以删掉任何你想要删除的文件了,其实这个图片裁减的这个组件安全问题还是蛮多的。 好啦,到现在大家有没有发现这几个漏洞都是跟文件或文件夹的操作有关呢?想要渗透一个网站拿到webshell肯定要上传webshell了也就是对文件的操作了,那就关涉到PHP 的文件操作函数。

PHPCMS整站系统漏洞分析

PHPCMS整站系统漏洞分析 (原始稿件,已发表于2010年黑客手册第一季) (廖坚先)Bykid@广东科干 今天要跟大家分享这个漏洞是版本为phpcms2008SP3 _gbk_20100125的整站系统的,这是个包含漏洞。立刻进正题,最后再总结分析; 漏洞还是出现在最容易被忽视的wap模块,打开wap文件夹下的index.php文件,关键代码如下: 第14行也就是“include './include/'.$action.'.inc.php';”,程序员很放心的直接把用户提交的$action变量放进了包含文件的路径中,虽然后缀被限制成“.inc.php”,但是有没有想过管理员的管理模块的文件也是后缀为“.inc.php”的呢?而且很多这些模块文件都是用常量“IN_PHPCMS”作为防止直接访问的标识,同时管理员的管理模块的访问权限的检查是在整站根目录的admin.php文件进行的,那样我也就可以放心的包含了。还有一点值得高兴的是因为是“变异”的包含文件所以有的变量是没有初始化的也就是我们可以控制了。但“杯具”的是很多模块的功能小模块是通过“switch($action)”来运行的,也就是这类型的文件我们只能找“default”语句块来利用了。 经过双手都数不清双击打开文件检查,找到了一个不算完美的利用方法。可以包含的文件是“include/fields/box/field_add.inc.php和field_delete.inc.php”,“fields”下的文件都是对表中的字段操作的文件。这次要进行操作的字段是“phpcms_member_cache”表(PS:这个表是phpcms_member的镜像表,真搞不懂为什么要搞出这个表来)中的“password”字段。为什么我会说不完美呢,因为是操作的是password字段,不是一个记录,但是却可以达到进入管理后台的目的。field_add.inc.php和field_delete.inc.php关键代码如下:

CVE-2009-0658漏洞分析

CVE-2009-0658漏洞分析 题目:CVE-2009-0658漏洞分析 原作:Peter Kleissner (http://web17.webbpro.de/index.php?page=analysing-the-pdf-exploit) 翻译:Cryin' 我想给大家分享下2009年3月对一个Adobe pdf漏洞的分析结果,该漏洞由于JBIG2压缩中的BUG导致执行任意Win32代码。该漏洞目前(2009年3月3日)已经仅在内部被修补,但Adobe有望在3月11日才发布更新版本。自2007年以来的所有Adobe阅读器(Adobe Reader 7.0和更高版本都受影响),恶意PDF文件利用此漏洞的成功率非常低,所以传播的不是很广泛。 PDF文件概览 首先让我们大概的认识下一般的PDF恶意文件 ?JavaScript代码,使Exploit成为可能 ?Shellcode集成在JavaScript代码中(加载在Stream里面) ?Exploit Code,包含在PDF文件的Stream中并经过加密的可执行文件(malware) ?伪造的PDF文件,实现隐藏的目的 PDF漏洞文件开发主要有三个部分:JavaScript代码、Shellcode、Exploit Code。这三部分在漏洞利用开发过程中都同等重要。 Pidief是一个知名度很高、传播十分广泛的病毒家族(本文分析的也是),在其历史上它利用各种Adobe Pdf漏洞来执行恶意程序(malware).下面分析的就是Pidief家族中鲜活的实例。尽情享受吧! JavaScript代码 Pidief包含的第一段JavaScript代码作为脚本存储在PDF文件的Object对象中,代码经过八进制编码后如下面所示: 2 0 obj <

网站渗透测试报告-模板

网站渗透测试报告-模板

____________________________ 电子信息学院渗透测试课程实验报告____________________________ 实验名称:________________________ 实验时间:________________________ 学生姓名:________________________ 学生学号:________________________

目录 第1章概述 (4) 1.1.测试目的 (4) 1.2.测试范围 (4) 1.3.数据来源 (4) 第2章详细测试结果 (5) 2.1.测试工具 (5) 2.2.测试步骤 (5) 2.2.1.预扫描 (5) 2.2.2.工具扫描 (5) 2.2.3.人工检测 (6) 2.2.4.其他 (6) 2.3.测试结果 (6) 2.3.1.跨站脚本漏洞 (7) 2.3.2.SQL盲注 (8) 2.3.2.管理后台 (11) 2.4.实验总结 (12)

第1章概述 1.1.测试目的 通过实施针对性的渗透测试,发现XXXX网站系统的安全漏洞,保障XXX 业务系统安全运行。 1.2.测试范围 根据事先交流,本次测试的范围详细如下: 系统名称XXX网站 测试域名https://www.wendangku.net/doc/c517967113.html, 测试时间2014年10月16日-2014年10月17日 说明本次渗透测试过程中使用的源IP可能为:合肥 1.3.数据来源 通过漏洞扫描和手动分析获取相关数据。

第2章详细测试结果 2.1.测试工具 根据测试的范围,本次渗透测试可能用到的相关工具列表如下:检测工具用途和说明 WVS WVS(Web Vulnerability Scanner)是一个自动化的Web应用程序安全测试工具,它可以通过检查SQL注入攻击漏洞、跨站脚本攻击漏洞等来审核Web应用程序。 Nmap Linux,FreeBSD,UNIX,Windows下的网络扫描和嗅探工具包。 Burpsuite 网络抓包工具,对网络的数据包传输进行抓取。 浏览器插件对工具扫描结果进行人工检测,来判定问题是否真实存在,具体方法依据实际情况而定。 其他系统本身具备的相关命令,或者根据实际情况采用的其他工具。 2.2.测试步骤 2.2.1.预扫描 通过端口扫描或主机查看,确定主机所开放的服务。来检查是否有非正常的服务程序在运行。 2.2.2.工具扫描 主要通过Nessus进行主机扫描,通过WVS进行WEB扫描。通过Nmap进行端口扫描,得出扫描结果。三个结果进行对比分析。

Django任意代码执行漏洞分析

Django任意代码执行漏洞分析 从Django的SECTET_KEY到代码执行 Django是一个可以用于快速搭建高性能,优雅的网站的平台,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS (内容管理系统)软件。并于2005年7月在BSD许可证下发布。 最近在进行网站代码审查的过程中,发现某些产品由于session使用不当,导致可能被攻击者利用,执行任意代码。这些产品在登录的JS代码中,泄露了SECRET_KEY,将该值作为密码加密的盐,这样就暴露了加密salt不太好吧,更重要的是对django的安全造成了极大的威胁。 2 SECRET_KEY作用 SECTET_KEY在djanog中使用非常广泛,基本上涉及到安全,加密等的地方都用到了,下面列举一些常见情景:1,json object的签名2,加密函数,如密码重置,表单,评论,csrf的key,session数据 这里面就要重点讲到session的问题,在这里使用不当就会导致代码执行

3 代码执行 3.1 settings的session设置 django默认存储session到数据库中,但是可能会比较慢,就会使用到缓存,文件,还有cookie等方式,如果采用了cookie机制则有可能代码执行,settings配置如下: SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' 3.2 django 1.6以下 在django1.6以下,session默认是采用pickle执行序列号操作,在1.6及以上版本默认采用json序列化。代码执行只存在于使用pickle序列话的操作中。 3.3 session处理流程 可以简单的分为两部分,process_request和process_response,前者负责选择session引擎,初始化cookie 数据。见代码 Python class SessionMiddleware(object): def process_request(self, request): engine = import_module(settings.SESSION_ENGINE) session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME,

Struts S2-045 漏洞调试及分析

Struts S2-045漏洞调试及分析 Auth:Cryin’ Date:2016.3.9 漏洞公告 首先看官方给出的漏洞公告信息: “Possible Remote Code Execution when performing file upload based on Jakarta Multipart parser.” 问题原因: “It is possible to perform a RCE attack with a malicious Content-Type value. If the Content-Type value isn't valid an exception is thrown which is then used to display an error message to a user.” 从公告信息可以得到几个漏洞的重点信息: ●存在漏洞的模块是Jakarta ●漏洞产生的点是恶意的Content-Type头 ●恶意的Content-Type头会造成程序抛出异常,在显示错误消息给用户时造成RCE 补丁对比 查看Struts2版本2.3.32在github上的commit(Uses default error key if specified key doesn't exist)并对比修改内容: https://https://www.wendangku.net/doc/c517967113.html,/apache/struts/commit/352306493971e7d5a756d61780d57a76eb1 f519a 可以看到对LocalizedTextUtil.findText方法进行了重写,并添加了判断。Struts2RCE漏洞的根本原因是程序将用户可控数据带入OGNL表达式解析并执行,而OGNL(Object Graph Navigation Language)对象图形导航语言是一个功能强大的表达式语言,可以用来获取和设置Java对象的属性,但同时也可以对服务端对象进行修改,绕过沙盒甚至可以执行系统命令。 所以,从补丁分析来看LocalizedTextUtil.findText函数很可能是OGNL表达式的传入点,在调试分析时可在此处下断点跟踪分析。 关于jakarta Jakarta是struts2默认处理multipart报文的解析器,该组件定义在struts-default.xml中: 默认使用org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest类对上传数据进行解析并调用第三方组件commons-fileupload.jar完成上传操作。

php漏洞exp利用方法

最近php出了些问题,害得许多用php写的程序都出了很多漏洞,在sebug上每天都可以看到许多,漏洞的exp(exploit,也就是漏洞利用)是用php写的,QQ 上每天都有许多叉子问我php的exp该怎么用,问得我头都大了,我现在就来给大家讲一下php写的exp的利用方法。 首先我们来在本地装一下php的运行环境。打开php-installer,一切设置都默认(我安装的目录是D盘的php),一路next就可以了,如图1。 10月1日的时候我朋友NetHacKar刚发现了一个phpcms的注入漏洞,就用它来做演示吧,他在sebug上已经公布出了完整的exp,如图2。 可是这些php代码我们该怎么利用呢?大家别急,先把这段代码用记事本保存下来,我保存在D:/php/phpcms.php这里了。现在我们打开cmd来到D:/php/目录下用php.exe运行一下刚才我们保存的那个exp文件,如图3。

我们看见了返回的结果,他给出了利用的格式:php phpcms.php localhost / ,在这里localhost 我们可以改成对方的域名,/就是对方的phpcms系统的目录(如果是根目录就直接/,如果是phpcms目录就写/phpcms/),注意一下,这里有个空格。 我找到了一个目标:https://www.wendangku.net/doc/c517967113.html,,我们拿他来测试一下,在cmd里php phpcms.php https://www.wendangku.net/doc/c517967113.html, /。我们来看一下结果,如图4。

已经成功的破出了它的管理员的账号和密码的32位md5值。账号是admin,密码的md5是21232f297a57a5a743894a0e4a801fc3,我们把它拿到https://www.wendangku.net/doc/c517967113.html,上来解密一下,得到的

2018年网络安全状况及2019年网络安全趋势

第35卷 第2期 福 建 电 脑 Vol. 35 No.2 2019年2月 Journal of Fujian Computer Feb. 2019 ——————————————— 刘娟(通信作者),女,1989年生,主要研究领域为网络安全技术.E-mail:liujuan@https://www.wendangku.net/doc/c517967113.html,. 2018年网络安全状况及2019年网络安全趋势 刘娟 (国家计算机网络应急技术处理协调中心福建分中心 福州 350002) 摘 要 为了总结2018年我国网络安全总体状况及特点,研判2019年需重点关注的网络安全趋势,本文基于监测数据和开源情报,分别从恶意软件、数据安全、物联网安全、APT 攻击等方面梳理了2018年我国网络安全六大态势,提出了物联网安全风险加大、恶意软件更加多样化、供应链攻击持续发生、信息泄露推动技术能力提升等四点网络安全趋势。 关键词 网络安全;物联网;勒索病毒;信息泄露 中图法分类号 TP393.08 The Cyber Security Situation in 2018 and Its Trends in 2019 LIU Juan (The Computer Network Emergency Response Technical Team/Coordination Center of Fujian, Fuzhou, China, 350002) 1 网络安全现状 2018年以来,我国网络安全态势持续严峻,勒索病毒、DDOS 攻击、挖矿病毒、信息泄露、APT 攻击等各类网络安全威胁层出不穷。笔者根据监测数据和开源情报对六类典型网络安全威胁态势和特点进行分析总结。 1.1 勒索病毒 自2017年5月WannaCry 勒索病毒事件爆发以来,各类勒索病毒此起彼伏。2018年,我国多家医院、学校、行政服务中心、企业等被曝感染勒索病毒[1],造成极大危害。一方面,Globelmposter 、GandCrab 、Satan 等各类勒索病毒十分活跃,呈现更新快、变种多的特点。以GandCrab 勒索病毒为例,该勒索病毒于2018年1月首次被发现,截至目前已监测发现5个大版本升级,每个大版本还包含多个变种。另一方面,与WannaCry “广撒网”式投毒不同,2018年勒索病毒主要以重要行业重要数据服务器为目标,实现“精准投毒”,以期获得 更多赎金。攻击者往往通过暴力破解、漏洞利用等手段突破受害网络边界后部署勒索病毒。监测数据显示,福建省2018年受感染行业分布如图1所示, 可以看出政府部门是感染勒索病毒的重灾区。 图1 福建省2018年勒索病毒事件受害行业分析 1.2 信息泄露 2018年,互联网上曝光了多起我国公民信息泄露事件,泄露数据高达数十亿条,数据来源包括连锁酒店、快递公司、视频网站、求职网站等。例如,2018年8月,华住旗下多家连锁酒店5亿条用户个人信息及入住记录在暗网公开叫卖,标价8个比特币(约合人民币35万元)。与以往相比,暗网数据售卖成为此类事件曝光的主渠道。究其原因是随着我国《网络安全法》的实施,对个人信息保护越来越完善,攻击者为了隐藏行踪转而在暗网通过加密货币进行交易。这些信息泄露事件暴露了部分掌握

PHP漏洞全解(七)-Session劫持

PHP漏洞全解(七)-Session劫持 2012-04-12 15:42 DoDo DoDo's Blog我要评论(0)字号:T | T 本文主要介绍针对PHP网站Session劫持。session劫持是一种比较复杂的攻击方法。大部分互联网上的电脑多存在被攻击的危险。这是一种劫持tcp协议的方法,所以几乎所有的局域网,都存在被劫持可能。 AD: 服务端和客户端之间是通过session(会话)来连接沟通。当客户端的浏览器连接到服务器后,服务器就会建立一个该用户的 session。每个用户的session都是独立的,并且由服务器来维护。每个用户的session是由一个独特的字符串来识别,成为session id。用户发出请求时,所发送的http表头内包含session id 的值。服务器使用http表头内的session id来识别时哪个用户提交的请求。 session保存的是每个用户的个人数据,一般的web应用程序会使用session来保存通过验证的用户账号和密码。在转换不同的网页时,如果需要验证用户身份,就是用session内所保存的账号和密码来比较。session的生命周期从用户连上服务器后开始,在用户关掉浏览器或是注销时用户 session_destroy函数删除session数据时结束。如果用户在20分钟内没有使用计算机的动作,session 也会自动结束。 php处理session的应用架构

会话劫持 会话劫持是指攻击者利用各种手段来获取目标用户的session id。一旦获取到session id,那么攻击者可以利用目标用户的身份来登录网站,获取目标用户的操作权限。 攻击者获取目标用户session id的方法: 1)暴力破解:尝试各种session id,直到破解为止。 2)计算:如果session id使用非随机的方式产生,那么就有可能计算出来 3)窃取:使用网络截获,xss攻击等方法获得 会话劫持的攻击步骤

Struts2漏洞利用原理及OGNL机制研究

Struts2漏洞利用原理及OGNL机制研究 Auth:Cryin’ Date:2015.04.19 概述 在MVC开发框架中,数据会在MVC各个模块中进行流转。而这种流转,也就会面临一些困境,就是由于数据在不同MVC层次中表现出不同的形式和状态而造成的: ◆View层—表现为字符串展示 数据在页面上是一个扁平的、不带数据类型的字符串,无论数据结构有多复杂,数据类型有多丰富,到了展示的时候,全都一视同仁的成为字符串在页面上展现出来。数据在传递时,任何数据都都被当作字符串或字符串数组来进行。 ◆Controller层—表现为java对象 在控制层,数据模型遵循java的语法和数据结构,所有的数据载体在Java世界中可以表现为丰富的数据结构和数据类型,你可以自行定义你喜欢的类,在类与类之间进行继承、嵌套。我们通常会把这种模型称之为复杂的对象树。数据在传递时,将以对象的形式进行。 可以看到,数据在不同的MVC层次上,扮演的角色和表现形式不同,这是由于HTTP协议与java的面向对象性之间的不匹配造成的。如果数据在页面和Java世界中互相传递,就会显得不匹配。所以也就引出了几个需要解决的问题: 1.当数据从View层传递到Controller层时,我们应该保证一个扁平而分散在各处的数据集合能以一定的规则设置到Java世界中的对象树中去。同时,能够灵活的进行由字符串类型到Java中各个类型的转化。 2.当数据从Controller层传递到View层时,我们应该保证在View层能够以某些简易的规则对对象树进行访问。同时,在一定程度上控制对象树中的数据的显示格式。 我们稍微深入思考这个问题就会发现,解决数据由于表现形式的不同而发生流转不匹配的问题对我们来说其实并不陌生。同样的问题会发生在Java世界与数据库世界中,面对这种对象与关系模型的不匹配,我们采用的解决方法是使用如hibernate,iBatis等框架来处理java对象与关系数据库的匹配。 现在在Web层同样也发生了不匹配,所以我们也需要使用一些工具来帮助我们解决问题。为了解决数据从View层传递到Controller层时的不匹配性,Struts2采纳了XWork的一套完美方案。并且在此的基础上,构建了一个完美的机制,从而比较完美的解决了数据流转中的不匹配性。就是表达式引擎OGNL。它的作用就是帮助我们完成这种规则化的表达式与java对象的互相转化(以上内容参考自Struts2技术内幕)。 关于OGNL OGNL(Object Graph Navigation Language)即对象图形导航语言,是一个开源的表达式引擎。使用OGNL,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java 对象树的方法、同时能够自动实现必要的类型转化。如果我们把表达式看做是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。我们可以轻松解决在数据流转过程中所遇到的各种问题。 OGNL进行对象存取操作的API在Ognl.java文件中,分别是getValue、setValue两个方法。getValue通过传入的OGNL表达式,在给定的上下文环境中,从root对象里取值:

相关文档
相关文档 最新文档