zoukankan      html  css  js  c++  java
  • SQL手动注入解析

    注入环境: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注入的意义就不大了,需要采用更高级的手段进行渗透测试。

  • 相关阅读:
    被下属骂,记一次矛盾升级——有心无心,蝴蝶效应?
    技术管理进阶——团队合并、解散怎么办?
    “技术转产品”比产品更恶心的几个点
    javaScript系列 [43]TS、Class and ES5
    javaScript系列 [42]node中 require函数的加载过程
    javaScript系列 [52]模板引擎的实现逻辑
    Base64简单介绍
    异或运算(XOR)
    javaScript系列 [51]Rollup 打包器
    javaScript系列 [49] ast && render
  • 原文地址:https://www.cnblogs.com/zhenlingcn/p/7099885.html
Copyright © 2011-2022 走看看