代码审计综述

查阅大量资料后,列出的常见代码审计漏洞。

代码审计
===================================================================================================
*	sql注入
	**	变量未过滤导致
		***	http://www.test404.com/post-811.html
		-	$_SERVER变量未过滤,请求头中X_FORWARDED_FOR,CLIENT_IP,HTTP_HOST,ACCEPT_LANGUAGE
		-	传入的参数未强制转为int
		-	数组只过滤了value未过滤key,但key也会代入到sql中
		-	$_FILES变量未过滤( http://www.test404.com/post-815.html )

	**	过滤函数的误用
		***	http://www.test404.com/post-809.html
			-	str_replace将单引号去掉了,结果转义符反斜杠留下了,导致在sql语句中将真正的单引号转义了
			-	在带入sql语句前,stripslashes将转义符去掉了
			-	多余的urldecode,导致单引号的“二次编码”%2527可以绕过单引号过滤 ( http://www.test404.com/post-808.html )

	**	二次注入
		-	单引号被转义后入库或入文件,再次以该字段为查询条件时触发

	**	宽字节注入
		-	gpc或addslash添加了转义符%5c

*	命令注入
	-	popen
	-	proc_open
	-	exec
	-	system
	-	passthru
	-	反引号 

*	代码注入
	**	pgrep_replace
	**	eval
	**	assert
	**	双引号
		-	php -r ‘$a = "${${eval(phpinfo())}}";‘
		-	php -r ‘$a = "${@eval(phpinfo())}";‘
		-	php -r ‘$a = ${@eval("phpinfo();")};
		-	php -r ‘$a = ${${eval("phpinfo();")}};‘

*	xss反射
	**	直接回显	$_SERVER[‘HTTP_REFFER‘]
	**	$_SERVER[‘PHP_SELF‘]
	**	$_SERVER[‘HTTP_URI‘]
	**	$_SERVER[‘USER_AGENT‘]

*	xss存储
	**	留言板未使用 htmlspecialchars 过滤

*	CSRF
	利用了网站对用户的信任
	**	敏感表单未加token验证
	**	防御
		-	不要采用get方式提交
		-	添加令牌验证
		-	验证请求来源,http_reffer,但可被绕过
		-	在http头部添加自定义属性来验证

*	文件包含
	**	本地包含,受gpc影响
		-	技巧	%00截断

	**	远程包含,需要php.ini中 allow_url_include 与 allow_url_fopen 开启
		-	技巧:追加 ? # 等字符

	**	伪协议
		-	php://input,并post提交<?php phpinfo();?>, 需要allow_url_inlcude开启且php>5.2.0
		-	php://filter/read=convert.base64-encode/resource=based64-php-code.txt, 无需什么条件

*	动态函数执行与匿名函数执行
	**	动态函数:函数名以参数形式传进来,直接跟括号得到调用。
	**	匿名函数:类似lambda函数,但函数体在在定义时引入了外部字符串变量,使得可以注入恶意代码。

*	反序列化漏洞
	**	构造的序列化字符串在反序列化后会覆盖类的成员变量。结合其他代码执行漏洞,得到利用。

*	变量覆盖漏洞
	**	如果自动注册全局变量默认开启,地址栏提交的参数会被定义成变量。
		-	变量未初始化时,会被覆盖,可导致修改module之类的变量,导致文件包含漏洞;
	**	动态定义变量
		-	http://www.test404.com/post-815.html
		-	使用双美元符$$,动态定义变量时。
		-	危险函数extract,会从字典中动态提取键值对来定义变量

*	文件管理漏洞
	**	危险函数copy、unlink,存在时间竞争漏洞。
		-	http://www.test404.com/post-875.html
		-	上传头像-->生成临时文件(tmp.php)-->不断请求tmp.php(在上层目录生成shell.php文件)-->删除当前目录下tmp.php等非jpg文件,但留下了上层目录下的shell.php文件-->成功!

*	上传漏洞
	**	危险函数:比如getimagesize,如果文件头部以GIF89a开头,那么该文件就被判断为图片文件。
		-	参见	http://www.test404.com/post-875.html
	**	未授权引用:比如直接访问上传接口

*	验证码漏洞
	**	抓包构造sid,发送空验证码,可绕过条件判断
		-	不通过页面访问时,没生成验证码,弱类型比较时NULL==‘‘为真
	**	第一次通过页面刷新获取验证码,后续抓包反复提交该验证码
		-	无论验证码是否输入正确与否,后台都应该重新生成验证码

* php中的奇怪现象
	**	弱类型比较时存在绕过判断条件的漏洞
	***	传递的参数为数组时,函数一般返回为NULL。
		-	?goods[]=92%004&goods[]=967&goods[]=993
			$_GET: array(1) { ["goods"]=> array(3) { [0]=> string(4) "924" [1]=> string(3) "967" [2]=> string(3) "993" } } 

			$_GET["goods"]: array(3) { [0]=> string(4) "924" [1]=> string(3) "967" [2]=> string(3) "993" }
			ereg(‘123‘, ‘456‘): bool(false)
			ereg("^[0-9a-zA-Z]+$", $_GET["goods"]): NULL
			ereg("^[0-9a-zA-Z]+$", $_GET["goods"])!==False: bool(true)
			ereg("^[0-9a-zA-Z]+$", $_GET["goods"])!=False: bool(false)
			$_GET["goods"]>9999999: bool(true)
			strcmp($_GET["goods"], "123123"): NULL
			strcmp($_GET["goods"], "123123")==0: bool(true)

	***	弱类型的比较
		-	var_dump("1e8">999): bool(true)
		-	var_dump("1e8">"999"): bool(true)
		-	var_dump("1e8asdfasdf">999): bool(true)
		-	var_dump("1e8asasdf">"999"): bool(false)

		-	var_dump("0e8"==0): bool(true)
		-	var_dump("0e8"=="0"): bool(true)

		-	var_dump(true=="asfasdfsfsadf"): bool(true)

  

时间: 2024-08-08 15:43:21

代码审计综述的相关文章

php代码审计知识整理【4】

代码审计 =================================================================================================== *   sql注入     **  变量未过滤导致         *** http://www.test404.com/post-811.html         -   $_SERVER变量未过滤,请求头中X_FORWARDED_FOR,CLIENT_IP,HTTP_HOST,ACCE

Node.js综述

前言 本综述文章旨在帮助读者深入理解下Node.js的本质,不去关注应用的细节,我认为真正的技术问题只有在动手写代码的时候才会遇到,那个阶段解决问题才是真正有意义的. 发展史 Node.js是Ryan Dahl 2009年对外发布的开源醒目,后来该项目被Joyent公司注意到并于2010年成为Joyent公司的一个子项目.2016年微软与Joyent公司合作,Node.js在windows上得到支持. 目前Node.js的版本为V6.11,周围已经形成了一个庞大的生态系统. 特性分析 Node.

Map 综述(二):彻头彻尾理解 LinkedHashMap

摘要: HashMap和LinkedList合二为一即是LinkedHashMap.所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表LinkedList的HashMap.由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性.比如,LinkedHashMap的元素存取过程基本与HashMap基本类似,只是在细节实现上稍有不同.当然,这是由LinkedHashMap

php代码审计之弱类型引发的灾难

有人说php是世界上最好的语言,这可能是对开发人员来说,确实有这方面的特点,因为它开发起来不像其他语言那样麻烦,就比如:弱类型,它不需要像java等语言那样明确定义数据类型.这给开发带来了很大的便利,所有的数据类型都可以用$xx来定义,而不需要int i,string a,fload b等等这样去定义它.这样确实很方便,因为php帮助你判断了数据类型,比如整形int ,你只要$a=1;那这个1就是整形,$a='abc'那这个abc就会被php判断为字符串类型.但是弱类型方便是方便,但是带来的安全

技术专题-PHP代码审计

作者:坏蛋链接:https://zhuanlan.zhihu.com/p/24472674来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一.前言 php代码审计如字面意思,对php源代码进行审查,理解代码的逻辑,发现其中的安全漏洞.如审计代码中是否存在sql注入,则检查代码中sql语句到数据库的传输 和调用过程. 入门php代码审计实际并无什么门槛要求,只需要理解基础的php语法规则,以及理解各种类型漏洞的出现原因则可以开始尝试审计php源代码.通常的漏洞演示中

PHP代码审计1-审计环境与调试函数

审计环境与调试函数 审计环境 测试环境 常用集成环境:phpStudy.WampServer #不同的操作系统下,漏洞测试的结果也可能不一样 PHP编写工具 EditPlu Notepad++ 代码审计工具 Seay 代码审计平台 DVWA(注:windows下,需要将配置文件中的password改为空) ZVulDrill (注:需要重新导入数据库文件) 漏洞验证辅助工具 Burp Suite 浏览器扩展(Hack Bar.Firebug.Modify) 正则调试工具 SQL执行监控工具 常用

代码审计基础知识

代码审计函数篇 addslashed() 添加反斜杠 stripslashed() 去掉反斜杠 get_magic_quotes_gpc() 判断是否开启gpc expode(".",$array) 分割成数组 is_numeric() 判断是否为数字 sizeof() 判断长度 trim() 去处字符串开头和末尾的空格或其他字符 exec() 不输出结果,返回最后一行shell结果,所以结果可以保存到一个返回的数组里面 passthru()只调用命令,把命令的运行结果原样地直接输出到

快照(Snapshot)技术发展综述

快照(Snapshot)技术发展综述 刘爱贵 摘要:传统数据备份技术存在备份窗口.恢复时间目标RTO和恢复时间点RPO过长的问题,无法满足企业关键性业务的数据保护需求,因此产生了数据快照技术.本文对快照技术的概念.特点.实现技术和发展现状进行了概括性阐述,并对其未来的发展进行了展望. 关键词:快照,备份,复制,镜像,写时复制,指针重映射 作者简介:刘爱贵,研究方向为网络存储.数据挖掘和分布式计算:毕业于中科院,目前就职于赛门铁克@Symantec,从事存储软件研发.Email: [email p

JAVA技术专题综述之线程篇(1)

本文详细介绍JAVA技术专题综述之线程篇 编写具有多线程能力的程序经常会用到的方法有: run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join() 还有一个重要的关键字:synchronized 本文将对以上内容进行讲解. 一:run()和start() 示例1: public cla ThreadTest extends Thread{public void run(){for(int i=0;i<10;i++){Syste