PHP代码审计所需工具:

(1) 环境:PHPstudy

我这里直接使用phpstudy。其他的如:xampp,lamp等集成环境都可以。

Phpsyudy官网地址:https://www.xp.cn

(2)代码审计工具:

“工欲善其事,必先利其器。”一款好的代码审计工具可以辅助我们的白盒测试,提高挖掘漏洞的效率。下面我来介绍一下两款常用的代码审计工具。

1. RIPS

Rips是PHP语言开发的一款流行的审计工具,只要我们搭建好php环境就可以使用该工具。

官网:http://rips-scanner.sourceforge.net

下载好后,放入到我们本地搭建的网站根目录中,访问即可。下面是rips的界面。

2.Seay

这是一款由国内大牛法师(seay)13年期间基于c#开发的一款针对与PHP代码安全性审计的系统。是初学代码审计时常用的一款工具。

经验总结:

我这边总结一下我自己个人的经验。我个人是没有系统的学习过php的,所以说的有误的请各位大牛更正。

我认为有几点:

(1)确定框架或了解好文件的作用

为什么要确定好框架呢?因为确定好框架,我们可以去找找该框架的漏洞,也为我们后续审计工作带来更多的便利。怎么确定好一个框架呢?通常我们可以去看看需要审计的cms的官方文档。

为什么需要了解好文件的作用呢?我认为搭建好要审计的代码后,第一步就去找存放有全局函数,全局类的文件或配置文件。为什么呢?因为存放有全局函数的,如过滤xss,sql注入的函数都放在里面,我们可以看看过滤的正则写的怎么样,看看能不能绕过正则。或者如一些获取ip地址的函数,有没有过滤好,如果没有过滤好,往往都会出现http注入。

如何去找这些文件呢?一般有几个命名方式,如存放有全局函数的文件命名一般带有function,而配置文件一般会带有config这个字样,而controller,class多为类文件,存放类文件的目录多为controller或lib。所以说我们从文件名上就可以获取到很多信息。

(2)找好输入点,并确定有没有危险函数。

找好输入点?找什么的输入点呢。我们也知道有几个超全局变量如:$_GET $_POST $_SERVER.....

这几个不难发现都是用来接收外部输入的变量,这就是我们的输入点,而用户的输入都是不可信的。找到危险函数的同时,我们也要确定我们有没有输入点,可以对这个危险函数进行操作,且这个输入点输入的内容,程序有没有进行过滤或者过滤不充足。这几点是我们要考虑的问题。

(3)黑白盒交替进行,懂得抓包分析,逐步调试你觉得可疑的代码。

黑白盒交替进行,运用好抓包分析,对我们代码审计工作有着非常重要的作用。我们开始看到的是一个网站成形的样子,而不是一堆看到眼花缭乱的代码。所以如果是一些刚学代码审计,对代码通读能力较弱的人,可以先进行一下黑盒测试。我们可以一开始找到一个什么留言板,搜索框之类的,去测试有没有xss。有url跳转的地方去测试ssrf,或者登录后台添加或删除用户时,抓包分析,适当删除referer头来看看存不存在csrf。感觉麻烦的就拿AWVS,Nessus这些工具扫一波。

懂得调试代码,我们也可以单独将一段可疑的代码复制到另一个文件调试,多输出你想要的变量,来看看过滤规则等。

(4)最后一点是心态上,一定不能着急,要慢慢来,不要怕被打击,不断地总结经验。

实战演示

(1)SQL注入(演示云业CMS)

这个说真的,我这几天为了帮朋友搞个证书,我随便去源码站那里看看那些cms可以水一波证书,然后刚好看到这个某业,结果洞挖好之后,发现已经有人提交了,所以我不是第一个发现该漏洞的人。这次就用来当做教材分享给大家吧。官方也已经发布补丁。本次教学仅供参考学习,切勿做任何违法活动。

好的,我们现在直接到存放有全局函数的文件里,我们可以看到这个getip()用来获取ip的函数后面没有经过任何过滤,直接返回,这样就会造成一个http头注入。既然认为这是个漏洞,剩下我们就去看看哪里调用了这个函数。我这里用的是seay代码审计系统,这有一个全局搜索的功能,我们搜索getip()看看那里调用了该函数。

好的,这次我们点开这个/admin/login.php管理员登录文件

可以发现这个$logiparr调用了getip()函数,又未经过滤后传入checklogintimes函数,然后我们追踪一下这个函数。

可以发现这个过程是未经过任何过滤就传入值,所以我们抓包分析一下,可以发现当我们加了xxf头后,在ip地址后面加个引号会出现MYSQL报错提示。说明存在注入漏洞。

剩下偷个懒,直接扔sqlmap。

(2)Csrf(YzmCMSV5.5版本)

这个危害比较小,比较很鸡肋(厂商也不收呀),所以我拿来演示Csrf漏洞产生。

首先,是一个黑盒测试。我们直接登录管理员后台添加和删除会员的页面。通过抓取添加和删除会员时的数据包,分析。

网站程序只是简单的验证了一下referer头

删除referer头后,成功添加用户

所以,当referer头为空或者跟他同源时,则绕过检测。所以我们的paylaod代码就可以用标签配合data协议,以及base64编码实现。然后黑盒测试完成

该代码会添加一个haha的用户,实测效果:

然后我们来看下代码,其实这个关键点的就是,添加用户的的时候,没有加一个token验证,而这个检测只是简单的验证了referer头。

总结

上面两个只是比较小的案例,我这边建议的是开始最好从dvwa这些靶场,去看看产生漏洞的源码,了解漏洞产生的原因,然后再去找找比较简单,小众的CMS去挖掘。这些cms可以去网上那些源码之家找找。然后多看别人的文章,多参考参考大佬们的经验。看懂后最好自己能复现一下。

喜欢的大表哥 点个

关注+再看

怎么学php代码审计,记一次简单的php代码审计相关推荐

  1. 语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。...

    语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程. 为了将本人的python培训提高一个层次,本人最近买了很多算法的书. 这个书上的代码基本都是c语言实现的,c语言很久 ...

  2. python哪个方向简单_现在学Python,哪个方向最简单?哪个方向最吃香 ?

    " 我想学Python,但是学完Python后都能干啥 ?" " 现在学Python,哪个方向最简单?哪个方向最吃香?" " -- " 相信 ...

  3. php 盾灵新闻系统,代码审计 | 记一次盾灵系统审计从后台到Getshell

    原标题:代码审计 | 记一次盾灵系统审计从后台到Getshell 以下内容仅供技术研究学习使用! 严禁用于非法操作! 切实维护国家网络安全,普及相关网络安全知识是信安从业者的义务! 0x00前言: 在 ...

  4. 记一次简单线上比赛--CTF(初级)

    记一次简单线上比赛–CTF(初级) 第一题:胖虎收到了一段特殊的字符串O5SWYY3PNVSXI33FORWGCYQ=,你能帮他解出正确内容吗? 解答: 1.首先看到这一串字符串就想到base64编码 ...

  5. 记一次简单高效的吸血鬼算法

    记一次简单高效的吸血鬼算法 什么是吸血鬼数字 获取四位数的吸血鬼数字的代码实现 输出结果 代码分析 什么是吸血鬼数字 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一 ...

  6. Mina、Netty、Twisted一起学(一):实现简单的TCP服务器

    MINA.Netty.Twisted为什么放在一起学习?首先,不妨先分别看一下它们官方网站对其的介绍: MINA: Apache MINA is a network application frame ...

  7. 小于等于0_从0开始学ARMARM汇编指令其实很简单

    学习ARM,就必须要学习ARM指令,ARM指令是CPU提供给我们的接口,是我们打开CPU这个潘多拉魔盒的钥匙. ARM指令有很多,为了让大家能快速上手,一口君整理了一些对我们最有帮助的指令.keil软 ...

  8. 有服主传送玩家指令_我的世界:狗子传送机学废了?没关系,简单无脑的WiFi红石来了!...

    点击上方 蓝字 即可关注,每天有免费文章分享,欢迎留言小编看到会及时回复!!! 声明:本文素材均来源于网络,如有侵权联系删除 图酱在我的世界:狗子无用?错,是你不会用!试试大神开发的狗子回家机文章中介 ...

  9. 【项目实战课】人人免费可学!基于Pytorch的图像分类简单任务数据增强实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的图像分类简单任务数据增强实战>.所谓项目实战课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的 ...

最新文章

  1. 一个html文件放到服务器访问,访问云服务器里面的html文件
  2. php公用一个尾部,19.2 共用显示部分 - 19.2.2 共用尾部页面 - 《零基础学PHP+MySQL (零基础学编程)》 - D云...
  3. mysql 给表起别名_MySQL ------ 高级联结 (自联结,自然联结,外联结,带聚合函数的联结)(十五)...
  4. ubuntu查看python版本-linux查看python安装路径,版本号
  5. java mod函数的使用方法_java 数学计算的具体使用
  6. .net安全编程 阅读笔记(二)
  7. python相同key合并value_python 合并字典,相同 key 的 value 如何相加?
  8. 在linux看数据库表空间,Linux平台达梦数据库V7之表空间管理
  9. LIS (nlogn)的算法
  10. 如何使用 Mac 的通知中心?
  11. 程序转换实验程序流程图_智能化实验室 | # 自动智能化实验室的5大系统 #
  12. Jquery cookies 记忆菜单
  13. java web导出excel表格,java 网页导出excel表格数据-java 将页面内容写入excel文件中并可以将其下载到......
  14. 京东放大镜效果实现 + 原理分析
  15. 车辆运动学自行车模型
  16. ODBC连接数据库使用动态密码
  17. 算法导论------递归算法的时间复杂度求解
  18. js 刮一刮_刮擦刮擦
  19. 什么是网络流量劫持?揭秘详解黑客劫持的攻击手段与防御方法 (一)
  20. 【方法】STM32F103C8单片机通过定时器DMA测量脉冲宽度,无需CPU干预(以DHT11传感器为例)

热门文章

  1. 翻译翻译什么TMD叫EXPLAIN
  2. 掌握Pytorch模型 压缩 裁剪与量化
  3. Android中的多点触控(装载)
  4. Socialbook告诉你网红营销和ROI的关系~
  5. react常用生命周期流程图
  6. Jq-滚动条插件写法(二)
  7. Android监听横竖屏切换
  8. 团队融洽之拓展器械拓展训练
  9. linux进程概念(中)
  10. 计算机如何安装无线网络适配器,无线网络适配器是什么,无线网络适配器如何设置...