环境搭建
环境使用http://vulfocus.io/,启动一个thinkphp实例
指纹检测
因为可能同时开启多个被动扫描插件,如果所有网站都做一遍扫描,会造成很大程度上的资源浪费,可能会导致代理变慢
所以在开始扫描前需要对网站进行指纹识别
header特征
使用fofa搜索app="thinkphp"
发现大多数thinkphp的站点header都有X-Powered-By: ThinkPHP
还有X-Powered-By: thinkphp-bjyadmin(可能是经thinkphp二开的框架)
所以可以通过正则,对header进行匹配:
thinkphpFingers = ["X-Powered-By: .*((?i)thinkphp).*"]
// headers是返回包的header
checkHeader = fn(headers){
for _,thinkphpFinger = range thinkphpFingers{
if re.Match(thinkphpFinger,headers) {
return true
}
}
return false
}
favicon hash特征
通过thinkphp框架的默认favicon.ico识别
在yak里可以直接获取到站点favicon.ico的hash
hash, err = http.RequestFaviconHash(<favicon.ico地址>)
得到thinkphp的favicon.ico的hash为1165838194,所以做如下判断
// rootUrl是网站根路径
chechIcon2 = fn(rootUrl){
hash, err = http.RequestFaviconHash(rootUrl+"favicon.ico")
return hash == "1165838194"
}
thinkphp的特殊Controller
在p牛的博客中看到thinkphp有个控制器4e5e5d7364f443e28fbf0d3ae744a59a,会返回站点的图标
所以当http://xxx.xx/index.php?c=4e5e5d7364f443e28fbf0d3ae744a59a返回一个图片时,就可以判定这是thinkphp站点
rsp,_ = http.Get("http://xxx.xx/?c=4e5e5d7364f443e28fbf0d3ae744a59a")
rspB,_ = http.dump(rsp)
header,body = str.SplitHTTPHeadersAndBodyFromPacket(rspB)
println(string(body))
输出如图

从这里提取出两个指纹"IHDR"和"PNG",如下
// rootUrl是网站根路径chechIcon1 = fn(rootUrl){

本文介绍了如何通过ThinkPHP的特定特征(header中的X-Powered-By、favicon.ico和特定Controller)进行指纹识别,以及利用这些特征进行漏洞检测,包括命令执行和持久化,同时提到了Yak工具在mitm插件编写中的应用。
最低0.47元/天 解锁文章
7765

被折叠的 条评论
为什么被折叠?



