PHP代码审计三

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: PHP代码审计

XSS漏洞

反射型 XSS 漏洞

它通过给别人发送带有恶意脚本代码参数的 URLURL 地址被打开时特有的恶意代码参数被 HTML 解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。

变量直接输出

<?php
$xss = $_GET['xss'];
echo $xss;
?>

$_SERVER 变量参数 输出

$_SERVER['PHP_SELF']
$_SERVER['HTTP_USER_AGENT']   --> User-Agent
$_SERVER['HTTP_REFERER']      -->  Referer
$_SERVER['REQUEST_URI']
<?php
// echo $_SERVER['PHP_SELF'];
// echo $_SERVER['HTTP_USER_AGENT'];  
// echo $_SERVER['HTTP_REFERER'];  
echo urldecode($_SERVER['REQUEST_URI']);
?>

$_SERVER['PHP_SELF']

输入什么字符 返回什么字符

640.png

构造payload

640.png

$_SERVER['HTTP_USER_AGENT']

打开插件 添加user-agent

$_SERVER['HTTP_REFERER']

$_SERVER['REQUEST_URI']

变量前加上urldecode才可以弹窗 默认把特殊符合进行url编码

存储型 XSS 漏洞

持久化代码是存储在服务器中的如在个人信息或发表文章等地方加入代码如果没有过滤或过滤不严那么这些代码将储存到服务器中用户访问该页面的时候触发代码执行。这种 XSS 比较危险,容易造成蠕虫,盗窃 cookie 等。

审计 sql 语句主要是 update insert 更新和插入语句内容输入输出没有被过滤或者过滤不严!

640.png

640.png

退出 再次点击 则又会弹出

查看数据库 可以看到payload

CSRF漏洞

攻击者盗用了你的身份信息,以你的名义发送恶意请求。
以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等
造成的问题包括:个人隐私泄露以及财产安全。

漏洞本质

攻击者获取到重要的参数,成功构造一个伪造请求
http://www.xxx.com/money.php?count=3&id=1000

思路

后台功能模块:管理后台、会员中心、添加用户等
被引用的核心文件里面有没有验证token和referer相关的代码
没带token:可以直接请求这个页面
没带referer:返回相同的数据
目标存在CSRF漏洞
受害者需要保持目标站点的活跃状态
受害者需要点击钓鱼链接

pikachu 使用lucy登录 然后修改地址

640.png

使用burp在抓包  更改地址

恶意的url

http://192.168.0.9/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=110&add=hacker&email=lucy%40pikachu.com&submit=submit

POST请求 伪造poc html

<?php
mysql_connect("localhost","root","123456");
mysql_select_db("admin");
mysql_query("set names gbk");
if (!isset($_POST['sub'])){
    $name = $_POST['name'];
    $pass = $_POST['pass'];
    $sql = "INSERT INTO `user` (`id`,`name`,`pass`) VALUES (NULL ,`$name`,`$pass`)";
    if ($row=mysql_query($sql)){
        echo "ok";
    } else{
        echo "no";
    }
} else{
    $sql = "select * from user";
    if($row=mysql_query($sql)){
        while($row=mysql_fetch_array($row)){
            echo "name: {$rows[name]}  pass: {$rows[pass]}<br>";
        }
    }
}
?>
<from action="" method="post">
    name:<input type="text" name="name"><br>
    pass:<input type="password" name="pass"><br>
    <input type="submit" value="ok" name="sub">
</from>
<script>
    function a() {
        document.getElementById('tt').submit();
    }
</script>
<body onload=a()>
  <form action="http://127.0.0.1/test.php" method="post" id="tt">
    <input type="hidden" name="name" value="test">
    <input type="hidden" name="pass" value="test123">
    <input type="hidden" name="sub" value="123456">
  </form>
</body>

文件上传漏洞

上传文件的时,服务器端脚本语言未对上传的文件进行严格的验证和过滤,就有可能上传恶意的文件,从而控制整个网站,甚至是服务器。

条件

文件可上传知道文件上传的路径上传文件可以被访问上传文件可以被执行

文件上传可控点

Content-Length,即上传内容大小
MAX_FILE_SIZE,即上传内容的最大长度
filename,即上传文件名
Content-Type,即上传文件类型
请求包中的乱码字段,即是所上传文件的内容
有可能存在请求包中的可控点还有上传路径,只是上面的示例中没有出现

思路

上传点都调用同一个上传类,直接全局搜索上传函数
黑盒寻找上传点,代码定位

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <form action="upload.php"  method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" name="上传文件">
    </form>
</body>
</html>
<?php
header("Content-Type:text/html;charset=utf-8");
if ($_FILES["file"]["error"] > 0)
{
    echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
    echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["file"]["name"];
}
?>

目录穿越

目录穿越(Directory Traversal)攻击是黑客能够在Web应用程序所在的根目录以外的文件夹上,任意地存取被限制的文件夹、执行命令或查找数据。目录穿越攻击,也有人称为Path Traversal攻击。

危害

攻击者可以使用目录穿越攻击来查找、执行或存取Web应用程序所在的根目录以外的文件夹。如果目录穿越攻击成功,黑客就可以执行破坏性的命令来攻击网站

<?php
$file = $_GET['file'];
readfile($file);
?>

文件包含

文件包含漏洞的产生原因是在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞,被包涵的文件在第三方服务是,就形成了远程文件包含漏洞。

危害

执行恶意代码包含恶意文件控制网站甚至控制网站服务器等

思路

模块加载、cache调用,传入的参数拼接包含路径
include()
使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。
inclue_once()
功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
require()
使用此函数,只要程序执行,立即调用此函数包含文件,发生错误时,会输出错误信息并
立即终止程序。
require_once()
功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
<?php
$filename=$_GET['filename'];
include($filename);
?>

本地包含

远程包含

任意文件读取漏洞

通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感信息文件,正常读取的文件没有经过校验或者不严格,用户可以控制这个变量读取任意文件思路

fopen()
file_get_contents()
fread
fgets
fgetss
file
fpassthru
parse_ini_file
readfile
<meta charset="UTF-8">
<?php
$filename = $_GET['file'];
if(isset($_GET['file']))
{
//    $fp = fopen($filename,"r") or die("无法读取文件");
//    $data = fread($fp);
    echo file_get_contents("$filename");
}else{
    echo '<h1>任意文件读取</h1>';
}


任意文件删除漏洞

攻击者从寻找上删除的功能,正常删除功能的文件没有经过校验或者不严格,攻击者控制这个可操作的变量配合目录遍历进行删除其他文件

<?php
header("Content-type:text/html;charset=utf-8");
$filename = $_GET['file'];
if (file_exists($filename)) {
   unlink($filename);
     echo "<script>alert('删除成功')</script>";
 } else{
     echo "<script>alert('删除失败')</script>";
 }
?>


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
安全 小程序 PHP
PHP代码审计(七)Rips源代码审计系统使用教程
上一篇中提到的Seay源代码审计系统是由C#编写的winform程序,现在已经停止更新了,但是,还是比较好用的。 PHP代码审计还有另一个工具,也是一个神器Rips
324 0
|
安全 小程序 PHP
PHP代码审计(五)PHP代码审计方法与步骤
(1):获取到网站源码(这就是废话……) (2):将网站部署到你自己的环境中,能运行。 这里特殊说明一下我的习惯,我本地的环境与线上的环境基本上保持一致,这样在本地审计及线上部署的时候能发现更多的问题。不建议说是随便搭个环境能跑起来就行,这样不是很严谨。 (3):拿到源码之后,浏览大概的项目结构。
138 0
|
Shell PHP Windows
PHP代码审计(四)PHP文件操作函数(2)
改变文件所有者。如果成功则返回 TRUE,如果失败则返回 FALSE。 语法:chown(file,owner)
88 0
|
安全 小程序 PHP
PHP代码审计(六)Seay源代码审计系统使用教程
www.cnseay.com/ 当然,这个已经不能访问了。 软件的版本比较早,需要.NET framework3.5框架,我这里是软件启动的时候自动提醒安装,如果没有自动提醒,那么你需要手动安装.NET frameWork3.5框架,否则,程序应该是没有办法运行。
1203 0
|
5月前
|
JSON PHP Apache
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
[GFCTF 2021]Baby_Web(CVE-2021-41773) 从一道题入门PHP代码审计 (保姆级)
46 1
|
5月前
|
SQL 安全 API
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
PHP代码审计示例(一)——淡然点图标系统SQL注入漏洞审计
115 4
|
5月前
|
前端开发 网络安全 PHP
PHP代码审计之MVC与ThinkPHP简介
PHP代码审计之MVC与ThinkPHP简介
44 2
|
5月前
|
监控 安全 网络安全
PHP代码审计之简单思路方法
PHP代码审计之简单思路方法
159 1
|
7月前
|
SQL 监控 安全
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
代码审计-PHP原生开发篇&SQL注入&数据库监控&正则搜索&文件定位&静态分析
|
8月前
|
PHP
【攻防世界】easyphp(PHP代码审计)
【攻防世界】easyphp(PHP代码审计)