201609-12 前端安全之路-代码保护 0x00前言在信息安全领域,可信系统(Trustedsystem)是一个让人心动的目标,它指的是一个通过实施特定的安全策略而达到一定可信程度的系统。在计算机中,可信平台模块(TrustedPlatformModule,TPM)已经投入使用,它符合可信赖计算组织(TrustedComputingGroup,TCG)制定的TPM规范,是为了实现可信系统目标的而打造的一款安全芯片。作为可信系统的信任根,TPM是可信计算的核心模块,为计算机安全提供了强有力的保障... 继续阅读 >
201608-06 网站渗透思路全方面总结 针对新手写一点渗透的小思路、小技巧,主要讲的是思路,所有不会太详细。经常逛一些好的博客或者门户站,坚持下来,每天学一点思路,你会积累到很多东西,记住:技术需要时间沉淀。(一)针对网站程序,不考虑服务器。一、查找注入,注意数据库用户权限和站库是否同服。二、查找XSS,最近盲打很流行,不管怎样我们的目的是进入后台。三、查找上传,一些能上传的页面,比如申请友链、会员头像、和一些敏感页面等等,注意查看... 继续阅读 >
201603-16 PHP安全-加密 加密 作为一本相关安全方面的书,通常加密是需要提及的话题。我之所以在本书的主体部分忽略了加密问题,是因为它的用途是狭窄的,而开发者应从大处着眼来考虑安全问题。过分依赖于加密常常会混淆问题的根源。尽管加密本身是有效的,但是进行加密并不会神奇地提高一个应用的安全性。 一个PHP开发人员应主要熟悉以下的加密方式: l 对称加密l ... 继续阅读 >
201603-16 PHP安全-函数 函数 在我写作本书的时候,http://php.net/quickref.php列出了共3917个函数,其中包括一些类似函数的语法结构,在此我不准备把它们从函数中区分开来,而是把它作为函数看待。 由于函数数量很大,一一说明它们的正确及安全用法是不太可能的。在此我选出了我认为最需要注意的函数。选择的标准包括使用的频繁度、使用时的危险(安全)度及我本人的经验。 对于每一个列出的函数,我都会提供推荐的使用方法。... 继续阅读 >
201603-16 PHP安全-配置选项 配置选项 尽管本书的焦点是在于应用的安全性,但有一些配置选项是任何关心安全的开发者必需熟悉的。PHP的配置会影响你所写代码的行为以及你使用的技巧,必要时你需要稍稍负责一下应用程序以外的东西。 PHP的配置主要由一个名为php.ini的文件所指定。该文件包含很多配置选项,每一项都会对PHP产生非常特定的影响。如果该文件不存在,或者该文件中的某选项不存在,则会使用默认值。 如果你不知道php.ini... 继续阅读 >
201603-15 PHP安全-文件系统浏览 文件系统浏览 除了能在共享服务器上读取任意文件之外,攻击者还能建立一个可以浏览文件系统的脚本。由于你的大多数敏感文件不会保存在网站主目录下,此类脚本一般用于找到你的源文件的所在位置。请看下例: <pre> <?php if(isset($_GET['dir'])) { ls($_GET['dir']); } elseif(isset($_GET['file'])) { cat($... 继续阅读 >
201603-15 PHP安全-会话注入 会话注入 一个与会话暴露类似的问题是会话注入。此类攻击是基于你的WEB服务器除了对会话存储目录有读取权限外,还有写入权限。因此,存在着编写一段允许其他用户添加,编辑或删除会话的脚本的可能。下例显示了一个允许用户方便地编辑已存在的会话数据的HTML表单: <?php session_start(); ?> <formaction="inject.php"method="POST"> <?php&nbs... 继续阅读 >
201603-15 PHP安全-会话数据暴露(二) 会话数据暴露 当你关注于防止源码的暴露时,你的会话数据只同样存在着风险。在默认情况下,SESSION保存在/tmp目录下。这样做在很多情形下是很方便的,其中之一是所有用户都有对/tmp的写入权限,这样Apache同样也有权限进行写入。虽然其他用户不能直接从shell环境读取这些会话文件,但他们可以写一个简单的脚本来进行读取: <?php header('Content-Type:text/plain'); session_s... 继续阅读 >
201603-15 PHP安全-源码暴露(二) 源码暴露 你的WEB服务器必须要能够读取你的源确并执行它,这就意味着任意人所写的代码被服务器运行时,它同样可以读取你的源码。在一个共享主机上,最大的风险是由于WEB服务器是共享的,因此其它开发者所写的PHP代码可以读取任意文件。 <?php header('Content-Type:text/plain'); readfile($_GET['file']); ?> 通过在你的源码所在的主机上运行上面... 继续阅读 >
201603-15 PHP安全-永久登录 永久登录 永久登录指的是在浏览器会话间进行持续验证的机制。换句话说,今天已登录的用户明天依然是处于登录状态,即使在多次访问之间的用户会话过期的情况下也是这样。 永久登录的存在降低了你的验证机制的安全性,但它增加了可用性。不是在用户每次访问时麻烦用户进行身份验证,而是提供了记住登录的选择。 图7-2.攻击者通过重播用户的cookie进行未授权访问 据我观察,最常见的有缺陷的永... 继续阅读 >
201603-15 PHP安全-重播攻击 重播攻击 重播攻击,有时称为演示攻击,即攻击者重现以前合法用户向服务器所发送的数据以获取访问权或其它分配给该用户的权限。 与密码嗅探一样,防止重播攻击也需要你意识到数据的暴露。为防止重播攻击,你需要加大攻击者获取任何用于取得受限资源的访问权限的数据的难度。这主要要求做到避免以下做法: 设定受保护资源永久访问权的数据的使用;设定受保护资源访问权的数据的暴露(甚至是只提供临时... 继续阅读 >
201603-15 PHP安全-密码嗅探 密码嗅探 尽管攻击者通过嗅探(察看)你的用户和应用间的网络通信并不专门用于访问控制,但要意识到数据暴露变得越来越重要,特别是对于验证信息。 使用SSL可以有效地防止HTTP请求和回应不被暴露。对任何使用https方案的资源的请求可以防止密码嗅探。最好的方法是一直使用SSL来发送验证信息,同时你可能还想用SSL来传送所有的包含会话标识的请求以防止会话劫持。 为防止用户验证信息不致暴露,在表单的actio... 继续阅读 >
201603-15 PHP安全-暴力攻击 暴力攻击 暴力攻击是一种不使用任何特殊手段而去穷尽各种可能性的攻击方式。它的更正式的叫法是穷举攻击——穷举各种可能性的攻击。 对于访问控制,典型的暴力攻击表现为攻击者通过大量的尝试去试图登录系统。在多数情况下,用户名是已知的,而只需要猜测密码。 尽管暴力攻击没有技巧性可言,但词典攻击似乎有一定的技巧性。最大的区别是在进行猜测时的智能化。词典攻击只会最可能的情况列表中进行穷举,而... 继续阅读 >
201603-15 PHP安全-命令注入 命令注入 使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。 Exec()是用于执行shell命令的函数。它返回执行并返回命令输出的最后一行,但你可以指定一个数组作为第二个参数,这样输出的每一行都会作为一个元素存入数组。使用方式如下: <?php $last=exec('ls',$output,$return); ... 继续阅读 >
201603-14 PHP安全-远程文件风险 远程文件风险 PHP有一个配置选项叫allow_url_fopen,该选项默认是有效的。它允许你指向许多类型的资源,并像本地文件一样处理。例如,通过读取URL你可以取得某一个页面的内容(HTML): <?php $contents=file_get_contents('http://example.org/'); ?> 正如第五章所讨论的那样,当被污染数据用于include和require的文件指向时,会产生严重漏洞。实际上,我认为这种漏... 继续阅读 >
201603-14 PHP安全-文件系统跨越 文件系统跨越 无论你用什么方法使用文件,你都要在某个地方指定文件名。在很多情况下,文件名会作为fopen()函数的一个参数,同时其它函数会调用它返回的句柄: <?php $handle=fopen('/path/to/myfile.txt','r'); ?> 当你把被污染数据作为文件名的一部分时,漏洞就产生了: <?php $handle=fopen("/path/to/{$_GET['filename']}.t... 继续阅读 >