MySQL数据库5.X版本基本手工注入总结
根据我对MySQL的认识,注入时,基本可以通过爆、盲注、报错三种方式获得用户名和密码,在权限足够的情况下,还可以直接通过SQL语句插入并导出我们的一句话webshell。
当拿到一个MySQL的注入点的时候,我们需要判断MySQL的版本。因为当MySQL的版本小于4.0时,是不支持union select联合查询的;当MySQL版本大于5.0时,有个默认数据库information_schema,里面存放着所有数据库的信息(比如表名、列名、对应权限等),通过这个数据库,我们就可以跨库查询,爆表爆列。现在一般情况下,MySQL都是4.0以上的,所以我们就放心的用联合查询吧。
对于MySQL的注入,大概有这些思路:
1.判断注入点是否有读写权限,如果有,那么可以直接读取配置文件、用户名密码等;当magic_quotes_gpc为off的时候还可以直接导出一句话webshell。
//magic_quotes_gpc为on的时候,'会被转成\',而写导出的绝对路径的时候又必须是用'括起来,所以,就蛋疼了。。
2.没有读写权限时,判断MySQL版本,5.0以上时可以通过爆的方式获得用户名密码;5.0以下或者5.0以上不能爆时(比如限制了information_schema数据库),可以通过盲注获得用户名密码。
//盲注:我的理解是,通过返回页面的正确与否判断查询语句是否正确,和Access数据库的注入很类似,可以算是猜吧。
3.有时候,由于一个参数可能执行了多个查询语句,而导致查不出字段数,更没有数字回显时,如果服务器开启了MySQL错误回显的话,还可以通过报错注入从报错信息中获取我们想要知道的东西。
暂时我想起来的就这些,盲注和报错这两种方式俺不是太熟,就不说了。在这里,我就只简单介绍下MySQL数据库5.X版本的爆表爆列爆内容。
步骤一:判断注入点
不多说了。单引号、and 1=1、and 1=2。
步骤二:order by和union select