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 ...
随机推荐
- 第十三章 Linux三剑客之老二—sed
一.sed #擅长增删改查 替换 选项: -n #取消默认输出 -r #支持扩展正则使用 -i #改变文件内容 -e #允许多项编辑 内部指令: p #print 打印 d # 删除 排除 a ...
- centos mysql5.7安装
1. 安装 1 wget http://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm 2 rpm -ivh mysql57-c ...
- MySQL全面瓦解:安装部署与准备
下载与安装 互联网高速时代下,我们的生活发生了巨大的变化,从购物(淘宝.京东),出行(滴滴.快狗),支付(支付宝.微信)等,遍及我们生活的方方面面,我们使用这些系统和应用的时候,会在上面获取.存储大量 ...
- 输出5个大写英文字母的组合,并写入到txt文档中,随机数法。
1.问题起源:最近想申请几个英文商标,研究了一下,英文字母在4到7个之间最好,5个字母尤佳,所以先来输出5个字母的组合,可是想像力有限,于是想用排列组合把所有5个可能的字母组合都输出,再从中挑选几个感 ...
- 浅析软件测试人员如何对JVM进行内存溢出检测
一.什么是JVM,检测JVM的意义 JVM是java virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各 ...
- 11 Servlet_03 关键字总结 资源跳转:重定项 键值对 继承类 do-get do-post Request域 Context域 =空针解决方法
知识点总结: 1.java里的关键字: byte short int long 数据类型 (正整数)char 数据类型(单字符型)boolesn ture false 布尔类型float dou ...
- Java学习的第十六天
1. 向上转型 向下转型 静态绑定 2.无问题 3.明天学习static关键字和final关键字
- Java学习的第九天
1.双色球联系: 对象的创建和使用 2.静态没太明白. 3.明天学习java 的方法
- git 出现 error: bad signature fatal: index file corrupt
一次大改版,提交了很多代码,但再次提交提交不了,也拉不下来仓库的代码 提示error bad signature fatal: index file corrupt 在项目有.git这同级打开Git ...
- Python爬虫之线程池
详情点我跳转 关注公众号"轻松学编程"了解更多. 一.为什么要使用线程池? 对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致线程数量的失控,例如,整站爬虫,假设初 ...