• 原理篇—sql注入5:pikachu靶机练习


    数字型注入(post)

    一眼到post注入,直接用burp抓包

     抓到包后,构造or 1=1看能不能遍历

     遍历成功,接着就是进行一些联合查询操作,具体操作在 https://www.cnblogs.com/guoqingsentou/p/13488796.html

    字符型注入(get)

    我们先随便输入一串字符,看他的参数为name是字符型,那么他的sql语句很可能是select * from 表名 where username = 'lisi'

     

     根据sql语句构造payload:aa' or 1=1#

    搜索型注入

    可以推测他的sql语句是用like进行的模糊查询,具体查询字段应该是:'%查询内容%',针对这个字段构造payload:aa%' or 1=1 # 

    XX型注入

    先尝试单引号对他进行闭合,发现不行,一顿操作(看源码)发现是括号的原因,再对他构造payload:aa') or 1=1 #

    "insert/update"注入

    首先对于insert,一般是在注册页面,sql语句为:insert into user(name,password,sex,phone,address1,address2) value(’aaa‘,123,1,2,3,4)

    对此我们可以构造payload:xxx' or updatexml(1,concat(0x7e,database()),0) or '

    至于这个updatexml()和concat()函数,详见:www.。。。.com(没链接表示我还没写)

    成功爆出数据库名

     然后是update注入,我看可以看下修改信息的页面

    猜测他的sql语句可能是:update tables set sex = '$sex' where name = 'aaa';

    构造payload:xxx' or updatexml(1,concat(0x7e,database()),0) or '

     

    "delete"注入

    先随便留言建立几条数据,删除时进行抓包操作

    数据包如下:

     对url进行构造

     成功拿到数据库:

    "http header"注入

    正常账号密码登录进来,提示了一些请求头信息和端口信息

    上面有提到user-agent,那么我们从这里入手

     同样的payload,成功爆出数据库

    盲注(base on boolian)

    直接拿length()测下长度,ascii()一个字母一个字母的猜就完事了

     

    盲注(base on time)

    基于时间的盲注是一般在页面什么都不返回的时候用

    payload:lucy' and sleep(5)#   //通过响应时间判断是否注入成功

    lucy' and if(ascii(substr(database(),1,1))>97,sleep(5),null)#  //通过if语句,成功会休息5秒,失败直接显示

    宽字节注入

    形成原因:

    1. 数据库编码设置成GBk系列编码
    2. 使用了转义函数

    原理:当MySQL在使用GBK编码的时候,会认为两个字符是一个繁体汉字,然后让我们的单引号%27成功逃逸:

        

     

  • 相关阅读:
    3.22
    练习 3.16
    简单工厂模式
    Java-不可变字符串
    java中的缓冲流
    TCP协议下java通信
    nginx优化
    nginx反向代理
    shell-for循环
    shell-数组
  • 原文地址:https://www.cnblogs.com/guoqingsentou/p/13520105.html
Copyright © 2020-2023  润新知