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 ...
随机推荐
- Python函数名的应用和新特性格式化输出
1.函数名指向的是函数的内存地址. def func(): print(123) print(func,type(func)) # <function func at 0x000000000 ...
- 尝试从零开始构建我的商城 (一) :使用Abp vNext快速一个简单的商城项目
尝试从零开始构建我的商城 (一) :使用Abp vNext快速搭建一个简单的项目 前言 GitHub地址 https://github.com/yingpanwang/MyShop 此文目的 本文将尝 ...
- Java Web核心组件之Servlet的使用介绍
Servlet是Java Servlet的简称,称为小程序或服务连接器,用Java编写的服务端程序,主要功能在于交互式地浏览和修改数据,生成动态的Web内容:Servlet运行于支持Java的应用服务 ...
- concurrenthasmap
concur'renthashmap java1.7 hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全.hashTable中使用synchronized关键字 ...
- vue学习第一部
目录 基础操作 vue基础使用 步骤 vue的框架思想(mvvm) 显示数据 vue 常用指令 属性操作 事件绑定 操作样式 条件渲染指令 列表渲染指令 vue对象提供的属性功能 过滤器 计算和侦听属 ...
- 【应用服务 App Service】 App Service Rewrite 实例 - 反向代理转发功能
问题描述 在使用Azure App Service(应用服务)时,有时候需要在不同的站点之间进行跳转,但是希望通过通过访问同一个域名的方式来实现反向代理.如果创建应用时候选择的是Window服务,这时 ...
- 线程池CachedThreadPool
没有核心线程,只有非核心线程,并且每个非核心线程空闲等待的时间为60s,采用SynchronousQueue队列 由于maximumPoolSize是无界的,所以如果线程处理任务速度小于提交任务的速度 ...
- mysql幻读、MVCC、间隙锁、意向锁(IX\IS)
IO即性能 顺序主键写性能很高,由于B+树的结构,主键如果是顺序的,则磁盘页的数据会按顺序填充,减少数据移动,随机主键则可能由于记录移动产生很多io 查询二级索引时,会再根据主键id获取数据页,产生一 ...
- P2868 [USACO07DEC]Sightseeing Cows G
题意描述 Sightseeing Cows G 给定一张有向图,图中每个点都有点权 \(a_i\),每条边都有边权 \(e_i\). 求图中一个环,使 "环上个点权之和" 除以 & ...
- 文件流转blob并播放
axios 这里是请求了个mp3做例子: this.$axios({ methods:"GET", url:"/api/music/soures/双笙.mp3" ...