[代码审计篇]PHP代码审计入门(前置要点)

本文介绍了PHP代码审计的重要性,包括代码审计的定义和前置知识。通过实例讲解了如何回溯敏感参数,以发现SQL注入漏洞。文章还列出了常见的Web漏洞审计提示,如SQL注入、XSS、文件包含等,是初学者入门代码审计的好资源。
摘要由CSDN通过智能技术生成

前言

为了更好的理解漏洞原理以及提升自己的挖洞能力,终于还是入坑了代码审计。况且这个想法已经在脑海中酝酿很久了,但由于方方面面的原因没能照顾到代码审计的学习,索性趁五一假期宅在家里有时间,所以打算正式把这门手艺安排上。

何为代码审计

简介

代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。
即对源代码进行检查,寻找代码中会导致安全问题的bug(漏洞)。

前置知识
掌握基础的编程语法
能看懂代码的逻辑
漏洞形成原理的理解
熟悉不同系统的不同特性
熟悉各种中间件的特性差异

通用审计思路

思路概览
  1. 回溯敏感函数的参数传递过程
  2. 查找可控变量,追踪变量传递过程
  3. 寻找敏感功能点,通读其代码
  4. 直接阅读通篇代码
实例讲解(回溯敏感参数)

espcms_v5源码
Seay源码审计工具

审计开始

先用工具自动审计一波,看看有哪些可能的漏洞
在这里插入图片描述
选中提示由sql注入漏洞的地方,双击跟进:
在这里插入图片描述
可以发现,在第23行的sql语句中有可控的参数$parentid。在右边的变量列表中点击该变量,可以看到其赋值流程:
在这里插入图片描述
可见,参数$parentid从函数accept()中获得,右键该函数并选择函数定位。最后在文件class_function.php的第353行发现该函数的定义:
在这里插入图片描述
该函数的作用是获取参数$_GET$_POST$_COOKIE的值,然后进入R分支。
显然,这里的传参是可以控制的,首先是对$_GET进行传参,然后才是$_POST。
但是,在第372行中,参数$var[$k]被函数daddslashes()进行了处理,所以,在这里跟进分析一波函数daddslashes()。
在第179行有该函数的定义:
在这里插入图片描述
addslashes()函数的功能:

daddslashes() 函数对字符串或数组进行反斜杠处理
在单引号,双引号,反斜杠前'添加反斜杠'
一般用于对表单提交的数据进行处理,防止sql注入
'附:'如果MAGIC_QUOTES_GPC=ON,则不处理。

但是尽管如此,这里的处理并不影响对该漏洞的利用,因为此处的sql语句中没有单引号(’),所以我们不需要去构造闭合的利用条件。

$sql = "select * from $db_table where parentid=$parentid";

于是,便可以确认这里存在sql注入。接下来只需要找到该漏洞的触发点即可,回到漏洞点,发现漏洞函数oncitylist()定义在继承了connecter类的important类中。

在这里插入图片描述
右键全局定位该类(important),最后在/adminsoft/index.php中发现了该类的实例化,也就以为着我们可以在此处构造payload:
在这里插入图片描述
先简单分析以上代码:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值