SQL injection

Lỗ hổng SQL injection (SQLi) là gì ?

CΓ³ mα»™t vαΊ₯n đề Δ‘αΊ·t ra mΓ  mα»—i khi hệ thα»‘ng cαΊ§n phαΊ£i Δ‘α»‘i mαΊ·t Δ‘Γ³ chΓ­nh lΓ  lΓ m sao để lΖ°u trα»― cΓ‘c thΓ΄ng tin mα»™t cΓ‘ch hiệu quαΊ£, vΓ  khi cαΊ§n sα»­ dα»₯ng cΓ³ thể truy xuαΊ₯t nhanh chΓ³ng vΓ  chΓ­nh xΓ‘c thΓ΄ng tin Δ‘Γ³. ChΓ­nh vΓ¬ vαΊ­y, cΖ‘ sở dα»― liệu ra đời.

CΖ‘ sở dα»― liệu khΓ΄ng chỉ giΓΊp khαΊ―c phα»₯c được nhα»―ng Δ‘iểm yαΊΏu cα»§a việc lΖ°u file thΓ΄ng thường trΓͺn mΓ‘y tΓ­nh, mΓ  cΓ²n Δ‘αΊ£m bαΊ£o thΓ΄ng tin lΖ°u trα»― được nhαΊ₯t quΓ‘n, hαΊ‘n chαΊΏ tΓ¬nh trαΊ‘ng thΓ΄ng tin bα»‹ trΓΉng lαΊ·p. VΓ¬ lΓ  nΖ‘i lΖ°u trα»― nhiều thΓ΄ng tin dα»― liệu quan trọng nhαΊ₯t cα»§a hệ thα»‘ng, nΓͺn cΖ‘ sở dα»― liệu thường lΓ  mα»₯c tiΓͺu tαΊ₯n cΓ΄ng cα»§a nhα»―ng kαΊ» tαΊ₯n cΓ΄ng (attacker).

ChΓ­nh vΓ¬ vαΊ­y, mα»™t thuαΊ­t ngα»― về lα»— hα»•ng nΓ y ra đời: SQL-injection (SQLi)

SQLi lΓ  mα»™t loαΊ‘i tαΊ₯n cΓ΄ng bαΊ£o mαΊ­t mΓ  Γ‘p dα»₯ng trΓͺn cΓ‘c hệ thα»‘ng cΖ‘ sở dα»― liệu. NΓ³ xαΊ£y ra khi mα»™t attacker tαΊ­n dα»₯ng mα»™t lα»— hα»•ng trong việc xα»­ lΓ½ Δ‘αΊ§u vΓ o cα»§a mα»™t α»©ng dα»₯ng web hoαΊ·c hệ thα»‘ng để thα»±c hiện cΓ‘c truy vαΊ₯n SQL Δ‘α»™c hαΊ‘i. KαΊΏt quαΊ£ cα»§a việc thα»±c thi cΓ‘c truy vαΊ₯n nΓ y cΓ³ thể gΓ’y hαΊ‘i cho cở sở dα»― liệu hoαΊ·c hệ thα»‘ng mΓ‘y tΓ­nh, bao gα»“m việc xΓ³a hoαΊ·c sα»­a cΖ‘ sở dα»― liệu, hoαΊ·c cαΊ₯p quyền cho attacker truy cαΊ­p vΓ o cΓ‘c thΓ΄ng tin bαΊ£o mαΊ­t. CΓ‘c lα»— hα»•ng SQLi thường được Δ‘Γ‘nh giΓ‘ mα»©c Δ‘α»™ng nghiΓͺm trọng ở dαΊ‘ng HIGH.

NguyΓͺn nhΓ’n gΓ’y ra lα»— hα»•ng SQLi

GiαΊ£ sα»­ chΓΊng ta cΓ³ hệ thα»‘ng quαΊ£n trα»‹ cΖ‘ sở dα»― liệu MYSQL. Hệ thα»‘ng thα»±c hiện lΖ°u thΓ΄ng tin người dΓΉng vΓ o cΖ‘ sở dα»― liệu, khi cαΊ§n hiển thα»‹ cΓ‘c thΓ΄ng tin cho người dΓΉng, cΓ‘c cΓ’u lệnh truy xuαΊ₯t dα»― liệu tα»« database sαΊ½ được thα»±c thi. VΓ­ dα»₯: người dΓΉng nhαΊ­p vΓ o Γ΄ tΓ¬m kiαΊΏm dα»― liệu β€œmisa0136” lΓΊc nΓ y hệ thα»‘ng cαΊ§n lαΊ₯y tαΊ₯t cαΊ£ thΓ΄ng tin cα»§a người dΓΉng cΓ³ name = misa0136. ĐoαΊ‘n mΓ£ thα»±c thi được sα»­ dα»₯ng nhΖ° sau:

GiαΊ£i thΓ­ch: BiαΊΏn $input nhαΊ­n giΓ‘ trα»‹ misa0136, sau khi ghΓ©p chuα»—i $sql = β€œSELECT * FROM student WHERE name = β€˜ β€œ . $input .” ’ ” .Khi thα»±c hiện qua hΓ m mysql_query() sαΊ½ cΓ³ thể truy xuαΊ₯t kαΊΏt quαΊ£. VαΊ₯n đề cαΊ§n chΓΊ Γ½ ở Δ‘Γ’y lΓ  giΓ‘ trα»‹ biαΊΏn $input cΓ³ thể thay Δ‘α»•i bởi người dΓΉng (untrusted data), nαΊΏu khΓ΄ng thα»±c hiện cΓ‘c cΖ‘ chαΊΏ phΓ²ng người tαΊ₯n cΓ΄ng, attacker cΓ³ thể nhαΊ­p giΓ‘ trα»‹ misa0136’ cho biαΊΏn nΓ y, dαΊ«n Δ‘αΊΏn truy vαΊ₯n trở thΓ nh:

VαΊ­y, mα»₯c Δ‘Γ­ch thΓͺm dαΊ₯u nhΓ‘y Δ‘Ζ‘n để lΓ m gΓ¬ ? VΓ¬ khi ta sα»­ dα»₯ng dαΊ₯u β€˜ nhαΊ±m Δ‘Γ³ng giΓ‘ trα»‹ name phΓ­a trΖ°α»›c Δ‘i (hoαΊ·c kαΊΏt thΓΊc cΓ’u lệnh truy vαΊ₯n nΓ y, vΓ  sau Δ‘Γ³, attacker cΓ³ thể chΓ¨n thΓͺm cΓ‘c cΓ’u lệnh mΓ  họ muα»‘n vΓ o sau dαΊ₯u β€˜. VαΊ­y trường hợp phΓ­a sau vαΊ«n cΓ²n mα»™t phαΊ§n cα»§a cΓ’u lệnh truy vαΊ₯n thΓ¬ sao ? Điều nΓ y được giαΊ£i quyαΊΏt Δ‘Ζ‘n giαΊ£m bαΊ±ng cΓ‘ch sα»­ dα»₯ng cΓ‘c kΓ½ tα»± comment (--, #,/**/…) để biαΊΏn cΓ‘c chuα»—i Δ‘αΊ±ng sau thΓ nh comment.

VΓ­ dα»₯ SQLi

CΓ³ rαΊ₯t nhiều lα»— hα»•ng SQLi, cΓ‘c cuα»™c tαΊ₯n cΓ΄ng vΓ  kα»Ή thuαΊ­t phΓ‘t sinh trong cΓ‘c tΓ¬nh huα»‘ng khΓ‘c nhau. Sau Δ‘Γ’y lΓ  mα»™t sα»‘ vΓ­ sα»₯ SQLi phα»• biαΊΏn:

Β· Retrieving hidden data: nΖ‘i bαΊ‘n cΓ³ thể sα»­a Δ‘α»•i truy vαΊ₯n SQL để trαΊ£ về kαΊΏt quαΊ£ bα»• sung.

Β· Subverting application logic: nΖ‘i bαΊ‘n cΓ³ thể thay Δ‘α»•i mα»™t truy vαΊ₯n để can thiệp vΓ o logic cα»§a α»©ng dα»₯ng

Β· UNION attacks: nΖ‘i bαΊ‘n cΓ³ thể truy xuαΊ₯t dα»― liệu tα»« cΓ‘c bαΊ£ng cΖ‘ sở dα»― liệu khΓ‘c nhau.

Β· Examining the database: nΖ‘i bαΊ‘n cΓ³ thể trΓ­ch xuαΊ₯t thΓ΄ng tin về phiΓͺn bαΊ£n vΓ  cαΊ₯u trΓΊc cα»§a cΖ‘ sở dα»― liệu

. Blind SQLi: kαΊΏt quαΊ£ cα»§a mα»™t truy vαΊ₯n mΓ  bαΊ‘n kiểm soΓ‘t khΓ΄ng được trαΊ£ về trong cΓ‘c phαΊ£n hα»“i cα»§a α»©ng dα»₯ng.

Retrieving hidden data

GiαΊ£ sα»­ trong mα»™t trang web mua sαΊ―m trα»±c tuyαΊΏn, người dΓΉng cΓ³ thể xem cΓ‘c dΓ²ng sαΊ£n phαΊ©m theo tham sα»‘ category: https://insecure-web.site.com/products?category=Gifts Điều nΓ y khiαΊΏn hệ thα»‘ng thα»±c hiện truy xuαΊ₯t cΓ‘c sαΊ£n phαΊ©m tα»« cΖ‘ sở dα»― liệu, vΓ  hệ thα»‘ng sα»­ dα»₯ng thΓͺm Δ‘iều kiện released =1 (chỉ lαΊ₯y cΓ‘c dΓ²ng sαΊ£n phαΊ©m Δ‘ang phΓ‘t hΓ nh):

Do giΓ‘ trα»‹ tham sα»‘ category cΓ³ thể thay Δ‘α»•i tΓΉy Γ½ nΓͺn chΓΊng ta cΓ³ thể lợi dα»₯ng kα»Ή thuαΊ­t tαΊ₯n cΓ΄ng SQLi khiαΊΏn trang web hiển thα»‹ thΓͺm cΓ‘c dΓ²ng sαΊ£n phαΊ©m Δ‘Γ£ tα»«ng phΓ‘t hΓ nh hoαΊ·c sαΊ½ phΓ‘t hΓ nh trong tΖ°Ζ‘ng lai. https://insecure-web.site.com/products?category=Gifts’--

LΓΊc nΓ y, truy vαΊ₯n trở thΓ nh: SELECT * FROM products WHERE category = 'Gifts'-- AND released = 1 KΓ­ hiệu –- Δ‘Γ£ khiαΊΏn phαΊ§n theo sau nΓ³ được hệ thα»‘ng hiểu lΓ  comment nΓͺn lΓ  Δ‘Γ£ vΓ΄ hiệu hΓ³a Δ‘iều kiện released = 1, Δ‘iều nΓ y khiαΊΏn hệ thα»‘ng lαΊ₯y dα»― liệu tαΊ₯t cαΊ£ cΓ‘c sαΊ£n phαΊ©m chỉ thỏa mΓ£n Δ‘iều kiện category = β€˜Gifts’, trong Δ‘Γ³ bao gα»“m tαΊ₯t cαΊ£ cΓ‘c sαΊ£n phαΊ©m thỏa mΓ£n Δ‘iều kiện released = 1 vΓ  released = 0. Đi xa hΖ‘n nα»―a, attacker cΓ³ thể khiαΊΏn α»©ng dα»₯ng hiển thα»‹ tαΊ₯t cαΊ£ cΓ‘c sαΊ£n phαΊ©m trong bαΊ₯t kΓ¬ danh mα»₯c nΓ o, kể cαΊ£ danh mα»₯c mΓ  chΓΊng khΓ΄ng biαΊΏt: https://insecure-website.com/products?category=Gifts'+OR+1=1-- Điều nΓ y dαΊ«n Δ‘αΊΏn truy vαΊ₯n SQL: SELECT * FROM products WHERE category = 'Gifts' OR 1=1--' AND released = 1 Truy vαΊ₯n nΓ y trαΊ£ về tαΊ₯t cαΊ£ cΓ‘c mα»₯c cΓ³ danh mα»₯c lΓ  Gifts hoαΊ·c 1=1. VΓ¬ 1=1 luΓ΄n Δ‘ΓΊng (logic Δ‘αΊ‘i sα»‘), dαΊ«n Δ‘αΊΏn tαΊ₯t cαΊ£ cΓ‘c sαΊ£n phαΊ©m đều được hiển thα»‹. Thα»±c hΓ nh lab (Level: Apprentice) TΓͺn lab: SQLi vulnerability in WHERE clause allowing retrieval of hidden data. Nα»™i dung lab: Trang web cΓ³ chα»©a lα»— hα»•ng SQLi trong cΓ’u lệnh truy xuαΊ₯t dα»― liệu. Để giαΊ£i quyαΊΏt lab nΓ y, chΓΊng ta cαΊ§n khai thΓ‘c lα»— hα»•ng để giao diện web hiển thα»‹ tαΊ₯t cαΊ£ sαΊ£n phαΊ©m phΓ‘t hΓ nh vΓ  chΖ°a phΓ‘t hΓ nh. Thα»±c hΓ nh lab: Thα»±c hiện lab:

1. ChΓΊng ta cΓ³ thể xem cΓ‘c sαΊ£n phαΊ©m theo tα»«ng thể loαΊ‘i. Để Γ½ rαΊ±ng trang web xΓ‘c Δ‘α»‹nh dΓ²ng sαΊ£n phαΊ©m theo tham sα»‘ category trong thanh URL, vΓ  giΓ‘ trα»‹ nΓ y cΓ³ thể thay Δ‘α»•i tΓΉy Γ½ bởi người dΓΉng.

2. Kiểm tra lα»— hα»•ng SQLi bαΊ±ng cΓ‘ch thΓͺm dαΊ₯u β€˜ :

https://0a9c00aa04d7df61c022a9aa007700fc.web-security-academy.net/filter?category=Lifestyle’

Trang web xuαΊ₯t hiện lα»—i:

Điều nΓ y cΓ³ thể dα»± Δ‘oΓ‘n lα»—i xuαΊ₯t hiện lΓ  do cΓ’u lệnh truy vαΊ₯n bα»‹ sai cΓΊ phΓ‘p. Để giαΊ£i quyαΊΏt vαΊ₯n đề nΓ y, chΓΊng ta chỉ cαΊ§n thay Δ‘α»•i giΓ‘ trα»‹ tham sα»‘ kαΊΏt hợp vα»›i mα»™t biểu thα»©c logic luΓ΄n Δ‘ΓΊng, chΓΊng ta cΓ³ thể dαΊ«n Δ‘αΊΏn hệ thα»‘ng truy xuαΊ₯t tαΊ₯t cαΊ£ sαΊ£n phαΊ©m trong cΖ‘ sở dα»― liệu (Δ‘iều nΓ y Δ‘Γ£ được phΓ’n tΓ­ch ở phαΊ§n lΓ½ thuyαΊΏt trΓͺn).

/filter?category=Lifestyle’ or 1=1--

Thα»±c hiện thay Δ‘α»•i vΓ  bΓ i lab cα»§a chΓΊng ta Δ‘Γ£ giαΊ£i quyαΊΏt.

Subverting application logic

GiαΊ£ sα»­, chΓΊng ta cΓ³ mα»™t α»©ng dα»₯ng cho phΓ©p người dΓΉng Δ‘Δƒng nhαΊ­p bαΊ±ng tΓͺn người dΓΉng vΓ  mαΊ­t khαΊ©u.

Login form

Khi người dΓΉng thα»±c hiện Δ‘Δƒng nhαΊ­p, hai tham sα»‘ username vΓ  password được truyền tα»›i hệ thα»‘ng, sau Δ‘Γ³ được β€œghΓ©p” trα»±c tiαΊΏp vΓ o cΓ’u lệnh SQL. VΓ­ dα»₯ cΓ’u lệnh kiểm tra thΓ΄ng tin Δ‘Δƒng nhαΊ­p cα»§a người dΓΉng nhΖ° sau:

NαΊΏu người dΓΉng gα»­i tΓͺn Δ‘Δƒng nhαΊ­p β€œmisa0136” vΓ  mαΊ­t khαΊ©u β€œhelloworld1”, α»©ng dα»₯ng sαΊ½ kiểm tra thΓ΄ng tin Δ‘Δƒng nhαΊ­p bαΊ±ng cΓ‘ch thα»±c hiện truy vαΊ₯n sau:

SELECT * FROM users WHERE username = β€˜misa0136’ AND password = β€˜helloworld1’

NαΊΏu truy vαΊ₯n trαΊ£ về thΓ΄ng tin chi tiαΊΏt cα»§a người dΓΉng thΓ¬ Δ‘Δƒng nhαΊ­p thΓ nh cΓ΄ng, ngược lαΊ‘i – thαΊ₯t bαΊ‘i.

TαΊ‘i Δ‘Γ’y, username vΓ  password lΓ  mα»™t untrusted data. Tα»©c lΓ  kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể tΓ¬m cΓ‘ch thay Δ‘α»•i logic cΓ’u lệnh trΓͺn sao cho khi thα»±c hiện thΓ¬ hệ thα»‘ng khΓ΄ng kiểm tra mαΊ­t khαΊ©u. Tα»« Γ½ tưởng Δ‘Γ³, thα»±c hiện thay Δ‘α»•i giΓ‘ trα»‹ username = misa0136’--, tham sα»‘ mαΊ­t khαΊ©u nhαΊ­n giΓ‘ trα»‹ tΓΉy Γ½. Truy vαΊ₯n SQL trở thΓ nh: SELECT * FROM users WHERE username = β€˜misa0136’—-' AND password = β€˜helloworld1’ NhΖ° vαΊ­y, lΓΊc nΓ y hệ thα»‘ng chỉ thα»±c hiện lαΊ₯y thΓ΄ng tin cΖ‘ sở dα»― liệu vα»›i mα»™t Δ‘iều kiện duy nhαΊ₯t lΓ  username = misa0136 (vΓ¬ dαΊ₯u comment Δ‘Γ£ loαΊ‘i bỏ phαΊ§n cΓ²n lαΊ‘i cα»§a cΓ’u lệnh truy vαΊ₯n). VΓ  chΓΊng ta Δ‘Δƒng nhαΊ­p thΓ nh cΓ΄ng.

Điều nΓ y cΕ©ng cΓ³ thể Γ‘p dα»₯ng tΖ°Ζ‘ng tα»± vα»›i trường password. NhΖ°ng cΓ³ mα»™t chΓΊt khΓ‘c ở payload. ChΓΊng ta thay giΓ‘ trα»‹ password = abc’ or 1=1--. Khi Δ‘Γ³ cΓ’u lệnh truy vαΊ₯n trở thΓ nh: SELECT * FROM users WHERE username = β€˜misa0136’--' AND password = β€˜abc’ or 1=1--

LΓΊc nΓ y, Δ‘iều kiện kiểm tra mαΊ­t khαΊ©u người dΓΉng luΓ΄n Δ‘ΓΊng, nΓͺn chΓΊng ta cΓ³ thể Δ‘Δƒng nhαΊ­p vΓ o tΓ i khoαΊ£n misa0136. VαΊ­y giαΊ£ sα»­, trong trường hợp chΓΊng ta biαΊΏt chαΊ―c rαΊ±ng, cΓ³ người dΓΉng administrator tα»“n tαΊ‘i trΓͺn hệ thα»‘ng thΓ¬ sao? Điều nΓ y trở nΓͺn vΓ΄ cΓΉng nguy hiểm khi cΓ³ lα»—i SQLi ở Δ‘Γ’y.

Thα»±c hΓ nh lab: (Level: Apprentice)

TΓͺn lab: SQL injection vulnerability allowing login bypass. Nα»™i dung lab: Chα»©c nΔƒng Δ‘Δƒng nhαΊ­p cα»§a trang web chα»©a lα»— hα»•ng SQLi. Để hoΓ n thΓ nh lab nΓ y, chΓΊng ta cαΊ§n login vα»›i tΓ i khoαΊ£n người dΓΉng administrator. Thα»±c hiện lab:

  1. Kiểm tra lα»— hα»•ng SQLi bαΊ±ng cΓ‘ch thΓͺm dαΊ₯u β€˜ trong tường username. Trang web trαΊ£ về lα»—i:

  1. NhΖ° vαΊ­y, ở Δ‘Γ’y chΓΊng ta cΓ³ thể dα»± Δ‘oΓ‘n lα»—i xuαΊ₯t hiện do cΓ’u lệnh truy vαΊ₯n bα»‹ sai cΓΊ phΓ‘p. Hiện tαΊ‘i chΓΊng ta Δ‘Γ£ biαΊΏt username cα»§a quαΊ£n trα»‹ viΓͺn lΓ  administrator. NhΖ° Δ‘Γ£ phΓ’n tΓ­ch ở trΓͺn, chΓΊng ta cΓ³ thể phΓ‘ vα»‘ logic cα»§a cΓ’u lệnh SQL bαΊ±ng giΓ‘ trα»‹: administrator’--, cΓ²n password nhαΊ­n giΓ‘ trα»‹ tΓΉy Γ½(BαΊ‘n cΕ©ng cΓ³ thể thα»­ vα»›i cΓ‘ch thα»© hai, thay Δ‘α»•i giΓ‘ trα»‹ tαΊ‘i trường password).

    Solved the lab

Retrieving data from other database tables

Trong trường hợp, chΓΊng ta xΓ‘c Δ‘α»‹nh được nΖ‘i chα»©a lα»— hα»•ng SQLi vΓ  kαΊΏt quαΊ£ trαΊ£ về cΓ³ thể tiαΊΏp tα»₯c khai thΓ‘c thΓ΄ng tin dα»― liệu tα»« cΓ‘c bαΊ£ng khΓ‘c trong cΖ‘ sở dα»― liệu.

GiαΊ£ sα»­, nαΊΏu mα»™t α»©ng dα»₯ng thα»±c hiện truy vαΊ₯n sau:

SELECT name, description FROM products WHERE category = β€˜Gifts’

Ở Δ‘Γ’y tham sα»‘ category cΓ³ thể thay Δ‘α»•i bởi người dΓΉng Δ‘α»“ng thời Δ‘Γ£ biαΊΏt tΓͺn bαΊ£ng cαΊ§n khai thΓ‘c lΓ  users, nΓͺn chΓΊng ta cΓ³ thể sα»­ dα»₯ng phΓ©p UNION để truy xuαΊ₯t dα»― liệu tα»« bαΊ£ng users nhΖ° sau:

SELECT name, description FROM products WHERE category = β€˜Gifts’ UNION SELECT username, password FROM users--

VαΊ­y, phΓ©p UNION lΓ  gΓ¬ ? ChΓΊng ta cΓΉng tΓ¬m hiểu qua vΓ­ dα»₯ sau:

SELECT a,b FROM table1 UNION SELECT c, d FROM table2

  • PhΓ©p UNION cho phΓ©p bαΊ‘n thα»±c hiện mα»™t hoαΊ·c nhiều truy vαΊ₯n bα»• sung SELECT vΓ  nα»‘i kαΊΏt quαΊ£ vΓ o truy vαΊ₯n ban Δ‘αΊ§u.

NhΖ° vαΊ­y, truy vαΊ₯n trong vΓ­ dα»₯ trΓͺn trαΊ£ về mα»™t tαΊ­p hợp kαΊΏt quαΊ£ duy nhαΊ₯t cΓ³ 2 cα»™t, chα»©a cΓ‘c giΓ‘ trα»‹ tα»« cΓ‘c cα»™t a vΓ  b trong table1 vΓ  cΓ‘c cα»™t c, d trong table2.

Để thα»±c hiện truy vαΊ₯n vα»›i UNION, chΓΊng ta cαΊ§n chΓΊ Γ½ tα»›i hai Δ‘iều kiện sau cαΊ§n được thỏa mΓ£n:

Β· CΓ‘c cΓ’u lệnh SELECT cαΊ§n trαΊ£ về sα»‘ cα»™t dα»― liệu bαΊ±ng nhau

Β· CΓ‘c cα»™t tΖ°Ζ‘ng α»©ng cαΊ§n cΓ³ cΓΉng kiểu dα»― liệu

NhΖ° vαΊ­y, cαΊ§n xΓ‘c Δ‘α»‹nh vΓ  trαΊ£ lời 2 cΓ’u hỏi sau:

Β· CΓ³ bao nhiΓͺu cα»™t Δ‘ang được trαΊ£ về tα»« truy vαΊ₯n ban Δ‘αΊ§u ?

Β· Nhα»―ng cα»™t nΓ o được trαΊ£ về tα»« truy vαΊ₯n ban Δ‘αΊ§u thuα»™c loαΊ‘i dα»― liệu phΓΉ hợp để giα»― kαΊΏt quαΊ£ truy vαΊ₯n được Δ‘Ζ°a vΓ o ?

Trả lời cÒu hỏi 1:

Khi thα»±c hiện mα»™t cuα»™c tαΊ₯n cΓ΄ng SQL injection UNION, cΓ³ hai phΖ°Ζ‘ng phΓ‘p hiệu quαΊ£ để xΓ‘c Δ‘α»‹nh cΓ³ bao nhiΓͺu cα»™t được trαΊ£ về tα»« truy vαΊ₯n ban Δ‘αΊ§u. XΓ©t truy vαΊ₯n:

SELECT name, description FROM products WHERE category = β€˜Gifts’

CΓ‘ch 1: Sα»­ dα»₯ng phΓ©p UNION

Thay Δ‘α»•i giΓ‘ trα»‹ tham sα»‘ category:

β€˜ UNION SELECT NULL--

β€˜ UNION SELECT NULL, NULL--

β€˜ UNION SELECT NULL, NULL, NULL--

…

VΓ¬ sao chΓΊng ta sα»­ dα»₯ng kiểu dα»― liệu NULL ở Δ‘Γ’y ? Bởi vΓ¬ kiểu dα»― liệu NULL cΓ³ thể tα»± chuyển hΓ³a thΓ nh bαΊ₯t kΓ¬ kiểu dα»― liệu nΓ o trong quΓ‘ trΓ¬nh hợp kαΊΏt quαΊ£. Thα»±c hiện Δ‘αΊΏn khi trαΊ£ về kαΊΏt quαΊ£.

CΓ‘ch 2: Sα»­ dα»₯ng phΓ©p ORDER BY

PhΓ©p ORDER BY thα»±c hiện sαΊ―p xαΊΏp kαΊΏt quαΊ£ truy vαΊ₯n theo Δ‘iều kiện Δ‘Ζ°a ra. Trong trường hợp nΓ y, chΓΊng ta cαΊ§n lợi dα»₯ng nΓ³ để xΓ‘c Δ‘α»‹nh sα»‘ cα»™t dα»― liệu trαΊ£ về trong cΓ’u truy vαΊ₯n.

Thay Δ‘α»•i giΓ‘ trα»‹ tham sα»‘ category:

β€˜ ORDER BY 1--

β€˜ ORDER BY 2--

β€˜ ORDER BY 3--

…

Thα»±c hiện cho tα»›i khi cΓ’u truy vαΊ₯n khΓ΄ng tΓ¬m thαΊ₯y cα»™t thα»© i, sαΊ½ trαΊ£ về error, Δ‘iều nΓ y cΓ³ nghΔ©a lΓ  cα»™t cΓ³ sα»‘ thα»© tα»± lα»›n nhαΊ₯t lΓ  i-1 (hay truy vαΊ₯n trαΊ£ về i-1 cα»™t dα»― liệu)

Thα»±c hΓ nh lab: (Level: Practitioner)

TΓͺn lab: SQL injection UNION attack, determining the number of columns returned by the query.

Nα»™i dung lab: Trang web nΓ y chα»©a lα»— hα»•ng SQLi trong chα»©c nΔƒng bα»™ lọc hiển thα»‹ sαΊ£n phαΊ©m. ChΓΊng ta cΓ³ thể xΓ‘c Δ‘α»‹nh sα»‘ cα»™t dα»― liệu được trαΊ£ về trong cΓ’u truy vαΊ₯n. Để giαΊ£i quyαΊΏt bΓ i lab nΓ y, chΓΊng ta cαΊ§n sα»­ dα»₯ng UNION xΓ‘c Δ‘α»‹nh sα»‘ cα»™t dα»― liệu trαΊ£ về bαΊ±ng cΓ‘ch gα»™p cΓ‘c cα»™t dα»― liệu nΓ y vα»›i kiểu NULL.

Thα»±c hiện lab:

  1. ChΓΊng ta cΓ³ thể xem cΓ‘c sαΊ£n phαΊ©m thΓ΄ng qua chα»©c nΔƒng bα»™ lọc hiển thα»‹ sαΊ£n phαΊ©m theo loαΊ‘i được xΓ‘c Δ‘α»‹nh qua tham sα»‘ category trong URL vα»›i phΖ°Ζ‘ng thα»©c GET. Tham sα»‘ nΓ y cΓ³ thể thay Δ‘α»•i tΓΉy Γ½.

  2. Kiểm tra lα»— hα»•ng SQL bαΊ±ng cΓ‘ch thay Δ‘α»•i giΓ‘ trα»‹ category =’ .Trang web trαΊ£ về lα»—i:

  3. NhΖ° vαΊ­y, ta Δ‘Γ£ xΓ‘c Δ‘α»‹nh được nΖ‘i xαΊ£y ra lα»—i SQLi. Giờ chΓΊng ta cαΊ§n xΓ‘c Δ‘α»‹nh sα»‘ cα»™t trαΊ£ về: Chọn 1 trong 2 phΖ°Ζ‘ng phΓ‘p ở phαΊ§n lΓ­ thuyαΊΏt cα»§a phαΊ§n nΓ y để thα»±c hiện. Ở Δ‘Γ’y, chọn phΖ°Ζ‘ng phΓ‘p 1. LαΊ§n lượt sα»­ dα»₯ng cΓ‘c payload: β€˜ UNION SELECT NULL--

    β€˜ UNION SELECT NULL, NULL--

Khi chΓ¨n 2 payload trΓͺn thΓ¬ kαΊΏt quαΊ£ trαΊ£ về error

β€˜ UNION SELECT NULL, NULL, NULL--

NhΖ° vαΊ­y, tαΊ‘i payload kiểm tra sα»‘ cα»™t dα»― liệu trαΊ£ về lΓ  3, giao diện khΓ΄ng xuαΊ₯t hiện lα»—i. Lab được giαΊ£i quyαΊΏt.

Finding columns with a useful data type in a SQLi UNION attack

TiαΊΏp nα»‘i vα»›i phαΊ§n được trΓ¬nh bΓ y ở trΓͺn, sau khi xΓ‘c Δ‘α»‹nh được sα»‘ cα»™t dα»― liệu trαΊ£ về, chΓΊng ta cαΊ§n tiαΊΏp tα»₯c tΓ¬m kiαΊΏm cα»™t dα»― liệu được khai thΓ‘c hiển thα»‹ kαΊΏt quαΊ£ thΓ΄ng tin cα»₯ thể.

ChΓΊng ta cΓ³ thể kiểm tra xem cα»™t Δ‘Γ³ cΓ³ thể chα»―a dα»― liệu chuα»—i hay khΓ΄ng bαΊ±ng cΓ‘ch gα»­i mα»™t loαΊ‘t payload UNION SELECT lαΊ§n lượt Δ‘αΊ·t giΓ‘ trα»‹ chuα»—i vΓ o tα»«ng cα»™t. GiαΊ£ sα»­, nαΊΏu truy vαΊ₯n trαΊ£ về 3 cα»™t, payload sαΊ½ lΓ :

β€˜ UNION SELECT β€˜cot1’,NULL,NULL--

β€˜ UNION SELECT NULL,’cot2’,NULL--

β€˜ UNION SELECT NULL,NULL,’cot3’--

Sau Δ‘Γ³, tΓ¬m kiαΊΏm giao diện phαΊ£n hα»“i cΓ‘c khΓ³a tα»« cot1, cot2,cot3. Sα»± xuαΊ₯t hiện cα»§a cΓ‘c tα»« khΓ³a cΕ©ng tΖ°Ζ‘ng α»©ng vα»›i cα»™t dα»― liệu cΓ³ thể khai thΓ‘c.

Thα»±c hΓ nh lab: (Level: Practitioner)

TΓͺn lab: SQL injection UNION attack, finding a column containing text

Nα»™i dung lab: Trang web chα»©a lα»— hα»•ng SQLi trong chα»©c nΔƒng bα»™ lọc hiển thα»‹ sαΊ£n phαΊ©m. KαΊΏt quαΊ£ được hiển thα»‹ trong giao diện trαΊ£ về. Để giαΊ£i quyαΊΏt bΓ i lab nΓ y, chΓΊng ta cαΊ§n khai thΓ‘c lα»— hα»•ng nhαΊ±m tΓ¬m kiαΊΏm cα»™t dα»― liệu trαΊ£ về tΖ°Ζ‘ng thΓ­ch vα»›i dα»― liệu dαΊ‘ng chuα»—i.

Thα»±c hiện lab:

  1. ChΓΊng ta cΓ³ thể sα»­ dα»₯ng chα»©c nΔƒng bα»™ lọc hiển thα»‹ sαΊ£n phαΊ§m theo loαΊ‘i, được xΓ‘c Δ‘α»‹nh qua tham sα»‘ category trong thanh URL, thΓ΄ng qua phΖ°Ζ‘ng thα»©c GET.Tham sα»‘ nΓ y cΓ³ thể thay Δ‘α»•i tΓΉy Γ½.

  2. Theo đề bΓ i, chΓΊng ta cαΊ§n hiển thα»‹ chuα»—i β€œE4a4wG” ra khỏi mΓ n hΓ¬nh để hoΓ n thΓ nh lab.

  3. Kiểm tra lα»— hα»•ng SQLi tαΊ‘i tham sα»‘ category.

  4. XΓ‘c Δ‘α»‹nh sα»‘ cα»™t dα»― liệu vα»›i ORDER BY: Payload: β€˜ ORDER BY 3--(khΓ΄ng trαΊ£ về lα»—i)

    NhΖ° vαΊ­y ta xΓ‘c Δ‘α»‹nh được, cΓ³ 3 cα»™t dα»― liệu
  5. TiαΊΏp theo ta cαΊ§n xΓ‘c Δ‘α»‹nh cα»™t dα»― liệu nΓ o tΖ°Ζ‘ng thΓ­ch vα»›i kiểu dα»― liệu chuα»—i. Kiểm tra lαΊ§n lượt cΓ‘c cα»™t

    Cα»™t 1: misa0136’ UNION SELECT β€˜cot1’,NULL,NULL--

    Cα»™t 2: misa0136’ UNION SELECT NULL,’cot2’,NULL--

    Cα»™t 3: misa0136’ UNION SELECT NULL,NULL,’cot3’--

    Vα»›i payload trΓͺn, lαΊ§n lượt kiểm tra cα»™t 1 vΓ  cα»™t 3 đều trαΊ£ về vα»›i lα»—i. Chỉ cΓ³ cα»™t 2 lΓ  trαΊ£ về Δ‘ΓΊng giΓ‘ trα»‹ β€˜cot2’

  6. NhΖ° vαΊ­y, dα»― liệu trong cα»™t 2 tΖ°Ζ‘ng thΓ­ch vα»›i kiểu dα»― liệu chuα»—i. Hiển thα»‹ chuα»—i đề bΓ i yΓͺu cαΊ§u vΓ  hoΓ n thΓ nh lab.

Using a SQL injection UNION attack to retrieve interesting data

Sau khi Δ‘Γ£ xΓ‘c Δ‘α»‹nh được sα»‘ cα»™t được trαΊ£ về bởi truy vαΊ₯n ban Δ‘αΊ§u vΓ  tΓ¬m thαΊ₯y cα»™t nΓ o cΓ³ thể chα»©a dα»― liệu chuα»—i, bαΊ‘n cΓ³ thể truy xuαΊ₯t nhα»―ng dα»― liệu thΓΊ vα»‹.

GiαΊ£ sα»­:

Β· Truy vαΊ₯n ban Δ‘αΊ§u trαΊ£ về 2 cα»™t, vΓ  cαΊ£ 2 cα»™t đều cΓ³ thể chα»©a dα»― liệu chuα»—i

Β· Điểm chΓ¨n lΓ  mα»™t chuα»—i được trΓ­ch dαΊ«n trong mệnh đề WHERE

Β· CΖ‘ sở dα»― liệu chα»©a mα»™t bαΊ£ng gọi lΓ  users vα»›i cΓ‘c cα»™t username vΓ  password

ChΓΊ Γ½: nαΊΏu bαΊ‘n khΓ΄ng biαΊΏt tΓͺn bαΊ£ng vΓ  tΓͺn cΓ‘c cα»™t. TrΓͺn thα»±c tαΊΏ bαΊ‘n cΓ³ thể Δ‘oΓ‘n tΓͺn bαΊ£ng vΓ  tΓͺn cα»™t. TαΊ₯t cαΊ£ cΖ‘ sở dα»― liệu hiện nay đều cung cαΊ₯p cΓ‘c cΓ‘ch kiểm tra cαΊ₯u trΓΊc cΖ‘ sở dα»― liệu để xΓ‘c Δ‘α»‹nh xem nΓ³ chα»©a nhα»―ng bαΊ£ng vΓ  cα»™t nΓ o. Thα»±c hΓ nh lab: (Level : Practitioner)

TΓͺn lab: SQL injection UNION attack, retrieving data from other tables

Nα»™i dung lab: Trang web nΓ y chα»©a lα»— hα»•ng SQLi trong bα»™ lọc danh mα»₯c sαΊ£n phαΊ©m. KαΊΏt quαΊ£ tα»« truy vαΊ₯n được trαΊ£ về trong phαΊ£n hα»“i cα»§a α»©ng dα»₯ng, vΓ¬ vαΊ­y bαΊ‘n cΓ³ thể sα»­ dα»₯ng tαΊ₯n cΓ΄ng UNION để lαΊ₯y dα»― liệu tα»« bαΊ£ng khΓ‘c. Để xΓ’y dα»±ng cuα»™c tαΊ₯n cΓ΄ng nhΖ° vαΊ­y,bαΊ‘n cαΊ§n kαΊΏt hợp mα»™t sα»‘ kΔ© thuαΊ­t mΓ  bαΊ‘n Δ‘Γ£ học được trong cΓ‘c lab trΖ°α»›c. CΖ‘ sở dα»― liệu chα»©a mα»™t bαΊ£ng khΓ‘c gọi lΓ  users vα»›i cΓ‘c cα»™t lΓ  username vΓ  password. Để hoΓ n thΓ nh bΓ i lab nay, hΓ£y lαΊ₯y thΓ΄ng tin Δ‘Δƒng nhαΊ­p cα»§a administrator vΓ  Δ‘Δƒng nhαΊ­p vΓ o hệ thα»‘ng.

Thα»±c hiện lab:

  1. NhΖ° cΓ‘c bΓ i lab trΖ°α»›c, Δ‘αΊ§u tiΓͺn chΓΊng ta cαΊ§n xΓ‘c Δ‘α»‹nh Δ‘iểm xαΊ£y ra lα»—i SQLi. TαΊ‘i tham sα»‘ category, chΓΊng ta xΓ‘c Δ‘α»‹nh được ở Δ‘Γ’y chα»©a lα»—i nΓ y bαΊ±ng cΓ‘ch thΓͺm dαΊ₯u β€˜. (lα»—i được trαΊ£ về)

  2. TiαΊΏp theo, ta cαΊ§n xΓ‘c Δ‘α»‹nh sα»‘ cα»™t dα»― liệu được trαΊ£ về.

    Payload: β€˜ ORDER BY 1-- , β€˜ ORDER BY 2--, …

    Gα»­i lαΊ§n lượt cΓ‘c payload trΓͺn Δ‘αΊΏn khi khΓ΄ng xuαΊ₯t hiện lα»—i.

    NhΖ° vαΊ­y ta xΓ‘c Δ‘α»‹nh được cΓ³ 2 cα»™t dα»― liệu được trαΊ£ về.
  3. Ta cαΊ§n xΓ‘c Δ‘α»‹nh cα»™t nΓ o chα»©a dα»― liệu kiểu chuα»—i.

    Payload: β€˜ UNION SELECT β€˜cot1’, NULL--, β€˜ UNION SELECT NULL,’cot2’--

NhΖ° vαΊ­y, ta xΓ‘c Δ‘α»‹nh được cαΊ£ 2 cα»™t đều chα»©a dα»― liệu kiểu chuα»—i.

TiαΊΏn hΓ nh truy xuαΊ₯t dα»― liệu bαΊ£ng users,vα»›i thΓ΄ng tin người dΓΉng cαΊ§n khai thΓ‘c lΓ  administrator:

Payload: β€˜ UNION SELECT password, NULL FROM users WHERE username = β€˜administrator’--

Đăng nhαΊ­p vα»›i tΓ i khoαΊ£n administrator để hoΓ n thΓ nh lab

Retrieving multiple values within a single column

Trong bΓ i lab trΖ°α»›c,giαΊ£ sα»­ rαΊ±ng truy vαΊ₯n chỉ trαΊ£ về mα»™t cα»™t duy nhαΊ₯t. BαΊ‘n cΕ©ng cΓ³ thể dα»… dΓ ng truy xuαΊ₯t nhiều giΓ‘ trα»‹ cΓΉng nhau trong mα»™t cα»‘t bαΊ±ng cΓ‘ch nα»‘i cΓ‘c giΓ‘ trα»‹ lαΊ‘i vα»›i nhau, tα»‘t nhαΊ₯t lΓ  bao gα»“m mα»™t dαΊ₯u tΓ‘ch phΓΉ hợp để bαΊ‘n dα»… dΓ ng nhαΊ­n biαΊΏt được cΓ‘c giΓ‘ trα»‹ được kαΊΏt hợp.

VΓ­ dα»₯ Δ‘α»‘i vα»›i CSDL Oracle:

β€˜ UNION SELECT username || β€˜~~’ || password FROM user--

ToΓ‘n tα»­ || lΓ  toΓ‘n tα»­ nα»‘i chuα»—i trΓͺn Oracle. NhΖ° vαΊ­y kαΊΏt quαΊ£ truy vαΊ₯n sαΊ½ lΓ :

Username~~Password

LΖ°u Γ½: mα»—i cΖ‘ sở dα»― liệu khΓ‘c nhau, cΓ³ cΓΊ phΓ‘p sα»­ dα»₯ng khΓ‘c nhau.

Thα»±c hΓ nh lab: (Level: Practitioner)

TΓͺn lab: SQL injection UNION attack, retrieving multiple values in a single column.

Nα»™i dung lab: Trang web nΓ y chα»©a lα»— hα»•ng SQLi trong bα»™ lọc danh mα»₯c sαΊ£n phαΊ©n. CSDL chα»©a mα»™t bαΊ£ng users, vα»›i cΓ‘c cα»™t được gọi lΓ  username vΓ  password. Truy xuαΊ₯t dα»― liệu 2 cα»™t Δ‘Γ³ ra khỏi mΓ n hΓ¬nh. Để hoΓ n thΓ nh lab,dΔƒng nhαΊ­p vα»›i tΖ° cΓ‘ch người dΓΉng administrator.

Thα»±c hiện lab:

  1. Bỏ qua cΓ‘c bΖ°α»›c xΓ‘c Δ‘α»‹nh nΖ‘i xαΊ£y ra lα»—i vΓ  xΓ‘c Δ‘α»‹nh sα»‘ cα»™t trαΊ£ về vΓ  cα»™t chα»©a thΓ΄ng tin kiểu chuα»—i (BαΊ‘n tα»± thα»±c hiện lαΊ‘i cΓ‘c bΖ°α»›c nΓ y để thΓͺm kinh nghiệm.)

  2. Truy xuαΊ₯t dα»― liệu 2 cα»™t username vΓ  password: Payload: β€˜ UNION SELECT NULL,username ||’~’||password FROM users--

Đăng nhαΊ­p vα»›i tΓ i khoαΊ£n administrator để hoΓ n thΓ nh lab

Blind SQL injection

Trong thα»±c tαΊΏ, cΓ³ nhiều trường hợp SQL injection lΓ  blind, tα»©c lΓ  α»©ng dα»₯ng khΓ΄ng trαΊ£ về kαΊΏt quαΊ£ cα»§a truy vαΊ₯n SQL hoαΊ·c chi tiαΊΏt về bαΊ₯t kΓ¬ lα»—i cΖ‘ sở dα»― liệu nΓ o trong phαΊ£n hα»“i cα»§a nΓ³. NhΖ°ng kiểu lα»— hα»•ng nΓ y vαΊ«n cΓ³ thể được khai thΓ‘c, nhΖ°ng kΔ© thuαΊ­t khai thΓ‘c thường phα»©c tαΊ‘p hΖ‘n.

TΓΉy thuα»™c vΓ o bαΊ£n chαΊ₯t cα»§a lα»— hα»•ng vΓ  cΖ‘ sở dα»― liệu liΓͺn quan, mα»™t sα»‘ kΔ© thuαΊ­t sau Δ‘Γ’y cΓ³ thể được sα»­ dα»₯ng để khai thΓ‘c SQLi blind:

  1. Thay Δ‘α»•i logic cα»§a truy vαΊ₯n để kΓ­ch hoαΊ‘t sα»± khΓ‘c biệt cΓ³ thể phΓ‘t hiện được trong phαΊ£n hα»“i cα»§a α»©ng dα»₯ng tΓΉy thuα»™c vΓ o Δ‘α»™ chΓ­nh xΓ‘c cα»§a mα»™t Δ‘iều kiện. Điều nΓ y cΓ³ thể liΓͺn quan Δ‘αΊΏn việc Δ‘Ζ°a mα»™t Δ‘iều kiện mα»›i vΓ o logic Boolean nΓ o Δ‘Γ³ hoαΊ·c kΓ­ch hoαΊ‘t mα»™t cΓ‘ch cΓ³ Δ‘iều kiện mα»™t lα»—i. (vΓ­ dα»₯ chia mα»™t sα»‘ cho 0)

  2. KΓ­ch hoαΊ‘t thời gian delay mα»™t cΓ‘ch cΓ³ Δ‘iều kiện trong quΓ‘ trΓ¬nh xα»­ lΓ½ truy vαΊ₯n, cho phΓ©p suy ra tΓ­nh Δ‘ΓΊng Δ‘αΊ―n cα»§a Δ‘iều kiện dα»±a trΓͺn thời gian mΓ  α»©ng dα»₯ng cαΊ§n để phαΊ£n hα»“i.

  3. KΓ­ch hoαΊ‘t tΖ°Ζ‘ng tΓ‘c mαΊ‘ng ngoΓ i bΔƒng tαΊ§n, sα»­ dα»₯ng kα»Ή thuαΊ­t OAST.

Vα»›i loαΊ‘i lα»— hα»•ng nΓ y, nhiều kα»Ή thuαΊ­t vΓ­ dα»₯ nhΖ° UNION attack khΓ΄ng hoαΊ‘t Δ‘α»™ng vΓ¬ chΓΊng dα»±a vΓ o việc cΓ³ thể xem kαΊΏt quαΊ£ cα»§a truy vαΊ₯n được chΓ¨n trong cΓ‘c phαΊ£n hα»“i cα»§a α»©ng dα»₯ng.

Exploiting blind SQL injection by triggering conditional responses

GiαΊ£ sα»­, mα»™t α»©ng dα»₯ng sα»­ dα»₯ng cookie theo dΓ΅i để thu thαΊ­p phΓ’n tΓ­ch việc sα»­ dα»₯ng vα»›i tiΓͺu đề nhΖ° sau:

Cookie: TrackingId=u5YD3PapBcR4lN3e7Tj4

Khi mα»™t yΓͺu cαΊ§u chα»© cookie TrackingId được xα»­ lΓ½, α»©ng dα»₯ng sαΊ½ xΓ‘c Δ‘α»‹nh xem Δ‘Γ’y cΓ³ phαΊ£i lΓ  người dΓΉng Δ‘Γ£ biαΊΏt hay khΓ΄ng bαΊ±ng mα»™t truy vαΊ₯n nhΖ° sau:

SELECT TrackingId FROM TrackedUsers WHERE TrackingId = 'u5YD3PapBcR4lN3e7Tj4'

CΓ³ thể Δ‘oΓ‘n rαΊ±ng, truy vαΊ₯n SQL nΓ y dα»… bα»‹ tαΊ₯n cΓ΄ng SQLi, nhΖ°ng kαΊΏt quαΊ£ tα»« truy vαΊ₯n khΓ΄ng trαΊ£ lαΊ‘i cho người dΓΉng. Tuy nhiΓͺn, α»©ng dα»₯ng sαΊ½ hoαΊ‘t Δ‘α»™ng khΓ‘c nhau tΓΉy thuα»™c vΓ o việc truy vαΊ₯n cΓ³ trαΊ£ về bαΊ₯t kα»³ dα»― liệu nΓ o hay khΓ΄ng. NαΊΏu nΓ³ trαΊ£ về dα»― liệu (vΓ¬ Δ‘Γ£ được xΓ‘c thα»±c lΓ  TrackingId lΓ  Δ‘Γ£ gα»­i), thΓ¬ sαΊ½ cΓ³ mα»™t thΓ΄ng bΓ‘o ' Welcome back'.

ThΓ΄ng bΓ‘o nΓ y lΓ  Δ‘α»§ để cΓ³ thể khai thΓ‘c lα»— hα»•ng chΓ¨n SQLi blind vΓ  truy xuαΊ₯t thΓ΄ng tin bαΊ±ng cΓ‘ch kΓ­ch hoαΊ‘t cΓ‘c phαΊ£n hα»“i khΓ‘c nhau theo Δ‘iều kiện, tΓΉy thuα»™c vΓ o Δ‘iều kiện được chΓ¨n. GiαΊ£ sα»­ rαΊ±ng hai yΓͺu cαΊ§u lαΊ§n lượt được gα»©i cΓ³ chα»©a cookie TrackingId cΓ³ giΓ‘ trα»‹ sau:

…xyz' AND '1'='1

…xyz' AND '1'='2

GiαΊ£i thΓ­ch: GiΓ‘ trα»‹ Δ‘αΊ§u tiΓͺn trong sα»‘ nΓ y sαΊ½ kiαΊΏn truy vαΊ₯n trαΊ£ về kαΊΏt quαΊ£ vΓ¬ Δ‘iều kiện AND '1' = '1 được Δ‘Ζ°a vΓ o lΓ  Δ‘ΓΊng vΓ  do Δ‘Γ³, thΓ΄ng bΓ‘o 'Welcome back' được hiển thα»‹. Trong khi Δ‘Γ³, giΓ‘ trα»‹ thα»© hai sαΊ½ khiαΊΏn truy vαΊ₯n khΓ΄ng trαΊ£ về bαΊ₯t kΓ¬ kαΊΏt quαΊ£ nΓ o vΓ¬ Δ‘iều kiện được Δ‘Ζ°a vΓ o lΓ  sai vΓ  do Δ‘Γ³, khΓ΄ng cΓ³ thΓ΄ng bΓ‘o được hiển thα»‹. Điều nΓ y cho phΓ©p xΓ‘c Δ‘α»‹nh cΓ’u trαΊ£ lời cho bαΊ₯t kα»³ Δ‘iều kiện được Δ‘Ζ°a vΓ o nΓ o vΓ  do Δ‘Γ³ trΓ­ch xuαΊ₯t dα»― liệu tα»«ng bit mα»™t.

VΓ­ dα»₯: CΖ‘ sở dα»― liệu cΓ³ mα»™t bαΊ£ng Users vα»›i cΓ‘c cα»™t Username vΓ  Password, vΓ  người dΓΉng Administrator. Ở Δ‘Γ’y cΓ³ thể xΓ‘c Δ‘α»‹nh mαΊ­t khαΊ©u cho người dΓΉng nΓ y mα»™t cΓ‘ch cΓ³ hệ thα»‘ng bαΊ±ng cΓ‘ch gα»­i mα»™t loαΊ‘t dα»― liệu Δ‘αΊ§u vΓ o để kiểm tra mαΊ­t khαΊ©u tα»«ng kΓ½ tα»± mα»™t.

Thα»±c hΓ nh lab: (Level Practitioner)

TΓͺn lab: Blind SQL injection with conditional responses

Nα»™i dung lab: Trang web nΓ y chα»©a lα»— hα»•ng SQLi blind. Ứng dα»₯ng sα»­ dα»₯ng cookie theo dΓ΅i để phΓ’n tΓ­ch vΓ  thα»±c hiện truy vαΊ₯n SQL cΓ³ chα»©a giΓ‘ trα»‹ cookie Δ‘Γ£ gα»­i. KαΊΏt quαΊ£ cα»§a truy vαΊ₯n SQL khΓ΄ng được trαΊ£ lαΊ‘i vΓ  khΓ΄ng cΓ³ thΓ΄ng bΓ‘o lα»—i nΓ o được hiển thα»‹. Tuy nhiΓͺn, α»©ng dα»₯ng cΓ³ thΓ΄ng bΓ‘o Welcome back nαΊΏu truy vαΊ₯n trαΊ£ về bαΊ₯t kΓ¬ hΓ ng nΓ o. Đăng nhαΊ­p vα»›i tΖ° cΓ‘ch administrator để hoΓ n thΓ nh lab

Thα»±c hiện lab:

  1. Sα»­ dα»₯ng Burp Suite để chαΊ·n vΓ  sα»­a Δ‘α»•i yΓͺu cαΊ§u cΓ³ chα»©a cookie TrackingId= uJz4afswQu41nynF

  2. Sα»­a Δ‘α»•i cookie TrackingId thΓ nh: TrackingId= uJz4afswQu41nynF' AND '1'='1

ThΓ΄ng bΓ‘o Welcome back được hiển thα»‹
  1. Sα»­a Δ‘α»•i cookie TrackingId thΓ nh: TrackingId= uJz4afswQu41nynF' AND '1'='2

ThΓ΄ng bΓ‘o Welcome back khΓ΄ng được hiển thα»‹

Điều nΓ y cho thαΊ₯y cΓ‘ch cΓ³ thể kiểm tra mα»™t Δ‘iều kiện boolean duy nhαΊ₯t vΓ  suy ra kαΊΏt quαΊ£.

  1. Sα»­a Δ‘α»•i cookie thΓ nh:

TrackingId=uJz4afswQu41nynF' AND (SELECT 'a' FROM users LIMIT 1)='a

NhΖ° vαΊ­y, Δ‘iều nΓ y xΓ‘c minh Δ‘iều kiện lΓ  Δ‘ΓΊng vΓ¬ cΓ³ thΓ΄ng bΓ‘o Welcome back xuαΊ₯t hiện. CΖ‘ sở dα»― liệu cΓ³ chα»©a bαΊ£ng users

  1. TiαΊΏp Δ‘αΊΏn, xΓ‘c minh người dΓΉng administrator. Sα»­a Δ‘α»•i cookie thΓ nh

TrackingId=uJz4afswQu41nynF' AND (SELECT 'a' FROM users WHERE username='administrator')='a

Điều nΓ y xΓ‘c nhαΊ­n, cΓ³ tα»“n tαΊ‘i người dΓΉng administrator.

  1. XΓ‘c minh Δ‘α»™ dΓ i cα»§a mαΊ­t khαΊ©u:

Sα»­a Δ‘α»•i cookie thΓ nh:

TrackingId=uJz4afswQu41nynF' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>1)='a

Điều nΓ y để xΓ‘c minh mαΊ­t khαΊ©u cΓ³ Δ‘α»™ dΓ i lα»›n hΖ‘n 1 kΓ­ tα»±. Thay Δ‘α»•i kiểm tra Δ‘α»™ dΓ i mαΊ­t khαΊ©u cho Δ‘αΊΏn khi khΓ΄ng xuαΊ₯t hiện thΓ΄ng bΓ‘o Welcome back.

Để Δ‘Ζ‘n giαΊ£n hΓ³a việc khai thΓ‘c, sα»­ dα»₯ng Burp Repeater. Sau khi xΓ‘c Δ‘α»‹nh được Δ‘α»™ dΓ i cα»§a mαΊ­t khαΊ©u lΓ  20 kΓ­ tα»±. vα»›i payload: TrackingId=uJz4afswQu41nynF' AND (SELECT 'a' FROM users WHERE username='administrator' AND LENGTH(password)>20)='a

Sau khi xΓ‘c Δ‘α»‹nh được Δ‘α»™ dΓ i cα»§a mαΊ­t khαΊ©u. BΓ’y giờ ta cαΊ§n xΓ‘c Δ‘α»‹nh cΓ‘c kΓ­ tα»± cα»§a mαΊ­t khαΊ©u tα»«ng kΓ­ tα»± mα»™t

TrackingId=uJz4afswQu41nynF' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a

Đến Δ‘Γ’y sα»­ dα»₯ng Burp Intruder để giαΊ£m thời gian thα»±c hiện. ( BαΊ‘n đọc tα»± tΓ¬m hiểu cΓ‘ch sα»­ dα»₯ng)

NhΖ° vαΊ­y, kΓ­ tα»± Δ‘αΊ§u tiΓͺn cα»§a mαΊ­t khαΊ©u được xΓ‘c nhαΊ­n lΓ  q. Thay Δ‘α»•i payload để xΓ‘c Δ‘α»‹nh kΓ­ tα»± thα»© 2,3,4,5,6....20 TrackingId=uJz4afswQu41nynF' AND (SELECT SUBSTRING(password,2,1) FROM users WHERE username='administrator')='a

KΓ­ tα»± mΓ u đỏ trong payload lΓ  trường cαΊ§n thay Δ‘α»•i sau mα»—i kΓ­ tα»± được tΓ¬m thαΊ₯y.

Password được tΓ¬m thαΊ₯y : qjcnav3pternr6apiacu Đăng nhαΊ­p để hoΓ n thΓ nh lab:

Last updated