본문 바로가기
computer/web hacking

[LOS] prob_orc

by Paranyo 2018. 4. 28.

LOS의 4번 문제인 orc이다.


이전 문제와 다른 방식으로 조금 더 귀찮게 풀어야 하는 문제이다.

pw 값을 직접 구해서 비교해야 한다.

이전처럼 id='admin'#으로 해결할 수 없다.


문제의 유형을 따지자면 Blind SQL Injection일라나


해결하기 위한 과정을 나열해보자면..

1. 어드민의 pw 길이는?

2. 어드민의 pw 값은 어떻게?


정도로 볼 수 있다. 그런데 1번 과정은 사실 생략해도 되긴 하지만 문제에서 딱히 필터링하는 것도 없고 조금 더 확실한 값을 가져와야 하니


해결해보자

1. MySQL에서는 length를 통해 길이 값을 받아올 수 있다.

2. 패스워드 값을 하나씩 추출해서 비교해보자. 이것은 하나씩 뽑아와서 ascii 문자 코드와 비교해보면 될 것 같다.



1번을 먼저 해보자면


 query : select id from prob_orc where id='admin' and pw='' or id='admin' && length(pw)<30#'


내 쿼리는 위와 같다. id=admin이고 pw길이가 30보다 작은 id는?

하고 쿼리에 물어봤다.



쿼리는 반갑다며 인사를 해줬다.


여기서 확인할 수 있는 건 admin의 pw의 길이는 30보다 작다는 것을 알 수 있다.

위의 쿼리는 id='admin'이고 pw길이가 30미만인 것을 물어봤으니.



비교를 하다보면 금방 패스워드의 길이를 찾을 수 있다.


1. 어드민의 pw 길이는? 8

이건 해결했다.


이제

2. 어드민의 pw 값은 어떻게?

이걸 해결해야 한다.


여러가지 방법이 있겠지만 나는

ascii(), substr() 두 함수를 통해 직접 패스워드의 아스키 코드값을 비교해줄 생각이다.

substr()은 특정 문자열에서 특정 위치에서 특정 개수만큼 절삭해 값을 반환한다.

ascii()는 그 값을 아스키 코드로 변환한다.



이런식으로 찾을 수 있다.

pw의 1번째의 1개의 아스키 코드 값은 50이다.

admin의 pw의 첫자리는 2인 것을 알 수 있다. 2 to ascii = 50

이 과정을 8번 반복하면 8자리의 비밀번호를 찾을 수 있다!


손으로 다 하면 개고생이니 스크립트를 만들어보기로 했다.




상당히 간단하지 않은가!


비밀번호를 알아내었다.



개인차가 있겠지만 나는 이렇게 스크립트를 사용해서 푸는 문제가 재미있다.

사실 이전 게시글이랑 같이 쓰고 있었는데 갑자기 멀티 프로세싱을 해서 조금 더 빠르게 만들어 보고 싶어서 뻘짓을 했다.

재귀를 통한 것과 반복. 사실 재귀는 의미 없다. 아니 오히려 손해다.


멀티프로세싱이 답인 것 같다.

LOS 올클하고 나면 한 번 멀티프로세싱을 이용해 조금 더 빠른 스크립트를 구현해보고 싶다.


end

'computer > web hacking' 카테고리의 다른 글

[LOS] prob_darkelf  (0) 2018.04.28
[LOS] prob_wolfman  (0) 2018.04.28
[LOS] prob_goblin  (0) 2018.04.27
[LOS] prob_cobolt  (0) 2018.04.27
[LOS] prob_gremlin  (0) 2018.04.27