SQL注入学习三
来源:互联网 发布:python assert() 编辑:程序博客网 时间:2024/06/05 03:42
前面猜测数据库的数据库名,表名,列名的方法是访问mysql的information_schema数据库,通过联合查询(union)获取信息。
但是,必须使用mysql数据库的root账号才有权限访问information_schema数据库,而且union、order by等语句的执行,也需要root权限。
当注入的系统的数据库使用普通用户进行操作,将导致我们无法访问infromation_schema,无法进行联合查询,此时,又该怎样获取数据库的数据库名、表名和列名等呢?
这篇博客将对此进行讲解。
采用暴力破解的方式,需要使用burp suite。
1. 猜列名
这里用到判断列名是否为空的sql语句
' and column_name is null--
sql语句拼接后为:
select firstname, surname from users where id='' and column_name is null-- '
我们可以看到后台数据库会去判断列名为column_name的列是否为空。
这时候,如果column_name列存在,不管是否为空,数据库不会报错,如果column_name列不存在,则数据库会报如下错误:
这样,通过使用包含列名的字典文件,进行暴力破解,我们就可以判断,当前表中存在哪些列,当然,结果的好坏,取决于字典的好坏。
下面进行爆破:
首先准备字典文件:
kali中自带一些字典文件。
使用如下命令,搜索名字中含有column的txt文件
find / -name *column*.txt
随意选择一个,这里我们选择golismero的文件。查看之后,发现文件中有一些带#号的行,会对我们的注入造成影响:
使用如下命令进行过滤,并且重新输出到column.txt文件中:
cat /usr/share/golis.../common-column.txt | grep -v ^# > column.txt
这样我们就得到了列的字典文件。
设置好代理,使用burp suite进行爆破。
将拦截到的请求发送到inturder里,首先clear掉所有的变量,然后选中”column_name”,然后点击add,只将列名作为变量。
之后load我们事先准备的字典文件(不进行url编码)。
然后start attack
会发现,burp suite帮助我们在自动的爆破,查看response能够看到服务器的响应,不存在的列名,服务器均响应unknown column,长度一般在380左右;存在的列名,长度一般在4000左右,我们按照长度降序,就能找到爆破出来的列名。
2. 猜当前表表名
有了当前表的列名,我们就可以进一步去猜当前表的表名,原理和猜列名大致一样。
使用如下sql注入命令
' and table_name.user is null--
语句拼接之后:
select firstname, surname from users where id='' and table_name.user is null-- '
就是判断表名为table_name的表中列user是否为空,如果table_name 表不存在会报错,存在不报错。按照列名爆破的方式爆破表名。
同样kali中也有现成的表名字典。
按照上述方式获取字典,然后用burp suite进行爆破,猜解出表名为:users
3. 猜库里其他表
' and (select count(*) from table_name) > 0 --
执行之后发现,直接猜解出了数据库名
接下来使用burp suite爆破。步骤如上。
4. 列-表的对应关系
知道了表名,就可以猜该表里的列名。
' and users.column_name is null --
猜解column_name
5. 猜字段内容
使用
' and user='admin
拼接之后
select firstname, surname from users where id='' or user='admin'
也就是说,只要user等于admin,就会查出结果。没有等于admin的,就没有结果返回。
一些灵活的方法:
' or user like '%a%
- SQL注入学习三
- (学习)SQL注入-POST注入
- 学习sql注入
- 关于SQL注入学习
- 学习SQL注入
- sql注入 学习
- SQL注入学习----检测
- SQL注入的学习
- 牛腩学习---SQL注入
- SQL注入学习笔记
- sql注入学习小结
- sql注入学习笔记
- SQL注入学习总结
- SQL注入学习路线
- SQL注入学习一
- SQL注入学习笔记
- SQL注入学习二
- Sql注入深入解析三
- 用cmd命令行编译JAVA程序时出现“找不到或无法加载主类”
- input标签
- 解决eclipse中Errors running builder JavaScript Validator的问题
- MD5 加密
- 报错JedisConnectionException: Could not get a resource from the pool 已解决。(不是代码问题,Tomcat缓存问题)
- SQL注入学习三
- leetcode---word-break---dp
- 【Apollo源码分析】系列的第六部分【planning】
- 新疆网络赛 经验总结
- 最近任务栏清除app导致app不执行onDestory
- UCOS学习笔记
- 2017-09-09 LeetCode_015 3Sum
- Git学习笔记(8)----总结(常用命令清单)
- NUL与NULL的区别