一、Mysql基础知识
当涉及到MySQL数据库的基础知识时,以下是一些重要的概念和操作:
-
数据库:MySQL是一个关系型数据库管理系统(RDBMS),它用于存储和管理结构化数据。数据库是数据的集合,它包含多个表和索引。
-
表:表是MySQL数据库中的基本组织单元,它由行和列组成。每个表包含多个字段(列),每行表示一条记录。
-
字段和数据类型:每个表都由一个或多个字段组成,字段定义了表中数据的类型。常见的数据类型包括整数、浮点数、字符、日期等。
-
主键:主键是表中的唯一标识符,用于唯一地标识表中的每一行。主键可以由一个或多个字段组成。
-
查询语句:使用SQL(Structured Query Language)查询语句可以对数据库进行读取、插入、更新和删除操作。常见的查询语句包括SELECT、INSERT、UPDATE和DELETE。
-
索引:索引是一种提高数据库查询性能的数据结构。它可以加快数据检索速度,特别是对于经常被查询的列或字段。
-
连接:连接用于将多个表中的数据关联起来。通过在查询中使用JOIN语句,可以根据共同的字段值将多个表连接起来。
-
权限和用户管理:MySQL允许为数据库和表设置不同的权限级别。可以创建和管理用户,并为他们分配适当的权限,以控制对数据库的访问和操作。
-
备份和恢复:定期备份数据库是非常重要的,以防止数据丢失或损坏。MySQL提供了备份和恢复数据库的工具和命令。
-
事务:事务是一系列数据库操作的逻辑单位,要么全部成功执行,要么全部失败回滚。MySQL支持事务的特性,通过使用BEGIN、COMMIT和ROLLBACK语句来管理事务。
-
基本语法:
- 连接到MySQL服务器:
mysql -u <username> -p <password> -h <hostname> -P <port>
- 选择数据库:
USE <database_name>;
- 显示数据库中的表:
SHOW TABLES;
- 显示表结构:
DESCRIBE <table_name>;
- 查询表中的数据:
SELECT * FROM <table_name>;
- 插入数据:
INSERT INTO <table_name> (<column1>, <column2>, ...) VALUES (<value1>, <value2>, ...);
- 更新数据:
UPDATE <table_name> SET <column_name> = <new_value> WHERE <condition>;
- 删除数据:
DELETE FROM <table_name> WHERE <condition>;
- 连接到MySQL服务器:
-
SQL注入:
- 在CTF中,你可能会面临SQL注入攻击的任务。了解基本的SQL注入语法和技巧对于成功利用漏洞非常重要。
-
MySQL函数:
- 字符串函数:
CONCAT()
,SUBSTRING()
,LENGTH()
,REPLACE()
,LOWER()
,UPPER()
,LIKE
,REGEXP
等。 - 数值函数:
SUM()
,AVG()
,MIN()
,MAX()
,COUNT()
等。 - 时间和日期函数:
NOW()
,DATE()
,YEAR()
,MONTH()
,DAY()
,HOUR()
,MINUTE()
,SECOND()
,DATEDIFF()
等。 - 加密函数:
MD5()
,SHA1()
,SHA2()
,PASSWORD()
等。
- 字符串函数:
-
数据库信息:
- 获取数据库版本:
SELECT @@VERSION;
- 查找数据库名称:
SELECT DATABASE();
- 显示所有数据库:
SHOW DATABASES;
- 显示当前数据库中的表:
SHOW TABLES;
- 获取数据库版本:
二、AWD基本流程
前言
我今天接触到了一个非常有意思的模式: AWD (Attack With Defense,攻防兼备)模式。你需要在一场比赛里要扮演攻击方和防守方,攻者得分,失守者会被扣分。也就是说,攻击别人的靶机可以获取 Flag 分数时,别人会被扣分,同时你也要保护自己的主机不被别人得分,以防扣分。
没接触过的同学第一次玩这种模式时,很可能都是一脸懵逼,最近我也打了一次比较简单的小型 AWD,借 NeverSec 公众号来介绍一下一般的 AWD 比赛流程和所需准备的地方。由于我负责 Web 比较多,因此这篇文章不会涉及到二进制方面,主要从 Web 方向介绍。
AWD流程
1. 出题方会给每一支队伍部署同样环境的主机,主机有一台或者多台。
2. 拿到机器后每个队伍会有一定的加固时间或没有加固时间,这个视规则而定。
3. 每个服务、数据库、主机上都会可能存在 flag 字段,并且会定时刷新。通过攻击拿到 flag 后需要提交到裁判机进行得分,一般会提供指定的提交接口。下一轮刷新后,如果还存在该漏洞,可以继续利用漏洞获取 flag 进行得分。
通常来说,如果攻防赛时间比较短的话,一般只会考核 Web 、数据库的渗透、已有漏洞的利用;如果时间较长,很可能还需要做内网渗透,由于这块比较深入,这篇文章暂时不讲,因为我自己也不太会。
一般一个队伍由三人组成。负责两个方面:一方面负责防守加固、做基线、加WAF、流量回放等等。一方面负责源码审计、写攻击脚本、维持权限、持续渗透,具体怎么安排都视三人能力而定。
攻击流程
在 AWD 中,Web 攻击流程一般分为信息收集、攻击端口、攻击Web服务、维持权限四步,只要能快速得分,也不一定按照这四步来。
信息收集
第一步,探测主机。用 Nmap 或者 HTTPScan等工具,先扫描主办方给的内网存活主机,弄明白网络拓扑。如果主办方给了主机范围的话就更加省事儿了。
第二步,探测端口。因为主办方给的机器都是一样的,所以直接看自己开了什么端口就行。如果不一样的话,使用 Nmap 进行常见端口扫描,先攻击常见端口,再放后台进行全端口的扫描,发现新端口再加入到攻击队列中。
第三步,探测端口服务。端口服务一般用 Nmap 就能扫到,并且可以用 Nmap 的脚本扫一下漏洞,但是需要注意 Nmap 的相关参数,这要根据情况灵活运用。
简单的信息收集到此完成,除了 Nmap 外可以使用自己熟悉的工具,比如说 msf 啥的,方便后续渗透。
端口攻击
由于 AWD 需要的就是手快,端口一般也会有弱口令的情况存在,比如常见的 22、3389、1443、3306 等主机登陆、数据库端口。
我打过的一次省赛中,就遇到了这种情况。主办方只给队伍机器的 IP,给定用户名,需要自行爆破进入机器,并修改密码。如果这个时候你的手慢,爆破脚本没准备好,你的机器就会沦入别人之手。当时我们就是手慢了,只能眼睁睁看着别人拿到了我们的机器,一轮轮掉分了……
Web 攻击
Web 方面的语言多为 PHP,小部分为 Java 和 Python。这里的 Web 环境分两种情况,一种是已有漏洞的框架,一种是出题人写的框架。
如果是已有漏洞的框架,通常会比较明显。比如说 Struts 2 各种漏洞等等,用工具扫就可以扫出来。这个需要准备得比较充分,在电脑中备好 EXP 库、漏洞库和各种扫描工具库,以便能够快速利用比较明显的漏洞。总之手要快!