Github Code Search

github在2021年推出了全新的代码搜索服务 cs.github.com 。此服务在2022年5月27日的今天似乎还是测试版本。

Untitled

如上图所见,新版的代码搜索服务除了language 或者 path 等原本就有的搜索标签,还添加了逻辑关键字 OR 或者 NOT 来处理复杂的筛选条件,最最重量级的是支持通过正则搜索代码。

在早期的一些代码审计工具,如 seay代码审计工具 等软件中,审计代码的方式可谓十分简单粗暴——直接使用正则匹配代码文本,但这种简单手法确实有一定效果。如果我们使用新的代码搜素的正则匹配,是不是也可以搜到一些漏洞?

我在上一年的12月通过申请获得了内测权限,但因为期末考试的原因没有使用,然后便忘记了。而在最近我又想起了这一想法,并成功找到(捡漏)了一个SQL注入漏洞。

使用正则审计代码

想要通过正则来搜索到有漏洞的代码,需要我们对漏洞模式有很深的了解。我们需要知道什么样的代码会有什么样的洞,才能写出对应的正则来搜素代码。

NGINX目录穿越

这算是一个代码及其固定的一个洞了,简单来说就是存在下面的代码时:

location /i {
    alias /data/w3/images/;
}

我们只需要访问/i../something便会导致其拼接为 /data/w3/images/../something的路径,导致目录穿越。

我们可以尝试搜素开源项目中的 docker 或者其他配置来寻找漏洞,这里我们可以简单的写出正则加以匹配。

/location (\\/[\\w\\d\\/]*)(\\/[\\w\\d]+?) \\{[\\w\\s]+alias [\\w\\d\\s\\/]+\\/;/ NOT path:*.md

# 匹配location
[ location  ]

# 匹配location后的路由,路由最后没有`/`
[ (\\/[\\w\\d\\/]*)(\\/[\\w\\d]+?) ]

# 匹配`{`
[ \\{[\\w\\s]+ ]

# 匹配alias及之后的路由,路由最后有`/`
[ alias [\\w\\d\\s\\/]+\\/; ]

搜素结果如下

Untitled