PHP-代码审计-SQL注入

代码审计

白盒测试

  • 搭建成功后 用WEB漏洞扫描工具
  • 利用网站的源码进行代码审计

准备工作

  • 漏洞参数条件:函数 可控变量
  • 列如sql注入
  • 函数关键字:mysql_connect mysql_select_db mysql_query 等
  • 可控变量关键字:$_GET $_POST $_REQUEST $_SERVER等

定点漏洞挖掘

  • 分析漏洞产生条件
  • 得到漏洞关键字
  • 利用工具查找关键字
  • 分析文件名进行判断筛选
  • 对文件进行代码分析 跟踪变量
  • 确定是否存在该漏洞

数据库监控工具挖掘

  • 打开审计插件mysql监控工具

在这里插入图片描述

  • 输入mysql账号密码点击下断和更新

在这里插入图片描述

  • 登陆要审计的页面
  • 并且吧各个功能点都点一遍

在这里插入图片描述

  • 回到源代码审计工具
  • 点击更新
  • 看到变量中带值的的sql语句就可能是注入点

在这里插入图片描述

  • 复制带值的sql语句部分

在这里插入图片描述

  • 粘贴到包含文本,并输入搜索的文件和范围,一般文件就是php文件

在这里插入图片描述

  • 点开一个看起来不像配置文件的文件
  • crtl + f 搜索刚刚粘贴的关键字

在这里插入图片描述

  • 找到带参数id的sql语句
  • 如果包含该参数有变量,就需要回调该变量,观察该变量过滤规则,从观察是否存在过滤不完整
  • dvwa用的isset函数,没有过滤的意思,所以不必回调
  • 所以该页面没有任何过滤,存在sql注入

在这里插入图片描述

SEAY源代码工具挖掘

  • 首先打开seay源代码审计工具
  • 点击新建项目导入源码
  • 点击自动审计

在这里插入图片描述

  • 可以看到一堆漏洞
  • 我们点击sql注入这个

在这里插入图片描述
产生漏洞 条件

  • 函数关键字:mysql_connect mysql_select_db mysql_query 等
  • 可控变量关键字:$_GET $_POST $_REQUEST $_SERVER等
  • 该没有可控变量关键字,我们假设他有关键字$_GET

  • 可以看到使用了变量传入,并且有函数包裹所以我们要回调函数
  • 我们复制该函数名

在这里插入图片描述

  • 在本文中查找该函数

在这里插入图片描述

  • 可以看到该函数的定义是
  • 如果条件存在就将输入的字符转义

在这里插入图片描述

  • 我们查一下该条件到底是什么
  • 使用了两个函数:function_exists()和get_magic_quotes_gpc()
  • 第一个是定义是否传来字符串
  • 第二个是定义传来的铭感字符添加转义

在这里插入图片描述

  • 再回到这边来
  • 如果那边的条件成立,则根本不存在注入
  • 因为他规定了输入必须是字符还有转义威胁字符

在这里插入图片描述

  • 所以该位置不存在注入
    在这里插入图片描述
  • 我们现在做一个假设
  • 如果没有必须是字符串的条件
  • 他只是过滤了单引号等字符

在这里插入图片描述

  • 而该sql语句并没有吧字符写死在里面
  • 则该位置就存在漏洞,因为他过滤的是字符单引号等字符,但是我们可以不用字符,使用整形注入

在这里插入图片描述

  • 现在假设他真的就存在这么一个漏洞
  • 通常情况是观察该类在那位置实例化可以是本文也可以是外部调用所以本文和外部调用我们都要搜索是否存在
  • 我们搜索该类的时候发现没有任何文件调用(此处无图),所以他肯定就是在本页面中使用

三种情况

  • 一种是在其他文件实例化,一种是在本文件实例化,还有一种是在类中调用

  • 文件实例化:就要通过全文函数搜索,去找到实例化的文件,然后再通过该传参条件,在外部文件构造sql语句

  • 本文件实例化和类中调用都直接在当前文件构造sql语句即可


  • 通过在本文搜索,搜索他当前所在的函数

  • 发现该函数就是在类中调用

在这里插入图片描述

  • 找到该语句,根据其条件,构造出利用姿势

  • 如:php?funcName=unique&value=1

  • 反正不是盲注就是显注入或报错注入

  • 观察应该是盲注

  • 如果真的要确定是什么注入就跟一下条件语句中的函数,看他怎么处理即可

这里假设变量都是用get传参(图中小红方块),因为该源码没有吧参数传递给用户,所以将就假设一下,方法都一样

f u n c N a m e = funcName= funcName=_GET[‘unique’];
v a l u e = value= value=_GET[‘unique’];

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值