针对PHP网站攻击的几种方式
1.命令注入(Command Injection):
是指黑客通过利用HTML代码输入机制缺陷(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。从而可以使用系统命令操作,实现使用远程数据来构造要执行的命令的操作。
PHP中可以使用下列四个函数来执行外部的应用程序或函数:system、exec、passthru、shell_exec
2.eval注入(Eval Injection):
eval函数将输入的字符串参数当作PHP程序代码来执行
防范方法
1、尽量不要执行外部命令
2、使用自定义函数或函数库来替代外部命令的功能
3、使用escapeshellarg函数来处理命令参数
4、使用safe_mode_exec_dir指定可执行文件的路径
esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“’”,替换成“\’”,双引号“"”,替换成“\"”,分号“;”替换成“\;”
用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内
safe_mode = On
safe_mode_exec_dir = /usr/local/php/bin/
3 .客户端脚本攻击(Script Insertion)
指将可以执行的脚本插入到表单、图片、动画或超链接文字等对象内。当用户打开这些对象后,攻击者所植入的脚本就会被执行,进而开始攻击。
客户端脚本植入的攻击步骤
1、攻击者注册普通用户后登陆网站
2、打开留言页面,插入攻击的js代码
3、其他用户登录网站(包括管理员),浏览此留言的内容
4、隐藏在留言内容中的js代码被执行,攻击成功
4.跨网站脚本攻击(Cross Site Scripting, XSS)
跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站。攻击者利用跨站请求伪造能够轻松地强迫用户的浏览器发出非故意的HTTP请求,如诈骗性的电汇 请求、修改口令和下载非法的内容等请求。
跨站脚本攻击的一般步骤:
1、攻击者以某种方式发送xss的http链接给目标用户
2、目标用户登录此网站,在登陆期间打开了攻击者发送的xss链接
3、网站执行了此xss攻击脚本
4、目标用户页面跳转到攻击者的网站,攻击者取得了目标用户的信息
5、攻击者使用目标用户的信息登录网站,完成攻击
防范的方法
一般使用htmlspecialchars函数来将特殊字符转换成HTML编码
5.SQL注入攻击(SQL injection)
是攻击者在表单中提交精心构造的sql语句,改动原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击。
SQL注入攻击的一般步骤:
1、攻击者访问有SQL注入漏洞的站点,寻找注入点
2、攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句
3、新的sql语句被提交到数据库中执行处理
4、数据库执行了新的SQL语句,引发SQL注入攻击
防范的方法
整型参数: 运用 intval函数将数据转换成整数
浮点型参数: 运用 floatval或doubleval函数分别转换单精度和双精度浮点型参数
字符型参数:运用 addslashes函数来将单引号“’”转换成“\’”,双引号“"”转换成“\"”,反斜杠“\”转换成“\\”,NULL字符加上反斜杠“\”
6.跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。
防范方法
防范CSRF要比防范其他攻击更加困难,因为CSRF的HTTP请求虽然是攻击者伪造的,但是却是由目标用户发出的,一般常见的防范方法有下面几种:
1、检查网页的来源
2、检查内置的隐藏变量
3、使用POST,不要使用GET
7.Session 会话劫持(Session Hijacking)
这是一种通过获取用户Session ID后,使用该Session ID登录目标账号的攻击方法,此时攻击者实际上是使用了目标账户的有效Session。会话劫持的第一步是取得一个合法的会话标识来伪装成合法用户,因此需要保证会话标识不被泄漏。
一般攻击步骤
1.目标用户需要先登录需要攻击的站点,获取登录站点的sessionID
2.攻击者通过某种手段(暴力破解,计算,窃取)捕获sessionID
3.攻击者通过捕获的sessionID访问站点即可获得合法会话
8.Session 固定攻击(Session Fixation)
是一种诱骗受害者使用攻击者指定的会话标识(SessionID)的攻击手段。这是攻击者获取合法会话标识的最简单的方法。(让合法用户使用黑客预先设置的sessionID进行登录,从而是Web不再进行生成新的sessionID,从而导致黑客设置的sessionId变成了合法桥梁。)
一般攻击步骤
1、 攻击者通过某种手段重置目标用户的SessionID,然后监听用户会话状态;
2、 目标用户携带攻击者设定的Session ID登录站点;
3、 攻击者通过Session ID获得合法会话
防范手段参考博客:https://www.cnblogs.com/phpstudy2015-6/p/6776919.html#_label6
9.HTTP响应拆分攻击(HTTP Response Splitting)
HTTP响应拆分是由于攻击者经过精心设计利用电子邮件或者链接,让目标用户利用一个请求产生两个响应,前一个响应是服务器的响应,而后一个则是攻击者设计的响应。此攻击之所以会发生,是因为WEB程序将使用者的数据置于HTTP响应表头中,这些使用者的数据是有攻击者精心设计的。
可能遭受HTTP请求响应拆分的函数包括以下几个:
header(); setcookie(); session_id(); setrawcookie();
HTTP响应拆分通常发生在:
Location表头:将使用者的数据写入重定向的URL地址内
Set-Cookie表头:将使用者的数据写入cookies内
防范方法:替换换行符 ,使用最新版本PHP,因为新版本中已经不允许HTTP表头出现换行符了
10.文件上传漏洞(File Upload Attack)
由于文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过 Web 访问的目录上传任意PHP文件,并能够将这些文件传递给 PHP解释器,就可以在远程服务器上执行任意PHP脚本,即文件上传漏洞
防范方法:指定文件后缀及文件类型,指定文件存放目录
11.目录穿越漏洞(Directory Traversal)
是指黑客能够在Web应用程序所在的根目录以外的文件夹上,任意的存取被限制的文件夹,执行命令或查找数据。目录穿越攻击,也与人称为Path Traversal攻击
目录穿越绕过方案
进行URL编码:点–>%2e 反斜杠–>%2f 正斜杠–>%5c
进行16为Unicode编码:点–>%u002e 反斜杠–>%u2215 正斜杠–>%u2216
进行双倍URL编码:点–>%252e 反斜杠–>%u252f 正斜杠–>%u255c
进行超长UTF-8 Unicode编码:
点–>%c0%2e %e0$40%ae %c0ae
反斜杠–>%c0af %e0%80af %c0%af
正斜杠–>%c0%5c %c0%80%5c
目录穿越修复方案
1.在URL内不要使用文件名称作为参数
2.检查使用者输入的文件名是否有“…”的目录阶层字符
3.在php.ini文件中设置open_basedir来指定文件的目录
4.使用realpath函数来展开文件路径中的“./”、 “…/”等字符,然后返回绝对路径名称
5.使用basename函数来返回不包含路径的文件名称
参考链接:https://blog.csdn.net/weixin_45007073/article/details/113466902
12.远程文件包含攻击(Remote Inclusion)
其原理就是注入一段用户能控制的脚本或代码,并让服务端执行。文件包含漏洞可能出现在JSP、PHP、 ASP等语言中,原理都是一样的。文件包含漏洞主要可以分为:
一、本地文件包含漏洞(LFI):能够打开并包含本地文件的漏洞,被称为本地文件包含漏洞。利用本地文件包含漏洞,可以查看系统任意文件内容,如果具备一些条件,也可以执行命令
二、远程文件包含漏洞(RFI):如 果php.ini的配置选项allow_url_fopen和allow_url_include为ON的话,则文件包含函数是可以加载远程文件的,这种 漏洞被称为远程文件包含漏洞。利用远程文件包含漏洞,可以直接执行任意命令。在实际渗透攻击过程中,攻击者可以在自己的Web服务器上放一个可执行的恶意 文件,通过目标网站存在的远程文件包含漏洞来加载文件,从而实现执行任意命令的目的。
防范方法参考文献:https://www.cnblogs.com/vo-ov/p/3745638.html
参考文献:
https://www.cnblogs.com/milantgh/category/594436.html