보안 공부/webhacking.kr

webhacking.kr 46번 풀이

sh1256 2021. 12. 14. 20:10
728x90

첫화면

level의 숫자를 바꿔서 제출하면 id(Itusy)와 money의 숫자가 매변 다르게 나옵니다 

 그리고 view-source를 통해 소스코드를 살펴볼까요?

소스코드

입력한 lv이 admin의 lv과 같으면 문제가 풀리게 됩니다. 

그런데 우리가 admin의 lv을 알리가 없겠죠??

SQL injection을 시도해야 할 것 같습니다. 

 

일단 필터링 되는 것들을 간단히 정리해 보죠

 

addslasher: \(역슬래시)

str_replace: (공백), /, *, %

preg_match: select, 0x, limilt, cash (대소문자 상관X)

 

위의 필터링값들을 피해서 

select id,cash from chall46 where lv=0 or id='admin'

식으로 만들어 주면 된다.

 

첫번째 시도: 공백을 +로 우회한다. --> 실패 -->그냥 공백 없이 || 을 쓰자. 

두번째 시도 id=char(97, 100, 109, 105, 110)으로 바꿈

 

0||id=char(97,100,109,105,110)

제출.

성공

이 밖에도 가능한 것 모음

1. 이진법으로 우회: 0||id=0b0110000101100100011011010110100101101110 제출

2. URL 공략: URL뒤에 /?lv=1%26%26id=char(97,100,109,105,110)입력