hvv-emergency
webshell应急响应
攻击的两种方式
钓鱼、0day
webshell事件处理流程
1 | (a)现场访谈确定范围 |
webshell事件表现
安全设备报警、被上级部门通报、被挂黑链、被篡改首页
webshell事件发现时间
根据客户发现的时间去定位日志时间
了解系统架构,如服务器类型、业务架构、网络拓扑等
服务器类型:windows、linux etc..
cms:dedecms、phpcms、trs cms etc..
中间件、容器、框架、数据库:tomcat、iis、apache、weblogic、struts、mysql etc..
脚本语言:asp、php、jsp etc..
业务架构:如前端网页内容是否是后端通过ftp上传的(新闻网偏多) etc..
windows检测webshell
查看用户信息:net user
。
查看隐藏用户:cmd – compmgmt.msc – 本地用户和组 – 用户
。
注册表查看用户:cmd – regedit – HKEY_LOCAL_MACHINE\SAM,为该项添加权限 – 打开:HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users – 导出所有以00000开头的项,将所有导出项与000001F4(该项对应administrator用户)导出内容做比较,若其中“F”值内容相同,则可能为克隆用户
。
LP_Check.exe
windows查看进程、服务、驱动信息、网络连接
进程:打开cmd – msinfo32 – 软件环境 – 正在运行任务,在此可查看进程名及其对应的执行文件;
服务:打开cmd – msinfo32 – 软件环境 – 服务,在此可查看服务的启动情况及其对应的启动文件;
驱动:打开cmd – msinfo32 – 软件环境 – 系统驱动程序,在此可查看驱动的启动情况及其对应的驱动文件;
模块:打开cmd – msinfo32 – 软件环境 – 加载的模块,在此可查看被加载的DLL文件及其对应的文件路径;
启动项:打开cmd – msinfo32 – 软件环境 – 启动程序,在此查看启动程序名及其对应的启动文件路径;
PCHunter.exe工具查看也可以查看进程、服务、驱动、启动项;
netstat -ano | findstr "ESTABLISHED"
-> 查看目前的网络连接,定位可疑的ESTABLISHED -> tasklist /svc|find "xxx"
。
有的后门不能通过查看启动项来发现,比如通过Bitsadmin,就不能通过启动项发现这时候需要通过如下命令查找后门bitsadmin /list /allusers /verbose
。
linux查看用户信息
cat /etc/passwd
。各列由冒号隔开,分别表示“用户名”“密码加密”“用户ID”“用户组ID”“注释”“用户主目录”“默认登录shell”。
检查中需要与管理员确认是否有可疑用户,“用户ID”列中,一般情况下应该只有root的ID是0,其他用户的ID如果设置为0,即拥有root权限。UID为0的帐号也不一定都是可疑帐号,Freebsd默认存在toor帐号,且uid为0(toor 在BSD官网解释为root替代帐号,属于可信帐号)。
cat /etc/passwd
分析可疑帐号,可登录帐号。
查看UID为0的帐号:awk -F: '{if($3==0)print $1}' /etc/passwd
。
查看能够登录的帐号:cat /etc/passwd|grep -v "nologin" |grep -v "false"
。
lastlog
命令,查看系统中所有用户最近一次登录信息。
lastb
命令,查看显示用户错误的登录列表
last
命令,查看显示用户最近登录信息(数据源为/var/log/wtmp
,var/log/btmp
)。utmp
文件中保存的是当前正在本系统中的用户的信息。wtmp
文件中保存的是登录过本系统的用户的信息。/var/log/wtmp
文件结构和/var/run/utmp
文件结构一样。
who
命令,查看当前用户登录系统的情况
awk -F: 'length($2)==0 {print $1}' /etc/shadow
命令,查看是否存在空口令账号
linux查看进程、服务、网络连接
查看系统进程可以使用命令ps aux
。“USER”列表示启动进程的用户名、“PID”列表示进程的PID值、“TIME”列表示进程已经运行的时间、“CMD”列表示启动进程的命令。
强制结束进程可以使用命令kill -9(数字九) 进程的PID值,如kill -9 2535
。
netstat –anp
命令查看进程、端口及对应的pid。之后根据pid,利用ls –alh /proc/pid
命令查看其对应的可执行程序,也可以利用lsof –p pid
查看pid对应的可执行程序
如果是恶意进程,可以使用kill -9
(数字九) 进程的PID值命令来结束进程,如kill -9 2535
,然后使用rm -rf filename
来删除木马,如果root用户都无法删除相关文件,很可能文件被加上了i
属性,使用lsatter filename
命令来查看文件属性,然后使用chattr -i filename
命令来移除i属性继而删除文件。
lsof -i:port
查看指定端口对应的程序。
top
命令根据cpu占用率查看可疑进程。
查看隐藏进程,依次执行:ps -ef | awk '{print}' | sort -n | uniq >1
、ls /proc | sort -n |uniq >2
、diff 1 2
。
chkconfig –list
命令可以查看系统运行的服务
ip link
命令查看是否有恶意网卡,是否存在sniffer
arp –a
命令查看arp记录是否正常。
ls ps
很可能被黑客恶意替换,所以可以去命令目录查看相关系统命令的修改时间,如使用ls -alt /bin
命令。可以查看相关文件的大小,如果大小明显偏大则很可能被替换,如使用ls -alh /bin
。rpm -Va
命令查看发生过变化的软件包,如果一切均校验正常将不会产生任何输出。使用第三方查杀工具如chkrootkit
、rkhunter
进行查杀,来检测命令是否修改过。使用chkrootkit
,如果出现INFECTED
,说明检测出系统后门可以直接用./chkrootkit -q | grep INFECTED
命令检测并筛选出存在INFECTED
的内容。
windows系统日志
默认情况下,Window的系统日志存放在%SystemRoot%\System32\Winevt\Logs
,分别为:Application.evtx(应用程序日志);Security.evtx(安全性日志);System.evtx(系统日志);
可以使用系统自带的“事件查看器”查看。打开事件查看器–window日志–安全
,查看安全性日志,是否存在大量审核失败的日志(暴力破解)。若该帐号本身已被删除,则“用户”处将不会显示帐号名,而是显示一串帐号的SID值。多关注安全性日志中的特殊事件,比如说id为4728为把用户添加进安全全局组,如administrators组。
这里列举一些有关检测时常见的事件ID:
(1)4726:把用户添加进安全全局组,如administrators组
(2)4624:大部分登录事件成功时会产生的日志
(3)4625:大部分登录事件失败时会产生的日志(解锁屏幕并不会产生这个日志)
(4)4672: 特权用户登录成功时会产生的日志,例如我们登录”administrator”,一般会看到一条4624和4672日志一起出现
(5)4648: 一些其他的登录情况,如使用 runas /user 登录除当前以外的其他用户运行程序时,会产生这样的日志。(不过runas命令执行时同时也会产生一条4624日志)
windows计划任务日志
计划任务日志存放在C:\Windows\System32\Tasks
linux计划任务日志
crontab -l
命令查看当前的任务计划有哪些
ls /etc/cron*
命令查看etc目录任务计划相关文件
cat /var/log/cron
查看计划任务日志
ls /var/spool/mail
命令查看相关日志记录文件
linux自启动日志
cat /etc/init.d/rc.local
、cat/etc/rc.local
、ls -alt /etc/init.d/
、ls -alt /etc/rc.d/init.d
、ls -alt /etc/rc.d/rcx.d
、ls -alt /etc/rcx.d
(x为数字0-6)、chkconfig
命令查看开机启动程序(一般看到S97DbSecuritySpt肯定是中挖矿木马了)
linux系统日志
cat /var/log/messages
命令查看整体系统信息,其中也记录某个用户切换到root权限的日志
cat /var/log/secure
命令查看验证和授权方面信息。例如sshd会将所有信息记录(其中包括失败登录)在这里。
cat /var/log/lastlog
命令查看所有用户的最近信息。二进制文件,因此需要用lastlog命令查看内容。
cat /var/log/btmp
命令查看所有失败登录信息。使用last命令可查看btmp文件。例如last -f /var/log/btmp | more
。
cat /var/log/maillog
命令查看系统运行电子邮件服务器的日志信息。例如sendmail日志信息就送到这个文件中。cat /var/log/mail/
命令查看包含邮件服务器的额外日志。
cat /var/log/wtmp
或cat /var/log/utmp
命令查看登录信息。二进制文件,须用last来读取内容
cat ~/.bash_history
查看shell日志,查看之前使用过的命令。
windows文档日志
各个盘下的temp(tmp)相关目录下查看有无异常文件
有的时候黑客也会写入mof来进行提权,需要排查下mof是否异常,路径如下:c:/windows/system32/wbem/mof/
查看用户recent相关文件,通过分析最近打开分析可疑文件
a) C:\Documents and Settings\Administrator\Recent
b) C:\Documents and Settings\Default User\Recent
c) 开始,运行%UserProfile%\Recent
根据文件夹内文件列表时间进行排序,查找可疑文件
通过确定后的入侵时间,以及webshell或js文件的关键字(比如博彩类),可以在web日志中进行过滤匹配,比如经常使用:
(a)知道是上传目录,在web log 中查看指定时间范围包括上传文件夹的访问请求:findstr /s /m /I “UploadFiles” *.log
(b)某博彩事件中的六合彩信息是six.js:findstr /s /m /I “six.js” *.aspx
(c)根据shell名关键字去搜索D盘spy相关的文件有哪些:for /r d:\ %i in (*spy*.aspx) do @echo %i
linux文档排查
md5sum -b filename
命令查看文件的md5值
ls -al
查看隐藏的文件
find / -mtime 0
命令查看最近24小时内修改过的文件
find / -name '*.php' -mmin -30
命令查看最近30分钟修改的过的.php文件
stat filename
命令查看文件的修改、创建、访问日期
ls -alh /tmp
命令查看/tmp目录
ls –alh /root/.ssh/
命令查看有没有恶意的ssh公钥
windows web日志排查
各容器日志默认路径如下:
apache:apache\logs\error.log、apache\logs\access.log
iis:C:\inetpub\logs\LogFiles
、C:\Windows\System32\LogFiles\W3SVC2
tomcat:tomcat\access_log
可以利用D盾webshell查杀工具对网站服务器进行全盘扫描,来发现webshell木马文件
linux web日志排查
各容器日志默认路径如下:
apache:/etc/httpd/logs/access_log
、/var/log/httpd/access_log
nginx:/usr/local/nginx/logs
使用find . access_log |grep xargs ip
、find . access_log| grep xargs filename
命令来定位相关黑客攻击行为。
使用cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10
命令查看页面访问排名前十的IP
使用cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10
命令查看页面访问排名前十的URL
使用find /site/* -type f -name "*.jsp" |xargs grep "exec("
命令来查找常规的webshell, 命令的意思是,搜索/site/目录下所有后缀为.jsp的文件,查看内容是否有”exec(“,”exec(“是jsp函数,很多一句话木马和大马都有这个函数。其他脚本的网站类似: find /site/* -type f -name “*.php” |xargs grep "eval("
、find /site/* -type f -name “*.asp” |xargs grep "execute("
、find /site/* -type f -name “*.aspx” |xargs grep "eval("
。
如果木马做了免杀处理,可以查看是否使用加密函数
find /site/* -type f -name “*.php” |xargs grep "base64_decode"
查看是否做了拼接处理
find /site/* -type f -name “*.php” |xargs grep "@$"
对搜索到的内容,手动查看是否是木马,可以在本地打开脚本文件,查看网页生成时间等。
使用grep -i select%20 *.log | grep 500 | grep -i \.php
命令查找后缀为”.log” 文件,搜索关键字为”select%20”,筛选存在”500”的行,此命令可以拿来搜索有没有sql注入攻击
使用grep -i sqlmap *.log sqlmap
命令查看存在sqlmap的行,可以发现sqlmap拖库的痕迹。
使用grep -i "script" *.log
命令查找存在script的行,此命令可以拿来搜索有没有xss攻击。
使用grep -i acunetix *.log
命令查找存在acunetix的行,此命令可以拿来搜索有没有awvs扫描攻击。
使用grep \[07/Jul/2016:24:00:* *.log
命令可以结合入侵时间搜索相关请求,文件修改时间不可作为依据,菜刀上就可以修改文件时间属性。
使用grep ^192.168.1.* *.log
命令搜索包含“192.168.1.”字符串开头的行。
使用grep -v ^192.168.10.* *.log
命令不搜索包含“192.168.10.”字符串开头的行。
数据库日志排查:linux+windows
MYSQL:windows默认配置路径为c:\windows\my.ini
、mysql\my.ini
;linux默认配置路径/etc/mysql/my.cnf
,查看是否开启日志审计,如开启将显示日志路径。
Windows常规mysql日志记录配置如下:
1 | log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log" |
Linux常规mysql日志记录配置如下:
1 | log-error=/usr/local/mysql/log/error.log |
注意查看当前木马运行的当前用户,比如是mysql,很可能是通过mysql漏洞进来的,如果是httpd,很可能是通过web进来的。Mysql提权很可能利用udf进行提权,导出dll到mysql目录下的plugin目录。
流量日志排查:windows+linux
wireshark抓包,利用“ip.addr == ip”可以指定只抓取某个ip的对内对外(包括来源与目的地)流量信息
如果黑客利用msf中的 reverse_tcp进行上线,wireshark数据包中一般会有push标志位
数据包中带有z0、eval、base64_decode,很可能就是中国菜刀连接时产生的数据包
数据包中带有特殊的referer和Accept-Language,一般是黑客利用weevely webshell工具连接产生的
linux下执行tcpdump可以抓取所有数据流量,“tcpdump host xx”抓取指定ip的流量信息,tcpdump port xx”抓取指定端口的流量信息
补充
内存马只能重启
留言
- 文章链接: https://wd-2711.tech/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!