@23번문제
블라인드 인젝션으로 Suninatas에 있는 웹카테고리의 마지막 문제이다.
난이도가 있었지만, 보통의 블라인드 인젝션이었다.
MsSQL DB라는 것을 감안해야하고 곳곳의 어려운부분이 있기는 하다.




(23번 문제)



(문제 화면)



문제화면을 보니 필터링하고 있는 키워드 중에 admin 단어가 보인다.

블라인드 인젝션으로 이번 문제는 admin의 비밀번호를 찾는 것이 목적인데,
admin을 필터링 했다니.

일단 사용할 수 있는 키워드와 주석, numeric/string인지 여부를 확인하기 위해
인젝션을 시도하였다.
그 중 성공한 쿼리를 통해서 알 수 있는 내용은 다음과 같았다.



(성공 쿼리)



id 부분은 string으로 들어가고 있고 or, =, -- 기호를 사용할 수 있다.

또 이 문제에서 조금 힘들었던 부분이 길이제한인데..
예를들어 다음과 같이 길이가 조금 길다 싶으면 No hack이라고 떴다.
처음에는 어떤 단어를 필터링 하고 있는 줄 알았는데
키워드가 아닌 길이에서 필터링을 하고 있었다.



(필터링 된 모습)



최대 몇글자까지인지 확인해볼 필요가 있다.




(길이 확인)



최대 길이를 확인해보니 30 글자였고
30글자를 넘어가면 No hack이라고 떴다.

우리는 30글자 이내의 쿼리문을 만들어야한다.

그리고 또 우리가 해야할 일 중 하나는
admin의 행을 select할 수 있도록 해야하는데
처음에는 id에서 guest가 아닌 행을 찾도록해서 admin 계정의 행을 select 하는데 성공했다.




(admin select 성공)



하지만 이렇게 할 경우 블라인드 인젝션을 하려면 뒤에 긴 쿼리가 붙어야하는데
한계가 있었다..
즉, admin을 우회해서 입력할 수 있어야했다.

구글에 문자열 필터링을 치니 가장 먼저 나온것이
쿼터로 끊어주는 것이었다.
ex 'admin = 'adm'+'in'

이런 방법이 적용되는지 확인해 보았다.



(인젝션)



admin 행을 select 하는데 성공했다. :)
이제 블라인드 인젝션을 해야하는데 평소와 같이 나는 이렇게 입력했다.



(인젝션)



결과는 당연히 False였다. MsSQL에서는 mid함수를 지원하지 않는다...
그렇기에 내게 남은건 left 함수밖에 없었는데(substring을 필터링하고있어서...)
left를 쓰면 비밀번호 길이가 12글자인데(비밀번호 길이를 구하는 과정은 사진찍지 못했다.!)
30글자의 쿼리를 넘지않을까 걱정이 들었다.
하지만 우리에겐 right함수도 있으므로 막히면 right로 교체해서 반씩 알아내도 되겠다는 생각이 들었다.
첫글자는 파이썬으로 V였다.



(인젝션)



이런식으로 파이썬 코드를 작성하여 한글자씩 찾았다.
(12글자라서 금방 끝났다.)




(작성 코드)





(결과)



첫번째 글자는 V였고
두번째 쿼리는 admin'+'n'and left(pw,2)='V + chr(i)'-- 을 이용하여 찾았다.




(2번째 글자)




(결과)



결과는 3이었고
이제부터 No hack이 뜨기 시작했다.
그리하여 쿼리문을
'or left(pw,3)='V3 + chr(i)'-- 로 바꾸어서 찾았다.



(3번째 글자)




(결과)



이런 식으로 한글자씩 찾을 수 있었고

마지막에 admin으로 로그인해본 결과 비밀번호가 일치했다.



(문제 해결)



이제 이 비밀번호를 인증키에 입력해주면 끝이다. :)


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 22  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 8  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23


@22번 문제
Blind Injection 문제로 자신있었던 문제이다. :)



(22번 문제)



(문제 화면)



문제 화면을 보면 필터링 되고있는 단어들을 보여주고 있다.
먼저 id에 입력되는 값이 numeric인지 string인지 체크하기 위하여
주석을 사용해보았다.
(여기서 이 사이트가 내가 풀던 사이트랑 조금 다른데? 라고 느꼈던 부분이 있는데
 DB를 MsSQL을 쓰는 것 같았다.)
MySQL에서 #이 주석으로 먹혔는데 여기서는 #이 주석으로 먹히지 않았다.
그래서 주석 -- 를 사용했다. 다행히 --은 필터링 하지 않았다.



(주석 이용)



주석만 사용했을 때 에러가 났고 이로써 numeric이 아니라 string인 걸 확인 할 수 있었다.

즉 쿼터로 닫아주고 다시 -- 주석처리를 해주니



(OK admin)



admin으로 로그인이 되었다.
이제 여기서 admin의 비밀번호를 찾으면 되는데
여기서 DB가 MsSQL이라는 것에 확신이 간 계기가 있었다.
MySQL에서 사용하던 함수들이 먹히지 않는 것들도 있다는 것이다.
예를들어 아래 Length() 함수가 MsSQL에서는 Len()으로 사용되는데 이러한 차이가 있었고
다시 찾아보면서 Injection하느라 조금 시간이 걸렸다.

DB별로 미묘한 차이들이 있으므로 정리해 둘 필요가 있는것 같다.

다시 문제로 돌아와서 먼저 비밀번호의 길이부터 구했다.



(Injection)



확인해보니 9보다 크고..



(Injection)



길이는 10글자였다.
이제 한글자씩 찾으면 된다.

물론 손으로 찾기는 힘드니 파이썬을 이용했다.
ascii나 hex, ord 가 가능했다면 손으로도 금방 찾긴했을테지만
전부 필터링 되어있으니
직접 하나하나 체크하는 수 밖에 없다.



(코드 작성)



코드 작성 후
돌려준다. :)





(문제 해결)



이렇게 문제를 해결했다. :)



'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 23  (0) 2017.03.30
SuNiNaTaS : Challenge WEB 8  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23


@8번
현재 7번은 서버 에러인지, 문제페이지에서 그 다음 페이지로 넘어가지지 않아서
8번으로 넘어가서 풀었다.
8번은 아주 단순한 문제였다.




(8번 문제)




(문제 화면)



로그인 우회 문제인가? Injection문제인가? 하고
신나게 해보다가 안되서 소스코드를 확인하였다.

확인해보면 힌트가 나와있다.




(힌트)



힌트는비밀번호 0부터 9999까지 라고 나와있다.
비밀번호를 그냥 0부터 9999까지 다 넣어보면 금방이겠는데? 라는 생각이 들었다.
이 문제 브루트 포스 문제인가?

파이썬을 이용하여 코드를 작성하였다.




(코드 작성)



프로그램을 실행시켜 확인해보니
순식간이다.



(실행 중 모습)



실행하다가 로그인이 된 순간 비밀번호가 나왔다. :)



(로그인 성공)



문제 해결!


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 23  (0) 2017.03.30
SuNiNaTaS : Challenge WEB 22  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23

@6번문제

생각보다 오래걸렸다. 너무 쉽게봤는데(그렇다고 어려운문제는 아닌것 같다.)

시간이 걸리는 문제였다.



(6번 문제)




(문제 화면)



문제 화면을 보면
README 라는 3번 게시물은 패스워드를 입력해야 들어갈 수 있었고
나머지는 그냥 글 들이었다. (알고보니 힌트들, 아닌것도 있지만)

3번 비밀번호 입력하는 팝업창이 뜨고 친절하게 보내지는 쿼리도 보여준다.



(비밀번호 입력창)



Injection이라면 조금 자신있어서 신나게 풀었다.
먼저 입력이 string이다.
필터링 되는 단어를 확인해 본다.




(sql injection)





(결과)



결과를 보니 #이 필터링 되고 있었고 다른 주석으로 -- 을 사용했다.





(다른 주석 사용)




(노필터링)



필터링 되지 않고 쿼리가 날라갔다. 이제 주석은 --을 사용할 것이다.
보통 MySQL에서는 1이 참이라고 인식되던데 False가 나와
1=1(참)로 바꿔서 입력해주었다.




(=필터링)



= 이 필터링 되고있다..ㅎㅎ

=은 like, in 등으로 대체할 수 있다.
그 중 쉽게 like를 써보았다.



(like로 대체)






(문제 해결?)



문제가 해결되었다.

뭔가 싱거운 기분이 들었다. 이게뭐야

하지만 지금부터 시작이라는걸 알았다.
이 인증키를 답에 입력해보니...



(틀림)



틀린다고 나온다. 답이 아니다...
뭐야..

아까 비밀번호 인증 성공 후 아래와 같은 팝업창이 떳었는데..




(접근 제어)



이 팝업창을 무시했었는데 아무래도 여기에 문제가 있었나보다.

접근 권한을 어디서 체크하겠는가. Cookie 값 혹은 SesssionID로 체크하니까

현재 cookie를 살펴보았다.




(쿠키값)



세션아이디도 있고, 인증키?도 적혀있다.
세션아이디는 아무래도 아이디 관련이 있는 거 같고
auth%5Fkey가 지금 제어당하고 있는 값인거 같다.




(인증키 설정)



인증키를 설정해준다! 아까 받았던거로
그러니 당연하다듯이 실패...

여기서 인증키를 변환해주어야한다

게시물중에 참조하라는 게시물이 있는데 그 게시물에 인코더 사이트가 들어있다.
인증키를 Encode해서 입력하라는 뜻인거 같다.
종류는 모르고...




(Base64로 인코딩)






(인증키 설정)



Base64부터 시작하여 저기 있는 방법으로 모두 해보았다.
그 결과 안된다.
심지어 저기 없는 방식으로도 했다. 다른 Encoder사이트 참조
안된다.

이유를 잘보니 키 인증값이 자꾸 %3F로 재설정된다.
그니까 넘겨줄때마다 계속 인증키를 다시 설정해야하는 것이었다.

그래서 여기서.. 툴을 쓰기로 했다:)
버프슈트를 이용해 인증키 변조
그리고 처음부터 다시시작(Base64부터...)

모든 인코딩을 해서 해본 결과 하나가 되긴한다.. :)




(인증키 변조)



성공하니 README의 게시물이 열렸다.




(게시물 오픈)



키를 찾으세요! 라는 문제가있다.

소스코드에 있나 하고 소스코드를 열어보았다.




(문제?)



이상한 action이 있는 form을 발견했다. 키 힌트가 로마의 첫번째 황제?

Rome's First Emperor 를 그대로 인터넷에 검색했다.
이게 답맞나... 싶었지만



(정답)



정답이었다..
:)


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 22  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 8  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23
SuNiNaTaS : Challenge WEB 3  (0) 2017.03.22



@ 5번문제
스크립트 관련된 문제였다.

난독화되어있는 스크립트에 대한 이해와
스크립트 동작만 할 줄 알면 쉽게 풀수 있는 문제다.



(5번문제)


(문제 화면)



처음에는 인젝션 문제인 줄 알았으나..
소스코드를 보고 잘못된 길에 빠질뻔 했다는 사실을 알았다.






(소스코드)



소스코드를 보면
<script> 태그안에 스크립트 코드가 적혀있는데 도통 무슨말인지 알아먹을 수가 없다.

스크립트 난독화를 이쁘게 정리해주는 사이트의 도움을 받았다.




(정리된 코드)



정리된 코드를 보니
마음이 차분해지고 편안해졌다.

정리된 스크립트 코드를 보니 입력에 대해서 어쩌구 연산을 통해 result를 return하고 있는 모습을 확인 할 수 있었다.

그리고 스크립트에서 정의된 PASS 함수가 어디서 실행되고 있는지 소스코드에서
샅샅이 찾았지만
찾을 수 없었다..
어디에도 없었다. 
그 때 든 생각 중 아래에 힌트가 숫자로 적혀있었는데
이 값을 함수의 입력으로 넣어준 값이 우리가 찾아야하는 결과값이 아닐까하는 
생각에 이르렀다.



(힌트)



바로 관리자 모드를 열어 콘솔에 입력해주었다.
함수 PASS를 바로 입력하니 정의되있지 않은 함수라고 나와서

난독화를 푼 스크립트 코드를 이용해 변수와 함수를 정의해주었다.




(변수, 함수 정의)



그리고 PASS 함수를 힌트를 입력하여 실행하니 코드가 나왔다.






(함수 실행)



그 코드를 입력값에 넣어 체크를 해보니
인증키가 나왔다. :)


(인증키 획득)


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 8  (0) 2017.03.29
SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23
SuNiNaTaS : Challenge WEB 3  (0) 2017.03.22
SuNiNaTaS : Challenge WEB 2  (0) 2017.03.22



@4번문제
소감을 말하자면 쉬웠다 :)
툴을 이용하긴했지만 괜히 이용했다는 생각이 들었다.




(4번문제)



문제화면이다.



(문제화면)



문제화면을 보면 User-Agent 가 나온다.
힌트인가 싶다.

소스보기! 를 보니 힌트가 들어있다.



(힌트)



point를 50으로 만들고 SuNiNaTaS?
서니나타스는뭐지
Plus 버튼을 눌러보니 포인트가 1씩 올라간다.

설마 이렇게 50까지 하는건 아니겠지.



(포인트 증가)



그런데 25에서 막혔다.
25에서 Plus를 누르니..




(서나나타스브라우저?)



나는 서니나타스 브라우저가 좋아요 라고 나온다.
서니나타스 브라우저는 또 뭐야..

스크립트로 25이상부터는 막혀있나?
그러면 폼에 내용만 50으로 바꿔서 보내면 되겠군!(나의생각)

폼을 만들기는 귀찮으니 관리자 모드에서 직접 수정해주었다.




(50으로 수정)



그러니 total 값이 50으로 바뀌는 것을 확인했고
이대로 전송버튼을 눌러 전송했다.


(전송)



안된다...

잠시 바람을 쐬고 온 후
다시 시도해보았다.
Plus 버튼을 누르면 1씩 올라간다.




(1씩 증가)



그러다가 25가 되면 서니나타스 브라우저를 원한다..



(서니나타스 애용자)



User-Agent가 브라우저를 나타내는 헤더값이니까 이 부분을 조작하면 되겠네

파이썬으로 코드를 짤까 싶다가
한번 툴을 써보는 차원에서 버프 슈트를 이용했다.
버프슈트의 프록시 기능을 이용해 값을 변조했다.



(User-Agent 조작)



조작하고
아! total 값도 50으로 바꿔주었다.




(total 값 조작)



이 후 실패하였다.

이 이유는 느낌이 왔다. 아까 포인트를 50으로 조작해서 보냈었는데 1씩 증가하더라..

서버에 내 포인트 값이 저장되어있는 듯 했다.
그렇기에 내가 total 값을 조작해서 보내도 +1 씩 해서 보내주었다.

이렇게 남은 25번을 시도하여 풀게 되었다.

40번 즈음에 든 생각은
파이썬으로 50번 돌릴껄이라는 생각과 함께
문제가 풀렸다.



(문제 해결)





'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 3  (0) 2017.03.22
SuNiNaTaS : Challenge WEB 2  (0) 2017.03.22
SuNiNaTaS : Challenge WEB 1  (0) 2017.03.22



@ 3번문제!


(3번 문제)


아래는 문제화면이다.




(문제화면)



..?
게시판 관련 문제인가 해서 이 페이지 어딘가에 게시판이 숨겨진 줄 알았다..

소스코드로 확인해보니



(소스코드)



그런 거 같지도 않다..

페이지 문구는 공지사항에 글을 올려보라고 되어있다.
공지사항에 글을?

공지사항 게시판에 들어갔다.




(공지사항 페이지)



역시나! 글쓰기 버튼이 없다.

혹시 소스코드에 글쓰기 페이지가 숨겨져있을까?
소스코드를 확인했다.



(게시판 url)



확인해보니 건진건 위에 url 이었다.

divi라는 변수에 notice라고 누가봐도 공지사항을 나타내기 위한 변수였다.
divi라는 변수에 notice라고 되있으면 되고.. list 페이지가 있으니
write 어쩌구 페이지도 있지 않을까?
그 페이지에서 변수를 notice로 주면 공지사항에 글을 올릴 수 있지 않을까?
하는게 나의 생각이었다.

먼저 글을 쓸수 있는 페이지를 확인하기 위하여
자유게시판에 들어갔다.





(글쓰기 클릭)



글쓰기를 클릭하고 url을 확인해 보았다.




(글쓰기 페이지 url)



역시! :)

write.asp 페이지다.
게다가 변수 divi가 보인다.
divi 변수에 Free 라고 자유게시판 DB로 넘겨주는 작업을 하는 코드가
write.asp 페이지에 적혀있지 않을까하는 생각이 든다.

그렇다면 나는 divi변수에 notice를 입력하여 다시 접속!




(divi=notice)



공지사항 글쓰기로 바뀌었다.. ㅎㅎ

여기서 글을 쓰면 공지사항에 글이 올라가려나?..




(공지사항 글쓰기)



테스트 해본다!




(테스트)



글쓰기!

??


(인증코드 등장)



인증코드가 나왔다.

확인해보니 역시 공지사항에 글이 올라가진 않고
다만 저렇게 문제를 풀 수 있도록 인증키만 제공하는 듯 했다.


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23
SuNiNaTaS : Challenge WEB 2  (0) 2017.03.22
SuNiNaTaS : Challenge WEB 1  (0) 2017.03.22


@ 2번 문제이다.



(2번 문제)



(문제 화면)



문제를 보고
음... sql injection을 통한 로그인 우회 문제인가?
라는 생각이 들어 여러 시도를 했다..


(인젝션 시도)



이것저것 인젝션을 해본 뒤
어떻게 된거야 온갖 상상을 해보았다.

그 후 이 페이지의 소스코드를 확인해보았다.
(소스코드를 보는 것이 우선이다..)
소스코드를 보니 스크립트가 적혀져있었다. + 문제의 힌트와 함께




(스크립트)



스크립트의 내용은 id와 비밀번호를 갖게 입력하면
빠꾸 먹는다.
하지만 힌트를 보면 아이디와 비밀번호를 같게 입력해야된다고 알려주고있다.

즉 이 문제는 스크립트 우회 문제이다.

form 문을 하나 만들어서 내가 따로 보내줘야지 라는 생각이 들었다.




(내가 만든 form)



value를 같게 설정해준 뒤
전송버튼을 눌러서 보내줄 생각이다.




(콘솔에 입력!)





(버튼 클릭)



여기서 저 버튼을 클릭하면 된다.
위 캡쳐에서는 못찍었지만 form 태그에 action에 /Part_one/web02/web02.asp를 찍어주든가.
아니면 그 페이지 내에서 콘솔에 입력하여 폼문을 전달해줘야한다.

전달해주면 아래와 같이 답이 나오게 된다.




(정답)






'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23
SuNiNaTaS : Challenge WEB 3  (0) 2017.03.22
SuNiNaTaS : Challenge WEB 1  (0) 2017.03.22



- 요새 기사준비하느라
  오랜만에 포스팅하는 글이다 :)

최근 다양한 워게임 사이트를 풀면서 전부다 올리고 싶었지만 정리도해야하고 아직 못올린게 많다ㅜㅜ

오늘은 기사 공부하다가 기분전환겸.. 서니나타스 사이트를 풀어 글을 쓰려한다.
너무 쉬운건 안올릴까하다가 조금 완전성(?) 있게 모든 문제를 올려보고 싶어서 1번 부터 쓴다 :)

서니나타스의 1번 문제!




(문제1)



아래는 문제 화면이다.



(문제 화면)



알고보니 너무... 간단한 문제였는데
혼자 심각해서 엉뚱땅을 파 시간이 걸렸다..
위에 있는 코드는 ASP코드이다.
(이 사실을 난 몰랐었다....ㅜㅜ)
(신기하다ㅎㅎ)

나는 처음에 위에 & 기호가 & 연산을 하라는 줄 알았다...
그래서.. &연산의 특징을 테스트해보았다.



(&연산 테스트)


저번에 테스트해볼때는 교환법칙이 성립되었는데
이번에 뭔진 모르겠지만
C = A & B
C = C & B ?... 

무튼 이런 고민에 휩싸였을 때
& 기호가 그냥 문자열을 합치는 기호면 어이없겠다 라는 생각이 들었다.

즉.. 치환하기 전 결과에서
2번째부터 2글자
4번째부터 6글자.
@admin@@@@@
이런 식으로 나오게 하면 된다.

위 치환과정을 생각해서 답을 생각하면
i -> in
@admi

a -> aad
ami

ami 로 입력하면
aadmin이 되고

결과가 admin이 된다..



(ami 입력)



(해결)



허무했던 문제ㅎㅎ


'WarGame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS : Challenge WEB 6  (0) 2017.03.28
SuNiNaTaS : Challenge WEB 5  (0) 2017.03.27
SuNiNaTaS : Challenge WEB 4  (2) 2017.03.23
SuNiNaTaS : Challenge WEB 3  (0) 2017.03.22
SuNiNaTaS : Challenge WEB 2  (0) 2017.03.22

+ Recent posts