WEB代码审计与渗透测试
******@
2021/3/10
1
WEB应用程序代码审计
程序的两大根本:变量与函数
漏洞现成的条件:
A、可以控制的变量
【一切输入都是有害的 】
B、变量到达有利用价值的函数[危险函数]
【一切进入函数的变量是有害的】
漏洞的利用效果取决于最终函数的功能
变量进入什么样的函数就导致什么要的效果
2021/3/10
2
PHP应用程序代码审计
为什么只是PHP?
A、跨平台、应用广泛、复杂
B、变量处理灵活[如变量覆盖、全局变量等]
C、函数库巨大
[导致漏洞类型多,既有通用的又有特有的]
E、代码审计的思路是可以通用的
2021/3/10
3
变量
预定义变量[常规外部提交的变量]
GPC $_ENV/SERVER/SESSION $HTTP_RAW_POST_DATA等
register_globals = on [未初始化的变量]
PHP » 默认为off
变量覆盖[未初始化及覆盖前定义的变量]
如:extract() 、遍历初始化变量、parse_str()等
变量的传递与存储[中转的变量]
存储于数据库、文件[如配置、缓存文件等]
2021/3/10
4
危险函数
文件包含包含漏洞
代码执行执行任意代码漏洞
命令执行执行任意命令漏洞
文件系统操作文件(目录)读写等漏洞
数据库操作SQL注射漏洞
数据显示 XSS等客服端漏洞
……
什么样的函数导致什么样的漏洞!
2021/3/10
5
更多的变量处理与危险函数
《高级PHP应用程序漏洞审核技术》
2021/3/10
6
代码审计的本质
找漏洞==找对应变量与函数
变量跟踪的过程
通过变量找函数[正向跟踪变量]
$id=$_GET[‘id’]$sid=$id…函数($sid)
通过函数找变量[逆向跟踪变量]
函数($sid) $sid=$id… $id=$_GET[‘id’]
2021/3/10
7
变量的传递与二次漏洞
变量存储、提取、传递是一个复杂的立体的过程
过程中经过多个不一样的函数的处理后继续传递,最终达到漏洞函数
传递的过程中任意环节可控就可能导致漏洞
中间函数处理的过程诞生新的变量,新的变量达到新的漏洞函数诞生新的漏洞[二次漏洞]
2021/3/10
8
二次漏洞
什么是二次漏洞?
2006年提出的一个概念
主导思想:通过一个现有漏洞,创造新的漏洞使得漏洞利用最大化
一个demo
<?php
//?file=
unlink($_GET[‘file’]);
?>
一个典型的文件删除漏洞
[注意:include与require的区别]
2021/3/10
9
二次漏洞
又一个demo
一个注射漏洞
$sql= "select id,filepath,user,name from attachment where fileid=$_GET[‘id’]”; $result = mysql_db_query($dbname, $sql);$file=mysql_fetch_array($result);
然而:
include($file[‘filepath’]);
一个貌似不可以直接控制的新变量$file[‘filepath’]进入了危险函数include()
?id=1 union select 1,’’,1,1
当然我们没有那个注射漏洞,只要我们对数据库有控制权限一样可以通过update、insert控制$file[‘filepath’]。
2021/3/10
10
web代码审计与渗透测试 来自淘豆网m.daumloan.com转载请标明出处.