一,信息收集

  • HTTP头分析:通过Server字段确定后端服务器类型、开发语言及版本
  • 指纹识别:使用Wappalyzer等工具通过特征文件识别

通过泄露的敏感目录,我们可以获取服务器路径、url甚至直接获取网站源码,敏感目录包括:

  • 版本控制泄露:
    • Git目录泄露(使用GitHacker工具还原)
    • SVN目录泄露(类似Git泄露原理)
  • 开发环境泄露:
    • IDEA工程目录(含项目路径和数据库信息)
  • 管理后台泄露:通过目录扫描发现后台地址

工具: dirsearch ffuf

常见常用敏感文件

GitHacker工具使用

- <font style="color:#5C8D07;">通过pip安装GitHacker</font>
- <font style="color:#5C8D07;">操作流程</font><font style="color:#5C8D07;">:</font>
    * <font style="color:#5C8D07;">下载.git目录内容</font>
    * <font style="color:#5C8D07;">通过git log查看提交历史</font>
    * <font style="color:#5C8D07;">使用checkout回退到含漏洞版本</font>
- <font style="color:#5C8D07;">漏洞分析</font><font style="color:#5C8D07;">:发现index.php存在命令注入漏洞</font>
- <font style="color:#5C8D07;">利用验证:通过参数执行系统命令(如ls/ )  </font>

用dirsearch扫目录,然后用GitHacker读取敏感文件

见d1

二,SQL注入

产生原因: 当开发者直接将用户输入拼接到SQL查询语句中且未做过滤时,攻击者可通过构造特殊输入改变原始SQL语义。

本质特征: 用户输入被作为SQL代码执行而非单纯的数据处理,这是与正常查询的根本区别

1.数字型注入测试方法:
- <font style="color:#5C8D07;">输入id=1返回admin</font>
- <font style="color:#5C8D07;">输入id=2-1同样返回admin</font>
- <font style="color:#5C8D07;">输入id=3-1返回null,验证注入存在</font>

union功能作用: 合并两个SELECT结果集,要求列数相同。通过id=0使前查询为空,后查询显示敏感数据。 前提要知道有password这个列和users这个表

  • 实际应用:
    • 构造id=0 union select password from users
    • 空格需URL编码为%20

2.字符型注入:

用户输入被单引号包裹where username=’$_GET[‘username’]’,需考虑引号闭合

  • 注入方法:
    • 使用‘or 1=1#构造万能密码
    • 单引号闭合前引号,#号注释后引号
    • 特殊字符需URL编码(%27为单引号,%23为#号)

3.布尔盲注:

服务器仅返回”用户存在/不存在”二元状态时使用。

  • 实现方法:
    • 使用substr函数逐字符判断:’or substr(password,1,1)=’1’#
    • 通过响应变化确定字符值(如返回”存在”时字符匹配成功)
    • 需遍历所有可能字符(字母、数字、符号)

4.时间盲注:

.适用场景: 服务器无任何输出,仅返回固定响应时使用

  • 核心方法:
    • 利用MySQL内置的sleep函数人为制造时间差异
    • 通过响应时间判断条件真假
  • 测量工具: 使用Burp Suite测量SQL执行延时
  • 示例构造:
    • username=’ or sleep(1)# 产生1秒延迟
    • username=’ or if(substr(password,1,1)=’3’,sleep(1),1)# 通过延时判断密码第一位是否为3

5.报错注入:
  • 适用场景: 服务器返回SQL错误信息时使用
  • 核心思想: 利用错误信息回显需要的数据
  • 函数原型: ExtractValue(xml_frag,xpath_expr)
  • 正常用法: 从XML中提取元素
  • 报错利用:
    • 故意构造错误的xpath语法
    • 错误信息会回显xpath参数内容
    • 在xpath参数前加’~’使其语法错误

  • 示例构造:
    • username=’ or extractvalue(1,concat(‘~’,(select ‘123’)))#
    • 错误信息会显示”XPATH syntax error: ~123”
  • 数据获取:
    • 将查询结果与波浪号拼接
    • 通过错误回显获取查询数据
  • 常见报错函数:
    • floor函数(主键冲突)
    • updatexml函数(xpath语法错误)
    • exp函数
    • GeometryCollection函数
    • polygon函数
    • multipoint函数
6.用户插入数据位置不同导致的SQL注入点 :
  • 常见位置: 主要在WHERE子句中进行条件查询时出现
  • 注入特点:
    • 在WHERE和ORDER BY之间插入时可以使用UNION联合查询
    • 在ORDER BY之后插入时无法使用UNION,只能使用盲注或报错注入

实验步骤:

步骤1: 查看网页内容

步骤2:判断是否存在sql注入

使用‘or’1’=’1可以成功查询出数据,因此存在sql注入。

步骤3:判断查询时选择的列数

使用admin’ order by 2 #可以查询出数据

使用admin’ order by 3 #无法查询出数据

因此当前查询的列数为2

步骤4:使用union查询其他表

使用‘ union select group_concat(table_name),1 from information_schema.tables where table_schema=database() #查询同库的表,发现了users表和flag表

使用‘ union select group_concat(column_name),1 from information_schema.columns where table_name=’flag’ #查询flag表中的列名,发现一列content

步骤5:查询flag表中的flag值

使用‘ union select group_concat(content),1 from flag #,查询到flag

三,xss

  • 定义: XSS(Cross-Site Scripting)是一种网站应用程序的安全漏洞,属于代码注入的一种,允许将恶意代码注入网页,影响其他观看网页的用户。
  • 攻击原理: 利用网站开发时留下的漏洞,注入恶意指令代码到网页中,使用户加载并执行恶意程序。
  • 常见形式: 通常包含HTML和用户端脚本语言(如JavaScript),但也可包含Java、VBScript、ActiveX、Flash等。
  • 危害: 攻击成功后可能获取更高权限、窃取私密网页内容、会话和Cookie等敏感信息。

XSS的类型:

反射型XSS:
  • 特点: 恶意代码未被服务器储存,每次触发时通过GET/POST方式提交,用户输入内容被直接输出到HTML中。
  • 示例: PHP代码echo “hello!$name”直接从URL获取name参数并输出,攻击者可注入等恶意代码。
  • 攻击方式: 通过构造恶意URL诱导用户点击,代码仅在当前页面执行。

存储型XSS
  • 特点: 用户输入被保存在数据库或服务器存储中,造成持续性影响,比反射型更具威胁性。
  • 示例: PHP代码将用户输入保存到文件data.txt中,每次访问页面都会读取并执行之前存储的恶意代码。
  • 常见场景: 用户发布的帖子、个人信息页面等需要服务器存储用户输入的场景。

DOM型XSS
  • 特点: 漏洞发生在前端而非后端,前端JavaScript直接将用户输入写入HTML DOM中。
  • 示例: 静态HTML文件通过JavaScript获取URL参数并直接使用document.write()输出到页面。
  • 执行差异: 只有document.write()会执行script标签内代码,而innerHTML插入的内容不会执行script标签。

. 可以用来执行XSS的标签
  • script标签: 最原始方式,直接在标签内写JavaScript代码。
  • 事件属性: 几乎所有标签的on事件(如onmouseover、onerror)都可执行JavaScript代码。
  • 特殊标签:
    • 利用加载错误触发