PHP代码审计入门(敏感函数回溯参数过程)
最近开始啃《代码审计企业级web代码安全架构》这本书,这一章内容看了2天很多内容都理解最主要的是对PHP不熟练所以现在理解了大概 然后进行实地环境搭建最主要的是源码百度真不好找 最后找到一篇也是读这本书的文章上有最后下载了搭建成功测试成功 最后把这篇跟着书上的节奏写下来吧,并附上源码。
代码审计思路
(1) 根据敏感关键字回溯参数传递过程。
(2) 查找可控变量,正向追踪变量传递过程。
(3) 寻找敏感功能点,通读功能点代码、
(4) 直接通读全文代码
靶机环境
Phpstudy PHP5.5.38+Apache
espcms_utf8_5.9.14.08.28.zip
链接: https://pan.baidu.com/s/1-WFmn0iY81H8wlL5jKQsaA 提取码: 7cqa
3.1敏感函数回溯参数过程
根据敏感函数来逆向追踪参数的传递过程,是目前使用得最多得一种方式,因为大多数漏洞是由于函数得使用不当造成的。另外非函数使用不当的漏洞,如SQL注入,也有一些特征,比如select、insert等,再结合from和where等关键字,我们就可以判断这是否是一条SQL语句,通过对字符串的识别分析,就能判断这个SQL语句里面的参数有没有使用单引号过滤,或者根据我们的经验来判断。像HTTP头里面的HTTP_CLENT_IP和HTTP_X_FORWORDFOR等获取到的IP地址经常没有安全过滤就直接拼接到SQL语句中,并且由于他们是在$_SERVER变量中不受GPC影响,那我们就可以取查找HTTP_CLENT_IP和HTTP_X_FORWORDFOR关键字来快速寻找漏洞。
我们首先打开seay源代码审计工具 点击新建项目 然后点击自动审计会得到一部分可能存在漏洞的代码列表

我们选择其中可能存在SQL注入漏洞的代码 双击即可进入该代码文件内

我们选中这个变$parentid这个变量后可以看到它的传递过程是通过accept()这块传输过来的所以我们定位到这个函数可以看看它这块是如何处理的。

我们选中这个函数右键 选择定位函数这个选项即可进行函数定位

双击打开

这是一个获取GET、POST、COOKIE参数值的函数,我们传入的变量是parentid和R,则代表在POST、GET中都可以获取parentid参数,最后经过一个daddslashes()函数,这个函数实际包装的是addslashes()函数,对单引号等字符进行过滤, 不过我们可以看到我们的SQL注入语句是这样的:
$sql=”selec * from $db_table where parented=$parentid”;
它并不需要我们单引号来进行闭合,于是可以直接注入

在citylist.php文件中我们看到oncitylist()函数在important类中我们选中该类名右键点击 全局搜索 功能。

我们看第45行代码有个include文件的操作,可惜经过addslashes()函数无法进行截断使其包含任意文件,只能包含本地PHP文件 限制我们的目标就是要构造 URL 参数或者某个页面表单参数,来触发 citylist.php 文件里的 oncitylist() 函数进行注入 我们进行实例化类并且调用函数操作 根据代码构造出利用过的EXP
http://127.0.0.1/01/upload/adminsoft/index.php?archive=citylist&action=citylist&parentid=-1
PHP代码审计入门(敏感函数回溯参数过程)的更多相关文章
- Python入门篇-函数、参数及参数解构
Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...
- php代码审计入门前必看
首先先介绍什么是代码审计? 代码审计:是指针对源代码进行检查,寻找代码中的bug,这是一项需要多方面技能的技术 包括:对编程的掌握,漏洞形成原理的理解,系统和中间件等的熟悉 2.为什么要进行代码审计, ...
- Oracle编程入门经典 第11章 过程、函数和程序包
目录 11.1 优势和利益... 1 11.2 过程... 1 11.2.1 语法... 2 11.2.2 建立或者替换... 2 11.2 ...
- Oracle过程及函数的参数模式,In、out、in out模式
Oracle过程及函数的参数模式 In.out.in out模式 在Oracle中过程与函数都可以有参数,参数的类型可以指定为in.out.in out三种模式. 三种参数的具体说明,如下图所示: ( ...
- plsql programming 17 过程, 函数与参数
代码模块化, 即将一大块代码拆成若干小块(过程), 然后就可以在其他模块调用这些模块了, 这样, 重用性更好, 也方便管理. 过程: 过程是一个可以像执行 PL/SQL 语句一样调用的程序, 一个过程 ...
- Delphi过程函数传递参数的几种方式
Delphi过程函数传递参数的几种方式 在Delphi过程.函数中传递参数几个修饰符为Const.Var.Out. 另一种不加修饰符的为默认按值传递参数. 一.默认方式以值方式传递参数 proced ...
- 【delphi】Delphi过程、函数传递参数的八种方式
Delphi过程函数传递参数的八种方式
- 09-Python入门学习-函数基础与参数
一.函数基础 1.定义函数的三种形式 1.1 无参函数 def foo(): print('from foo') foo() 1.2 有参函数 def bar(x,y): print(x,y) bar ...
- 代码审计入门之BlueCMS v1.6 sp1
0x00 前言 作为一名代码审计的新手,网上的大佬们说代码审计入门的话BlueCMS比较好,所以我就拿BlueCMS练练.(本人实在是一枚新手,请大佬们多多赐教) 0x01 环境准备 Phpstudy ...
随机推荐
- 【Azure微服务 Service Fabric 】如何转移Service Fabric集群中的种子节点(Seed Node)
注意:在对Service Fabric的节点做操作之前,请务必确认是否是种子节点(Seed Node)且当前节点的数量是否与SF的持久层要求的数量一致. 可靠性级别是 Service Fabric 群 ...
- COMET —— 常识Transformer用于自动知识图构建
<COMET:Commonsense Transformers for Automatic Knowledge Graph Construction> 论文地址 论文源码 任务 目的层面 ...
- JS的Document属性和方法(转)
document.title //设置文档标题等价于HTML的title标签document.bgColor //设置页面背景色document.fgColor //设置前景色(文本颜色)docume ...
- day73:drf:drf视图相关类&路由Routers&创建虚拟环境
目录 1.APIView 2.GenericAPIView:通用视图类 3.5个视图扩展类:ListModelMixin,CreateModelMixin,RetrieveModelMixin,Upd ...
- 解决Java连接Oracle 12c存在的问题
感谢作者 原文链接:https://blog.csdn.net/peng_wei_kang/article/details/80403486 1.发现项目报以下错误: Caused by: jav ...
- 稳压二极管、肖特基二极管、静电保护二极管、TVS管
1.稳压二极管 正向导通电压跟普通二级管一样约为0.7v,反向状态下在临界电压之前截止,在达到临界电压的条件下会处于导通的状态,电压也不再升高,所以用在重要元器件上,起到稳压作用. 稳压二极管主要利用 ...
- vue 404
问题描述:前端同事使用Vue.js框架,利用vue-route结合webpack编写了一个单页路由项目,运维协助在服务器端配置nginx.部署完成后,访问首页没问题,从首页里打开二级页面没问题,但是所 ...
- Educational Codeforces Round 95 (Rated for Div. 2)
CF的Educational Round (Div.2),质量还是蛮高的. A: 水题 #include<cstdio> #include<algorithm> typedef ...
- POI CellStyle 中样式覆盖问题
问题描述 在使用 Apache POI-3.8的时候,需要一个功能,就是处理上传得 Excel的 cell style.如果数据有错误,则标红或者加上其他 style 标识.但是当直接获取到 cell ...
- Charles使用part4——修改网络请求
Charles提供了Map功能.Rewrite功能.Breakpoints功能,都可以达到修改服务器返回内容的目的,这三者的差异是: Map功能适合长期的将某些请求重定向到另一个网络地址或本地文件 ...