后话:本来写了一篇分析在csdn,不小心关掉就没了,无奈,只好copy到博客园,写了一上午,醉了
两大审计的基本方法
1. 跟踪用户的输入数据,判断数据进入的每一个代码逻辑是否有可利用的点,此处的代码逻辑可以是一个函数,或者是条小小的条件判断语句。
2. 根据不同编程语言的特性,及其历史上经常产生漏洞的一些函数,功能,把这些点找出来,在分析函数调用时的参数,如果参数是用户可控,就很有可能引发安全漏洞
1、寻找漏洞前准备理解
理解现在的cms大致可分为两种,单入口模式和多入口模式.
多入口模式cms :每一个功能都需要访问不同的文件。
单入口模式的cms:MVC的开发出来的
So,挖掘漏洞方式
1、搜索一些获取用户输入数据的函数,来找到用户输入数据的源头,之后我们从这里为起点,跟踪数据的流向,分析在这整个过程中数据的处理情况,进而定位可能触发漏洞的点。
2、搜索一些经常产生安全问题的函数,比如执行数据库查询的函数,执行系统命令的函数,文件操作类函数等等,在通过回溯这些函数在被调用时参数,判断参数是否我们可控,进而定位漏洞点。
常用的正则 PHP
ASP ==》 搜索request找输入点,直接跟踪变量==》查看文件头包含include的文件(全局配置文件,全局函数文件,安全过滤文件)
.NET
Jsp
Ex:代码审计多入口模式之SQL注入篇(shop7z)
Shop7_safe.asp 安全过滤函数
<% Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr '自定义需要过滤的字串,用 "曹" 分隔 ' 防止SQL注入以及XSS跨站攻击 /2016/1/3 Fy_In = "'曹;曹and曹exec曹insert曹select曹delete曹count曹*曹%曹chr曹mid曹master曹truncate曹char曹declare曹<曹>曹script" '---------------------------------- %> //为毛不用操。。。 <% Fy_Inf = split(Fy_In,"曹") '--------POST部份------------------ If Request.Form<>"" Then For Each Fy_Post In Request.Form For Fy_Xh=0 To Ubound(Fy_Inf) If Instr(LCase(Request.FormFy_Post)),Fy_Inf(Fy_Xh))<>0 Then ( Response.Write "xxx<Script Language=JavaScript>('请不要对本站尝试进行非法操作谢谢合作^_^ ');history.go(-1);</Script>" Response.End End If Next Next End If '---------------------------------- '--------GET部份------------------- If Request.QueryString<>"" Then For Each Fy_Get In Request.QueryString For Fy_Xh=0 To Ubound(Fy_Inf) If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then Response.Write "xxx<Script Language=JavaScript>('请不要对本站尝试进行注入操作谢谢合作^_^ ');history.go(-1);</Script>" Response.End End If Next Next End If %>
Request回来的参数只对get和post两种方法针对SQL注入攻击进行过滤。Cookie呢?So?
request.QueryString(获取GET请求的参数) request.form() (获取POST请求的参数) request.cookie() (获取通过cookie传来的参数 request )
关注从 cookie中获取参数的函数
开始
漏洞文件:news.asp
文件包含了全局过滤文件,用requset()获取参数,在cookie处提交恶意代码,抓包
执行语句
select * from e_contect where c_parent2=1 and (c_title like '%sss'and#%' or c_contect like '%sss'and#%') order by c_num desc,c_addtime desc
好吧看图
理解参数的传递。Ok
Ex:代码审计单入口模式(乐尚商城cms)