根据源代码对应的功能猜测具体漏洞。
解决不了的问题–学会放弃,毕竟WAF不是能随便绕的。
PHP开发-分页读取文件条目
知识点:
1、PHP入门-语法&提交等
2、MYSQL入门-数据库操作
3、HTML+CSS入门-样式编排
安全向:SQL注入。=>通过功能去找注入点。
实现功能:
前端文章导航,点入内容显示,更改ID显示不同内容
前台显示文章,后台添加文章。
文章阅读,留言板,会员中心,模板风格引入……
登录验证,文章增删改查,配置修改……
php代码和html代码混编执行。
实现步骤:
php配置文件有:index.php,news.php,conn.php
index:主页文件
news:新闻模块
conn:数据库连接文件
index.php
<!DOCTYPE html> <html lang="en">
  <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>测试</title> </head>
  <body>     <style>         li {             list-style: none;             display: inline-block;         }         a {             display: inline-block;             width: 100px;             height: 40px;             text-align: center;             line-height: 40px;             background: red;             text-decoration: none;             color:              transition: all 0.4s 0.1s;         }         a:hover {             background:              color: yellow;         }     </style> <ul>     <li><a href="index.php">首页</a></li>     <li><a href="news.php">新闻</a></li>     <li><a href="#">公司产品</a></li>     <li><a href="#">关于我们</a></li>     <li><a href="#">公司介绍</a></li> </ul> </body>
  </html>
   | 
 
news.php
<!DOCTYPE html> <html lang="en">
  <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>暗网新闻</title> </head>
  <body>     <h1>欢迎来到新闻模块</h1>
  </body>
  </html> <?php
  include 'config/conn.php';
 
  $pageSize = 10;
 
  if (isset($_GET['page'])||$_GET['page']=='') {     $page = $_GET['page']; } else {     $page = 1; }
 
  $start = ($page - 1) * $pageSize;
 
  $sql0 = 'select * from wordimg'; $max_num = mysqli_num_rows(mysqli_query($conn,$sql0)); $sql = "select * from wordimg LIMIT $start ,$pageSize;";
  $w =  mysqli_query( $conn,$sql);
  $list = mysqli_fetch_all($w);
 
 
  foreach ($list as $key=>$value){     echo "<h3>$value[0]</h3><p>$value[1]</p>"; } $up = max(1, $page - 1); $next = $page + 1; $next = ($max_num/10) < $next ? ($max_num/10) : $next; echo "<a href='?page=$up'>上一页</a>"; echo "<a href='?page=$next'>下一页</a>";
   | 
 
conn.php
<?php $dbid = '127.0.0.1'; $dbna = 'root'; $dbpd = '123456'; $dbda = 'phpopen'; $conn = mysqli_connect($dbid,$dbna,$dbpd,$dbda);
   | 
 
PHP开发-文件下载/删除/读取/写入
知识点
1、文件操作类代码编写
2、文件上传&下载&删除
3、文件内容&读取&写入
4、第三方编辑器引用实例
各个类型
文件上传类:-任意文件上传
1、代码自主写–源码
 <form action="file_upload.php" method="post" enctype="multipart/form-data">     <input type="file" name="file">     <input type="submit" name="submit" value="提交"> </form>
 
  <?php var_dump($_POST['submit']); if($_SERVER['REQUEST_METHOD']=='POST'){     $rou = $_FILES['file'];     $allowedExts = array("gif", "jpeg", "jpg", "png");                    if (isset($rou)){         $err = $rou['error'];         if (!($err>0)){             $type = $rou['type'];             $allowedExts = array("gif", "jpeg", "jpg", "png");             $w = 0;
              foreach ($allowedExts as $key=>$val){                 if ('image/'.$val==$type){                     $w++;                     $size = $rou['size'];                     if($size>100){                         echo "大文件正在上传当中!";                         $path = './f';                         $tmpname = $rou['tmp_name'];                         $filename = $rou['name'];                         $x = move_uploaded_file($tmpname,"$path/$filename");                         echo $x?"上传成功":"上传失败";                     } else {                         echo "文件太小啦!";                     }                 }             }
              if ($w==0){                 echo "文件类型有误!";             }             echo $w;         } else {             echo "您的传入有误";         }     } }
 
  | 
 
2、编辑器引用–调用插件插入网站
编辑器自身的漏洞会影响到网站,核心代码在编辑器自身,而不是源代码。
简单来说,源码再安全,也顶不住插件釜底抽薪。
验证的核心在插件上。
3、框架类文件上传(暂略)
调用别人封装好的代码自己进行编译,关键点在于框架本身,有漏洞后也挡不住这种第三方捅娄子。
验证的核心在框架上。
文件下载类:-任意文件下载
1、直连URL访问
利用网站无法解析对应的文件进行文件下载,如果是php文件就是直接执行php文件了 形如:xiaodi8.com/file.zip 可以调用herf进行下载
   | 
 
2、传参头部修改
形如:xiaodi8.com/index.php?filename=file.zip
   | 
 
源码泄露后有任意文件下载风险。
<h1>Downlond </h1>
  <a href="./f/caidao.exe">点击下载文件</a> <a href="?filename=caidao.exe">点击下载文件</a>
  <form action="file_down.php" method="post">     <h4>选择性下载文件</h4>     <input type="text" name="file">     <input type="submit" name="点击下载"> </form>
  <?php
  if ($_SERVER["REQUEST_METHOD"]=="POST"){     $name = $_POST['file'];     geturl($name); } function geturl($name){     $url = "http://".$_SERVER['HTTP_HOST']."/file/f/".$name;     echo $url;     header("Location: ".$url); }
 
  if ($_SERVER['REQUEST_METHOD']=='GET'){     $file_name = isset($_GET['filename'])?$_GET['filename']:'';      $file_path = '/f/'.$file_name;           if (isset($_GET['filename'])){         if ($_GET['filename']!=''||$_GET['filename']!=null){                          $file = fopen($file_path, 'rb');                          $file_size = filesize($file_path);                          header("Content-type: application/octet-stream");             header("Content-Disposition: attachment; filename=$file_name");             header("Content-Length: $file_size");                          while (!feof($file)) {                 print(fread($file, 1024 * 8));                  ob_flush();                 flush();              }             fclose($file);         }     } }
   | 
 
文件删除类-任意文件删除
1、文件删除
2、文件夹删除
  <h5>文件删除</h5> <form action="file_del.php" method="post">     需要删除的文件/文件夹:<input type="text" name="file">     <input type="submit" name="submit" value="删除"> </form> <?php if ($_SERVER["REQUEST_METHOD"]=="POST"){     $file = "./f/".$_POST['file'];     if (isset($_POST['file'])){         echo "删除开始……<br>";         if(file_exists("$file")){             echo "路径信息有误<br>";         }         deleteDir($file);     } }
  function deleteDir($dirPath) {     echo ''.$dirPath.'<br>';     if (is_file($dirPath)) {         unlink($dirPath);     }else if (is_dir($dirPath)) {         $dirPath = $dirPath.'/';                  $files = array_diff(scandir($dirPath),array(".",'..'));         $hd=opendir($dirPath);         while(($file_name=readdir($hd))!==false){
              if ($file_name!='.'&&$file_name!='..') {                 $file_path = "$dirPath$file_name";                 deleteDir($file_path);             }         }         closedir($hd);                  @rmdir($dirPath);
      } }
 
 
 
  | 
 
文件内容操作类-任意文件读取&写入
1、文件读取
2、文件写入
<style>     textarea {         width: 500px;         height: 600px;         resize: none;     } </style> <?php $x = ''; $path = ''; if ($_SERVER['REQUEST_METHOD']=="POST"){     if (isset($_POST['path'])){         $path = './f/'.$_POST['path'];         $x = file_get_contents('./f/'.$_POST['path']);     }     if (isset($_POST['text'])){         $p = $_POST['p'];         $c = $_POST['text'];         file_put_contents($p,$c);     } } ?>
  <form action="file_rw.php" method="post">     读取指定文件:<input type="text" name="path">     <input type="submit" value="读取"> </form>
  <form action="file_rw.php" method="post">     <input type="hidden" name="p" value=<?php echo $path;?> >     <textarea name="text"><?php echo $x?></textarea>     <input type="submit" name="submit" value="修改"> </form>
   | 
 
文件包含-任意文件包含
概念
1、本地文件包含
2、远程文件包含
文件包含:包含即执行,脚本执行
  函数会执行1.txt里面的php代码 include(1.txt);
  形如: url: http:
  index.php内: include($_GET['path']);
  这就是包含执行。假如传入的flag.php为后门,就变成了一个文件包含漏洞。
 
   | 
 
文件包含函数:
require() 
  require_once() 
  include() 
  include_once() 
   | 
 
Web漏洞核心:
1、可控变量 - 变量修改与拼接
2、特定函数 - 函数的多样化 - 常见函数漏洞绕过等
PHP开发-输入输出留言板访问获取
知识点:
1、PHP-全局变量$_SERVER
2、MYSQL-插入语法INSERT
3、输入输出-XSS&反射&存储
4、安全问题-XSS跨站&CSRF等
PHP本地搜索
可以传入JS,利用JS进行攻击。
<form action="file.php" meathod="post">     <input type="text" name="word">     <input type="submit" value="搜索"> </form>
 
  <?php
  include "conn.php";
  $s = $_POST['word']; $sql = "select * form Tablename where word_title like '%$s%' " $list_value = mysqli_quake($conn,$sql); if($list_value){     echo "你搜索的$s结果如下:";     echo "<ul>";     $list mysqli_fetch_all($list_value);     foreach($list as $k=>$v){         echo "<li>用户:$v[0]<p>内容:$v[1]</p></li>";      }     echo "</ul>"; }else {     echo "暂无与$s相关的搜索结果!"; } ?>
   | 
 
跨站漏洞:你输入的内容控制网站内容的显示
应用:留言板
XSS跨站脚本攻击
 
 
 
 
  存储型:脚本存储到数据库或者存储到可以被执行的地方(安全问题出处) 反射型:
 
 
  黑盒安全问题: 接收你的值的输入,又会将你的值输出 => 对应XSS
 
  相关PHP函数:$_SERVER 根据目标的功能决定漏洞, 功能越多漏洞越多,功能越少漏洞越少 CSRF请求伪造 来源伪造CSRF XFF伪造绕过的是PHP检测的,如果是服务器自身的检测不走PHP的,就伪造不了了
 
 
  | 
 
PHP开发-COOKIE/SESSION/TOKEN
都是用于身份验证的,但略有区别
COOKIE:存储到客户端        => COOKIE被盗取时导致信息泄露/任意条件绕过
SESSION:存储到服务器       => 会话劫持,未失效时才能有效使用(它是动态变换的,有时效性)
TOKEN:唯一的身份认证       => 唯一的标志,利用各种算法来生成这个字符串
具体实例:SEC-2023版学习-0029
安全问题-后台验证:
- 用户登录逻辑安全问题     => SQL注入
 
- COOKIE和SESSION安全问题
 
- 验证码、万能密码安全问题 => 防爆破(不规范等于没用,例如被绕过)
 
验证码存在的问题: 验证码复用,验证码第一次输入后续不再输入
  完整的验证: 每次登陆/刷新页面验证码都要改变
  实战验证: 输入正确的验证码抓包,在重发器测试验证码不改变的情况下掉密码,看验证码是不是会提示错误 提示错误则表示验证码没问题
  验证码识别: 有插件实现,可针对那些非动作类的,一般是薅羊毛的人批量注册搞的
   |