人工代码审计
经过对代码扫描工具识别出的漏洞进行分析,我们发现存在一些误报,那么是否存在漏报呢,毕竟我们工具的扫描规则只有400多条,我们接下来通过人工分析代码发现可能存在的漏报
XSS-数据流分析在pkg/post/post.go里我们发现Posts结构体,内有Uids、UserPosts、Created_at、UserImages结构体变量,猜测这里跟论坛发帖有关,我们人工进行一下污点数据跟踪分析:
通过ShowAddPostPage的post请求传入帖子内容写入数据库,然后通过ShowAddPostPage的get请求读出数据库内容写入前端页面,整个过程没有做特殊字符的净化处理,可以确定这里存在存储XSS中危漏洞。
我们在实际环境演示一下漏洞:
输入xss payload保存后再次刷新页面触发xss弹框
反射xss低危漏洞分析过程类似,不再重复描述。
Sql注入-数据流分析在pkg/search/search.go里我们发现searchPosts方法,sql查询是直接拼接sql语句:
在拼接前并未对用户输入做净化处理,因此可确认这是一个sql注入的高危漏洞。
我们在实际环境中演示一下这个问题:
Csrf-代码结构分析
对于CSRF的分析我找了两处写数据库的接口进行尝试,一个接口是存在csrf,一个接口不存在csrf,首先看修改密码的接口:
在pkg/user/usermanager.go里我们发现ConfirmPasswdChange方法,不过这里进行了referer()的检查,在实战中referer校验虽然不像加token那样可以完全避免csrf,但伪造referer成本较高,所以这里不作为审计发现漏洞。
而在另一个更新用户个人信息的方法里却忽视了对referer的校验,可以确认存在csrf漏洞。
我们在实际环境中进行演示确实存在csrf漏洞。