보안(6) ≡ SQL Injection

Acrylic·2024년 4월 19일

SQL Injection

웹 클라이언트가 반환한 메시지를 이용해 정보 유출 혹은 불법 인증하는 공격

SQL Injection 공격은 연산자 이용, 시간 지연 공격 등을 이용해서 백엔드 단에서 공격하는 기법입니다. 백문 불여일견이니 한번 풀어 보죠.

simple_sqli

https://dreamhack.io/wargame/challenges/24

생긴 거부터 취약하게 생겼는데 저만 그런가요? 아무튼

기초 문제는 기초로 공격하는 게 맞겠죠?

res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"')

벌써 답 나왔네요. 필터링도 없는데 이렇게 쓰면 뭐다? 주석 처리다~

admin" -- . 끝.

너무 간단했으니까 다음 걸로 넘어가 보죠.

old-03

https://webhacking.kr/challenge/web-03/

일단 능지가 좋아야 넘어갈 수 있네요. 에이, 근데 설마 이걸 오랜 시간 고민하고 풀겠어요?

10초도 안 된 거 같은데...

여기서 공격하라는 말 같네요. 아무거나 적어 봅시다!

그렇다네여. 오해하실 수도 있는데 저거 제 아이피 아니에요.

이름은 머 찔러 봤자 이름이고 가져와도 의미가 없죠?
answer을 한번 찔러 봅시다.

여기서요.

' or 1=1 -- . 끝.

이것도 너무 간단했나요?

old-18

https://webhacking.kr/challenge/web-32/

엌 이거 제가 수업 발표할 때 썼던 건데 모르겠나요? 그래도 봅시다.

코드는 이렇게 돼 있는데 그냥 봐도 ''or'2'=no인데요?
꼭 등호를 앞에만 붙이라는 법은 없습니다.

원래는 공백 문자 필터링 우회해야 하는데 %09 이런 걸로...
쉬운 게 있으면 굳이 그럴 필요는 없죠. 근데 저거 생각한다고 조금 걸리긴 했지만요.
다음으로 넘어갑시다.

old-45

https://webhacking.kr/challenge/web-22/

뭔가 단단히 마음을 먹으신 거 같은데요? 배경부터가 갑자기 흰색이야.

쉬운 문제 같진 않네요. 등호가 막혀 있어서 제가 위에서 했던 방식으로는 뚫리지가 않습니다. 심지어 admin도 막아 놨네요? 그렇다고 바로 주석 처리하자니... mb_convert_encoding 때문에 뭐가 제대로 되지 않습니다. ' 이걸 못 써요. 근데 이거 우회를 %aa~%fe 이런 거 처음부터 쓰면 막을 수 있다네요? 이렇게 하면 문자가 돼 버린대요.
그럼 %aa' -- &pw=asf로 실험해 볼까요?

Wrong이 뜹니다. 그럼 된 거죠? admin도 문자 우회해서 한번 뚫어 봅시다! 아스키 코드를 알아야겠네요.

admin은 각각 97, 100, 109, 105, 110으로 이루어져 있어요. 그러면 chr(97,100,109,105,110) 이러면 되겠네요!

%aa'%20or%20id%20LIKE%20char(97,100,109,105,110) -- &pw=asf

profile
프런트엔드 개발자 지망생

0개의 댓글