主页 > 网络知识 > Go语言代码安全审计分享(2)

Go语言代码安全审计分享(2)

 

Go语言代码安全审计分享

 

人工代码审计

经过对代码扫描工具识别出的漏洞进行分析,我们发现存在一些误报,那么是否存在漏报呢,毕竟我们工具的扫描规则只有400多条,我们接下来通过人工分析代码发现可能存在的漏报

XSS-数据流分析

在pkg/post/post.go里我们发现Posts结构体,内有Uids、UserPosts、Created_at、UserImages结构体变量,猜测这里跟论坛发帖有关,我们人工进行一下污点数据跟踪分析:

通过ShowAddPostPage的post请求传入帖子内容写入数据库,然后通过ShowAddPostPage的get请求读出数据库内容写入前端页面,整个过程没有做特殊字符的净化处理,可以确定这里存在存储XSS中危漏洞。

 

Go语言代码安全审计分享

 

我们在实际环境演示一下漏洞:

输入xss payload保存后再次刷新页面触发xss弹框

 

Go语言代码安全审计分享

 

 

Go语言代码安全审计分享

 

反射xss低危漏洞分析过程类似,不再重复描述。

Sql注入-数据流分析

在pkg/search/search.go里我们发现searchPosts方法,sql查询是直接拼接sql语句:

 

Go语言代码安全审计分享

 

在拼接前并未对用户输入做净化处理,因此可确认这是一个sql注入的高危漏洞。

我们在实际环境中演示一下这个问题:

 

Go语言代码安全审计分享

 

 

Go语言代码安全审计分享

 

Csrf-代码结构分析

对于CSRF的分析我找了两处写数据库的接口进行尝试,一个接口是存在csrf,一个接口不存在csrf,首先看修改密码的接口:

在pkg/user/usermanager.go里我们发现ConfirmPasswdChange方法,不过这里进行了referer()的检查,在实战中referer校验虽然不像加token那样可以完全避免csrf,但伪造referer成本较高,所以这里不作为审计发现漏洞。

 

Go语言代码安全审计分享

 

而在另一个更新用户个人信息的方法里却忽视了对referer的校验,可以确认存在csrf漏洞。

 

Go语言代码安全审计分享

 

我们在实际环境中进行演示确实存在csrf漏洞。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!