热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php代码审计靶场,记一次简单的php代码审计

PHP代码审计所需工具:(1)环境:PHPstudy我这里直接使用phpstudy。其他的如:xampp,lamp等集成环境

PHP代码审计所需工具:

(1) 环境:PHPstudy

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

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

(2) 代码审计工具:

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

1. RIPS

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

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

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

136be34314a57ba454d97dfa8ef5d707.png

2. Seay

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

136be34314a57ba454d97dfa8ef5d707.png

经验总结:

我这边总结一下我自己个人的经验。我个人是没有系统的学习过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可以水一波证书,然后刚好看到这个某业,结果洞挖好之后,发现已经有人提交了,所以我不是第一个发现该漏洞的人。这次就用来当做教材分享给大家吧。官方也已经发布补丁。本次教学仅供参考学习,切勿做任何违法活动。

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

剩下偷个懒,直接扔sqlmap。

136be34314a57ba454d97dfa8ef5d707.png

(2) Csrf(YzmCMSV5.5版本)

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

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

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

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

136be34314a57ba454d97dfa8ef5d707.png

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

136be34314a57ba454d97dfa8ef5d707.png

136be34314a57ba454d97dfa8ef5d707.png

总结

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



推荐阅读
  • 跨站的艺术XSS Fuzzing 的技巧
    作者|张祖优(Fooying)腾讯云云鼎实验室对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做F ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 点击上方Java后端,选择设为星标优质文章,及时送达项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在Spri ... [详细]
  • 20155317王新玮《网络对抗技术》实验8 WEB基础实践
    20155317王新玮《网络对抗技术》实验8 WEB基础实践 ... [详细]
  • 这座城市多了十只伤心的鸽
    这个作业属于哪个课程2021春软件工程实践|W班(福州大学)这个作业要求在哪里团队第四次作业这个作业的目标设计项目原型、制作项目需求规格说明书团队名称这座城市多了十只伤心的鸽其他参 ... [详细]
  • HTMLformwithoutCSRFprotectionHTML表单没有CSRF保护CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是CrossSiteRequestFor ... [详细]
  • 拿到目标后简单看了下,是一个类似员工管理的东西,用户可以创建group,其他用户可以搜索这个grou ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • v.1.2.beta4Igetthefollowingerrorwhentryingtodeleteauserfromtheadmin ... [详细]
  • HDIV简介一个简单又强大的安全框架
    为什么80%的码农都做不了架构师?惯例官方纯英文档:https:hdivsecurity.comtechnical-documentationdo ... [详细]
author-avatar
琪琪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有