天涯论坛

 找回密码
 立即注册
搜索
查看: 12|回复: 1

PHP 代码审计之 SQL 注入

[复制链接]

3089

主题

3万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098770
发表于 2024-11-3 10:16:32 | 显示全部楼层 |阅读模式

点击右上角【关注】发哥微课堂头条号,get更加多关联技能~

0x00:前言

用 CMS 做例子,今天刚下载安装,由于首页的搜索功能比较显眼,因此看了一下是存在 sql 注入的,基本防护机制,CMS 比较冷门,不属于热门,因此安全性低一点,做审计练手很合适。

0x01:代码跟踪

搜索时 URL 如下:/archives/detail.php?name=1,经过 URL 可知其相应的 php 文件为 archives 下的 detail.php,打开此文件,内容如下:

<?php require_once(include/detail.inc.php); ?>

仅有一行内容,包括了 include 下的 detail.inc.php 文件,打开这个文件,定位到搜索接收 name 参的代码上,其片段代码如下:

$arrWhere = array(); $arrWhere[] = "type_title_english = ".$_GET[name].""; $strWhere = implode( AND , $arrWhere); $strWhere = where .$strWhere; $arrInfo = $objWebInit->getInfoWhere($strWhere);

代码中是直接经过 $_GET 获取到的搜索内容,这儿关联的防护办法,获取到搜索内容后,直接拼接到了 $strWhere 变量中,便是 sql 语句的 where 部分,而后传递给了 getInfoWhere 函数,初步判定是有 sql 注入危险,随后 ctrl + 左键定位到这个函数查看,其代码如下:

public function getInfoWhere($strWhere=null,$field = *,$table=){ try { $table = $table?$tablethis->tablename1; $strSQL = "SELECT $field FROM $table $strWhere"; $rs = $this->db->query($strSQL); $arrData = $rs->fetchall(PDO::FETCH_ASSOC); if(!empty($arrData[0][structon_tb])) $arrData = $this->loadTableFieldG($arrData); if($this->arrGPdoDB[PDO_DEBUG]) echo $strSQL.<br><br>; return current($arrData); } catch (PDOException $e) { echo Failed: . $e->getMessage().<br><br>; } }

在这个函数中传来的 $strWhere 变量直接拼接到了 $strSQL 中,直至到执行 sql,那样能够确定这个搜索功能有 sql 注入问题。前提是程序运用全局过滤器或其他的防护办法

0x02:渗透验证

经过代码的流程能够看出来搜索功能是存在 sql 注入的,下面经过 burp 和 sqlmap 进行验证,结果如下:

能够证明,搜索功能存在 sql 注入漏洞。

0x03:修复意见

一般状况下 sql 注入修复方式有两种,第1个是过滤危险的字符,这些字符不止限与单引号双引号,包扩 union、sleep 等数据库的关键字。第二个是运用预编译语句,收到的值运用占位符进行数据库的 CURD,而不是直接拼接到 sql 中。





上一篇:php代码审计(适合小白入门)
下一篇:PHP代码审计之SQL注入-第二回
回复

使用道具 举报

3070

主题

3万

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99158931
发表于 2024-11-13 01:56:22 | 显示全部楼层
楼主继续加油啊!外链论坛加油!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 00:30 , Processed in 0.092397 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.