'Wargame'에 해당되는 글 454건


wargame.kr 20번 lonely guys 라는 문제다.

점수는 700point.

ordey by를 이용한 블라인드 인젝션 문제인 것 같다. 시작해보자.

흠.. 일단 보니 reg_single이라는 버튼을 누르면 asc desc 방식으로 쿼리를 넘겨 정렬이 되는 것 같다.

소스부터 확인해보자.

보아하니 order by 절뒤에 sort를 통해 값을 줘 쿼리를 만들 수 있을 것 같다.

order by에 대해 좀 찾아보니 칼럼명 대신 (1) , (2), (3) 과 같은 방식으로 숫자로 치환하여 사용이 가능

하다고 한다.

이를 활용하면 서브쿼리를 저 안에 넣어 블라인드 인젝션이 가능할 것 같다.

여기까진 잘 추론을 했는데 처음에 서브쿼리 특성을 정확히 모른채로 풀다가 엄한데서 에러찾고 엄청난 삽질.....하...역시 배워야 산다...

일단 제일 먼저 if문을 통해 간단히 참 거짓을 찾아 시도해 봤으나 실패.... 삽질하다 찾아보니 ordey by 절에서는 if문이 안통하는 것 같다....

그래서 sleep()함수를 써서 time base 기반의 블라인드 인젝션을 시도해봤다. 

코드는 필자가 짠 파이썬 스크립트이다.

먼저 키 값의 길이를 뱉어주고 다음으로 키 값을 뱉어낸다.

하.. 파이썬 2점대 버전이아니고 3점대 버전에서 하다보니 예상치 못한 오류가 너무 많았다.

코드보고 보고 이해 안되시는 부분은 문의해주시면 답변해드리겠습니다.

어쨌든 성공!!


휴..
이거한다고 또 엄청난 삽질......막상 하고 보면 별거아니었는데 하루를 거의 다 써버렸다... 후... 디비건

언어건 역시 아직 너무 많이 부족하다...제일 중요한  아이디어를 떠올려도 구현하는데 너무 오랜시간이

걸린다 ㅠㅠ 아직 처음이라 그런거라 믿고 싶다.

끈임없이 공부해서 빨리 실력을 더 키워야 할 것 같다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr QNA  (0) 2018.01.04
wargame.kr phc? c?  (0) 2018.01.04
wargame.kr lonely guys  (0) 2018.01.04
wargame.kr dmbs335  (0) 2018.01.04
wargame.kr crack crack crack it!  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 20번 lonely guys 라는 문제다.

점수는 700point.

ordey by를 이용한 블라인드 인젝션 문제인 것 같다. 시작해보자.

흠.. 일단 보니 reg_single이라는 버튼을 누르면 asc desc 방식으로 쿼리를 넘겨 정렬이 되는 것 같다.

소스부터 확인해보자.

보아하니 order by 절뒤에 sort를 통해 값을 줘 쿼리를 만들 수 있을 것 같다.

order by에 대해 좀 찾아보니 칼럼명 대신 (1) , (2), (3) 과 같은 방식으로 숫자로 치환하여 사용이 가능

하다고 한다.

이를 활용하면 서브쿼리를 저 안에 넣어 블라인드 인젝션이 가능할 것 같다.

여기까진 잘 추론을 했는데 처음에 서브쿼리 특성을 정확히 모른채로 풀다가 엄한데서 에러찾고 엄청난 삽질.....하...역시 배워야 산다...

일단 제일 먼저 if문을 통해 간단히 참 거짓을 찾아 시도해 봤으나 실패.... 삽질하다 찾아보니 ordey by 절에서는 if문이 안통하는 것 같다....

그래서 sleep()함수를 써서 time base 기반의 블라인드 인젝션을 시도해봤다. 

코드는 필자가 짠 파이썬 스크립트이다.

먼저 키 값의 길이를 뱉어주고 다음으로 키 값을 뱉어낸다.

하.. 파이썬 2점대 버전이아니고 3점대 버전에서 하다보니 예상치 못한 오류가 너무 많았다.

코드보고 보고 이해 안되시는 부분은 문의해주시면 답변해드리겠습니다.

어쨌든 성공!!


휴..
이거한다고 또 엄청난 삽질......막상 하고 보면 별거아니었는데 하루를 거의 다 써버렸다... 후... 디비건

언어건 역시 아직 너무 많이 부족하다...제일 중요한  아이디어를 떠올려도 구현하는데 너무 오랜시간이

걸린다 ㅠㅠ 아직 처음이라 그런거라 믿고 싶다.

끈임없이 공부해서 빨리 실력을 더 키워야 할 것 같다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr phc? c?  (0) 2018.01.04
wargame.kr ip log table  (0) 2018.01.04
wargame.kr dmbs335  (0) 2018.01.04
wargame.kr crack crack crack it!  (0) 2018.01.04
wargame.kr img recovery  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 19번 dmbs335 라는 문제다.

점수는 700point. 점수가 올랐다. 살짝 긴장이 된다.

sql injection 문제인 것 같다. 시작해보자.

흠... 검색 가능한 게시판이 보인다. 검색어로 sql injection이 이루어질 것 같다.

소스부터 확인해보자.


일단 먼저 select 구문에 $where_clause라는 변수를 통해 입력이 가능할 것 같다.

그렇다면 이 변수의 값을 원하는 값으로 넣어줘야하는데 관련된 소스를 찾아봤다.

보아하니 query_parts라는 변수가 존재하면 이 변수의 값을 통해 where_clause의 값이 정해지는 것 같

고 query_parts는 col이란 변수가 존재하면 값이 만들어 지는 것 같다.

그렇다면 col의 값을 매칭되지 않는 값으로 넘겨 존재하지 않게 만들고 query_parts의 값을 내가 원하는 쿼리값으로 만들면 성공적으로 sql injection이 일어날 것 같다.

그렇다면 query_parts의 값을 원하는 값으로 만들어야 되는데 자세히보니 url 값이 넘어올 때 parse_str란 함수가 씌워진다. 뭔가 하고 찾아봤더니 url값을 받아 변수로 만들어 주는 함수란다.

그렇다면 이 함수를 통해 임의로 col의 값을 매칭되지 않는 값으로 변조하고 query_parts의 내가 원하는 값으로 추가해버리면 될 것 같다.

burp suit를 키고 url값에 1 union select 1,2,3,4 # 을 줘봤다. 정상적으로 나온다.

그렇다면 이제 할 일은 정해졌다. simpleboard 문제에서 썻던 쿼리를 거의 그대로 가져다 썻다.

먼저 1 union select table_name,2,3,4 from information_schema.tables # 쿼리를 주고 테이블을 구한다.

다음으로 플래그를 구한다.
1 union select column_name,2,3,4 from information_schema.columns where table_name='Th1s_1s_Flag_tbl'#

마지막으로 플래그를 구한다.
1 union select f1ag,2,3,4 from Th1s_1s_Flag_tbl #

성공! 점수가 올라서 살짝 기대했는데 생각보다 쉬워서 맥이 빠졌던 문제.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr ip log table  (0) 2018.01.04
wargame.kr lonely guys  (0) 2018.01.04
wargame.kr crack crack crack it!  (0) 2018.01.04
wargame.kr img recovery  (0) 2018.01.04
wargame.kr pyc decompile  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 18번 crack crack crack it! 이라는 문제다

점수는 650 point.

.htaccess 라는 파일을 bruteforce attack 하라는 것 같다.


흠... 일단 패스워드 파일을 다운받아야 할 것 같다.

파일을 열어보니 md5 방식으로 암호화 되어 있는 것 같다.

john the ripper란 brute force attack 툴로 크랙하면 될 것 같다.

자 그럼 사용자가 줬던 G4HeulB로 시작하고 나머지는 알파벳 소문자와 숫자만 존재한다는 힌트를 감안

하여 wordlist를 넘겨 줄 간단한 파이썬 스크립트를 짜면 될 것 같다.

max 값은 총 몇자인지 확실히 몰라 대충 6주고 시작해봤는데 뒤에 추가될 부분이 6개이하라 한번에 성공했다.

이제 존더리퍼로 사용하면 다음과 같이 G4HeulBzb11이라는 비밀번호가 크랙됬다.


홈페이지에 가서 키를 입력해봤다.


성공!


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr lonely guys  (0) 2018.01.04
wargame.kr dmbs335  (0) 2018.01.04
wargame.kr img recovery  (0) 2018.01.04
wargame.kr pyc decompile  (0) 2018.01.04
wargame.kr web chatting  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr img recovery

2018. 1. 4. 17:00

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


wargame.kr 16번 pyc decompile 풀이

점수는 650 point.!

pyc형식에 파일을 디컴파일 하라는 것 같다. 시작해보자.

파일을 먼저 다운로드 받자.


먼저 pyc라는 형식은 처음봤는데 찾아보니 파이썬 소스코드르 숨기고 import 시 속도 향상을 시켜줄 수 있는 파이썬 파일 인 것 같다.

그럼 이제 디컴파일 해주는 프로그램을 통해 소스를 확인하자.


흠.. 생각보다 간단한데? 현재 시간을 가지고 구한 값을 플래그 값으로 서버로 넘기면 될 것 같다.

GIVE_ME_FLAG()가 호출되면 ok값을 리턴하도록 수정하고 쿼리를 줘봤다.


...? 왜...? 

시도해보니 실패했다고 알려준다. ..? 문제가 없는데.. 뭔가하다 자세히 보니 로컬시간이랑 서버에서의

시간이 11분 정도 차이가 났다. 코드를 수정해 봤다.


다시 한번 시도해 봤다.


성공! 이전 문제에서 애썻던거에 비하면 너무쉽게 해결한 문제였다. 뭔가 허무...?

어쨌든 다음으로 넘어가 보자.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr crack crack crack it!  (0) 2018.01.04
wargame.kr img recovery  (0) 2018.01.04
wargame.kr web chatting  (0) 2018.01.04
wargame.kr SimpleBoard  (0) 2018.01.04
wargame.kr tmitter  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 15번 web chatting 이라는 문제다.

점수는 650 point! 점수가 올랐다. 이전문제에서 애를 좀 썻는데 이번에도 뭔가 만만치 않을 것 같다.

흠.. 일단 SQLi 문제인 것 같다. 개발자의 관점에서 트래픽을 줄일 수 있도록 설정하라는 것 같다.

긴말말고 시작해보자.


들어가보면 간단한 채팅 프로그램이 나온다.


sql injection을 하랬는데 아직까진 딱히 감이 오지는 않는다. 소스부터 확인해보자.

흠.. 보아하니 xml http 사용해 ajax를 구현한 것 같다.

자 천천히 분석을 시작해보자.

 function getchatlog(type){
  xmlhttp = new XMLHttpRequest();
  if(type==1){xmlhttp.onreadystatechange=getni;xmlhttp.open("GET","chatlog.php?t=1");
  }else if(type==2){xmlhttp.onreadystatechange=chatprint;xmlhttp.open("GET","chatview.php?t=1&ni="+ni);}
  xmlhttp.send(null);
 }

일단 chatlog.php?t=1 로 값을 넘기는 게 보인다. 일단한번 들어가보자.


일단 뭔진 모르겠지만 무슨 값이 보인다.

xmlhttp.onreadystatechange=getni를 통해 데이터 넘기고 응답값을 받는 부분을 확인해 봤다.

function getni(){
  if(xmlhttp.readyState==4 && xmlhttp.status==200){
   var tni=parseInt(xmlhttp.responseText);
   if(tni!=ni && iq!=0){getchatlog(2);}
   ni=tni;iq=1;
  }
 }

응답시 실행되는 getni함수를 통해

xmlhttp.open("GET","chatview.php?t=1&ni="+ni) 부분이 호출되고 ni값으로 대충
chatlog.php?t=1 입력했을때 출력된 값이 들어가는 걸로 보인다.

확실하진 않지만 일단 한번 chatview.php?t=1&ni="+ni 로 입력해봤다.

...? 틀린 것 같다 아무것도 출력이 안된다.

뭘까.. 저 숫자가..... 한참 고민하다 채팅을 하나더 쳐봤다.

그리고 다시 들어가보니 숫자가 1이 늘어있다.

뭔가 채팅이 저장된 마지막 번호 같은데 쿼리로 입력해봐도 별 다른 출력이 없어 멘붕....

이것 저것 해보다 ni입력값을 출력된 번호보다 낮게 입력했더니 다음과 같이 이전에 썻던 채팅 목록이 나온다.

 


대충 sql문이 어떤식으로 만들어 졌는지 감이 온다.

select * from table_name where ni > $_GET[ni] 이런식으로 출력되는 것 같다.

그러면 여기서 t=1&ni=22148 or 1=1 # 이런식으로 입력이 가능해 보인다.

모든 값이 출력된다.

union sql injection이 가능할 것 같다.

이것 저것 시도해보다 필드가 5개일때 정상 출력되는 걸 확인할 수 있었다. 주석처리가 #은 안먹히고 --은 먹히는걸 확인 할 수 있었다.

t=1&ni=22148 union select 1234567891011,1234567891011,1234567891011,1234567891011,1234567891011 --

라고 쿼리를 주고 전체 페이지에서 1234567891011을 검색해 봤다.

화면 맨 밑에 3개의 필드가 표시되는걸 볼 수 있었다. 다시한번 정확한 위치 확인을 위해

t=1&ni=22148 union select 1,2,3,4,5 -- 로 다시 쿼리를 줬다.

2,3,5번째 필드를 통해 플래그 값을 구할 수 있을 것 같다.

먼저 플래그가 있을만한 테이블부터 찾아보자.

t=1&ni=22148 union select 1,table_name, 3,4,5 from information_schema.tables  --

쿼리를 줘보니

chat_log_secret이라는 수상한 테이블이름이 보인다.

다음으로 컬럼을 확인해보자.

t=1&ni=22148 union select 1,column_name, 3,4,5 from information_schema.columns --

쿼리를 줘보니

readme라는 익숙한 필드가 보인다.

이제 테이블과 필드를 가지고 플래그값을 구해보자.

t=1&ni=22148 union select 1,README,3,4,5 from chat_log_secret --


성공 !!

xml http 형식의 ajax 코드를 처음봐서 처음에 살짝 당황했던 문제.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr img recovery  (0) 2018.01.04
wargame.kr pyc decompile  (0) 2018.01.04
wargame.kr SimpleBoard  (0) 2018.01.04
wargame.kr tmitter  (0) 2018.01.04
wargame.kr type confusion  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 14번 SimpleBoard 라는 문제다.

점수는 600point!

Union SQL injection을 하라는 것 같다. 스크립트도 만들어야 할 것 같은 느낌이든다.

시작해보자.

흠...첫화면에서 조회수를 클릭하면 조회수가 1증가하는 것 같다. 소스부터 보자.

여기까진 정확히 뭘 원하는지 모르겠다.

일단 소스부터보자.

소스가 지금까지 문제들 보단 좀 복잡한 느낌이다. 캡처본 말고도 더 많은 코드가 있는데 일단 분석하면

서 중요하게 본 부분만 따왔다.

php를 따로 공부해본적이 없어서 분석하는데 꽤나 고생을 했다......

전체적인 동작은 쿠키값을 이용해 입력받은 idx 번호가 쿠키에 존재하는 값이면 조회수가 증가하지 않고

쿠키에 존재하지 않는 값이면 1증가하는 방식인 것 같다.

이 중에서

return $this->db->get_query("select * from {$this->table} where idx=$idx");

이부분이 눈길이 간다. 일단 single quote가 없다. 힌트에서도 union sql injection 쓰라 했으니 url로

가볍게 값을 넘기면 될 것 같다. 근데 아니었다. 뭔가 이상하다. 1개부터 20개까지 넣어 봤는데 무조건

에러가 뜬다. 멘붕이 오기 시작했다.


코드를 천천히 다시 분석해봤다.

public function read($idx){
            $idx = mysql_real_escape_string($idx);
            if ($this->read_chk($idx) == false){
                $this->inc_hit($idx);
            }
            return $this->db->get_query("select * from {$this->table} where idx=$idx");
        }

일단 입력 준 5 union select 1,2,3,4# 이란 코드가

return $this->db->get_query("select * from {$this->table} where idx=$idx");

에서 실행되는데는 전혀 문제가 없는 것 같다. 그렇다면 그 전에 inc_hit()함수가 호출되면서 뭔가 에러

가 생기는 것 같다.

   private function read_chk($idx){
            if(strpos($_COOKIE['view'], "/".$idx) !== false) {
                return true;
            } else {
                return false;
            }
        }

private function inc_hit($idx){
            $this->db->just_query("update {$this->table} set hit = hit+1 where idx=$idx");
            $view = $_COOKIE['view'] . "/" . $idx;
            setcookie("view", $view, time()+3600, "/SimpleBoard/");
        }
일단 inc_hit() 함수가 호출되려면 read_chk()함수가 호출되야 한다. 뭘 하는가 봤더니 쿠키값에 입력한 idx 값이 있는지를 검사한다. 값이 없어야만 조건이 성립되어 inc_hit()함수로 넘어가 조회수가 1 올라가는 형태인 것 같다. 그렇다면 내가 입력한 5 union select 1,2,3,4# 값은 당연히 쿠키에 저장이 되어 있지 않을테니 최초에 inc_hit()로 넘어갈 것이고 update문이 실행될 것이다. 문제는 여기다. 여기서 에러가 발생하는 것 같다. 그래서 다음코드로 못넘어가고 위에
 $this->db->get_query("select * from {$this->table} where idx=$idx");
부분이 실행이 안되 예상처럼 union sql injection 이 안먹히는 것 같다. php 및 디비 관련 지식이 완전하지 않고 이 문제에 대해 풀이를 여러 글들을 봤는데 잘하시는 분들한텐 너무 당연해서 딱히 설명을 안하셨는지 url로 union sql injection 값을 넘겼을 때 무조건적으로 에러가 나는 이유가 나와있지 않아서 확실한진 모르지만 스스로 분석을 해봤다.

그렇다면 이걸 바탕으로 분석해보자. 일단 위에 상태라면 쿠키값에는 update문에서의 에러 때문에 입력한 5 union select 1,2,3,4#값이 들어갈 수 가 없다. 그래서 계속 시도해봤자 저 구문에서 막히고 말 것이다. 그렇다면 쿠키값에 애초에 5 union select 1,2,3,4#값이 들어있다면?
 if ($this->read_chk($idx) == false) 부분에서 조건이 성립이 안되  inc_hit()이 실행이 안된 상태로
$this->db->get_query("select * from {$this->table} where idx=$idx"); 먹히게 된다.

자. 해야 될 건 다 끝났다 한번 생각한 것이 맞는지 시도해보자.

burp suit를 켜고 쿠키값에 /5 union select 1,2,3,4#을 넣어 준후 다시한번 url sql injection을 시도해보자.


휴... 드디어 성공.. 알고보면 정말 간단한 패턴인데 아직 웹쪽 언어에 대해 정말 많이 부족하다고 느꼈다. 근데 이게 끝이 아니다. 이제 시작... ㅎㅎ

쿠키값과 쿼리 입력 값을 맞추면 union sql injection이 가능한데 이걸 수동으로 하면 너무 오래걸리고 귀찮은 작업이다.  그래서 간단한 파이썬 스크립트를 작성했다.


이제 5 union select table_name, table_type, 3, 4 from information_schema.tables limit 1,1# 방식으로 limit 1,1 값을 하나씩 올려보자.

쭉 하다보니 40번째에서 README 라는 수상한 테이블이 발견됬다. 힘드네... 이거까지 스크립트 만들어 돌리기엔 너무 머리가 아파서 수동으로 했다. 휴... 근데 너무 뒤에나옴..ㅠ


그럼 이번엔  5 union select column_name, data_type, 3, 4 from information_schema.columns where table_name='README'# 입력해보자. 끝이 보인다...

...? 에러가 뜬다. 아.. 생각해보니 소스에서 escape했던게 기억이 난다. 'README'를 hex 값으로 바꿔 전송해보자.

 5 union select column_name, data_type, 3, 4 from information_schema.columns where table_name=0x524541444d45# 입력


flag라는 컬럼 발견.......하 다왔다 진짜.

5 union select flag, 2, 3, 4 from REAME# 입력

405cf51a2791003d336843ced53270b0f625388d
나왔다 드디어 ........... 성공!!

시작하는 단계라 문제 푸는 동안 배워야할 지식이 많아 지금까지 문제에 비해 많은 시간을 투자한 것 같다. 시간이 걸린만큼 배워가는 개념들이 많았던 문제이다. 아직 갈길이 멀다는걸 또한번 느낀 문제였다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr pyc decompile  (0) 2018.01.04
wargame.kr web chatting  (0) 2018.01.04
wargame.kr tmitter  (0) 2018.01.04
wargame.kr type confusion  (0) 2018.01.04
wargame.kr strcmp  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 13번 tmitter 라는 문제다.

점수는 600point!

데이터베이스 정보를 주고 이를 참고해 admin으로 로그인 하라는 것 같다. 시작해보자.

아이디를 등록하는 화면이다.

일단 admin으로 로그인 하랬으니까 admin사용자를 한번 등록해봤다.

? 이미 있다네? 그러면 sql injection으로 로그인하라는 건가..? 흠... 일단 소스부터 보자.


별다른게 없다. sql 구문도 딱히 안보이고 소스만보고는 도통 뭐하라는건지 모르겠다.

생각해보니 처음에 힌트에서 데이터베이스 테이블 구조를 알려줬었다.

admin이 등록되는 id 부분이 primary key가 아니라 별 문제없이 중복 등록이 되어야 된다고 생각했다.

근데 안된다. 데이터베이스에서 막는게 아니라면 숨겨진 php소스 어딘가에서 테이블에 값을 넣기 전에 입력된 값과 테이블에 존재하는 admin 사용자를 비교해 중복등록를 해서 막는 것 같다.  

그러면 입력된 값이 쿼리에 등록되려면 admin이라는 값과 비교할때는 다른 값으로 들어와 동일한지 체크 하는 과정을 넘어가고 쿼리에 등록될 때는 admin사용자인 것처럼 등록되록 하면 될 것 같다.

말이 쉽지 처음엔 이걸 어떤식으로 해야 될지 감이 안왔다. 일단 구글링.

찾아보니 데이터베이스에 데이터를 삽입할때 지정한 크기 이상의 값이 들어가면 초과된 부분은 잘라내고 trim함수가 적용되어 오른쪽 공백이 싹 다 날라가게 설정이 되어있단다.

이를 활용해 입력시 admin                           1이런 방식으로 지정된 크기인 32바이트까지는 공백을 주고 그 이후에 다른 값을 줘봤다. 이런식으로 등록하면 php코드 상에서 비교할 때에는 다른 값이라 체크가 통과되지만 이 값이 sql 쿼리로 넘어갈때 뒤에 초과된 부분과 공백부분이 잘려 php에서 체크하는 필터링을 우회해 중복 등록이 되는 것 같다.

전체적은 흐름은 문제에서 제공해주는 소스에는 보이지 않는 부분이라 대충 이럴거라 유추해본 거라 정확하지 않을 수 있다. 이 문제에서 원하는 핵심 포인트는 데이터베이스의 저런 특성을 알게 하는 것 인 것 같다.

php 상에서  입력값에 길이 제한을 주었기 때문에 burp suit 켰다.

id 값을 변조해서 입력

admin 존재한다는 에러화면이 아닌 정상 로그인 화면이 나타난다. 로그인 시도!


정상적으로 성공하였다. 데이터베이스에 저런 취약점이 존재하는지 새로 알게 되었다.


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr web chatting  (0) 2018.01.04
wargame.kr SimpleBoard  (0) 2018.01.04
wargame.kr type confusion  (0) 2018.01.04
wargame.kr strcmp  (0) 2018.01.04
wargame.kr EASY_Crackme  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,

wargame.kr 12번 type confusioin 라는 문제다.

점수는 550point.!

읽어보니 뭔가 비교를 하라는거 같은데 type confusion 이라는 것과 관련이 있는 것 같다.

일단 시작해보자.


긴말없이 소스부터 확인해보자.

흠.. 보아하니 json 타입으로 입력받은 값을 디코딩한 후 json의 키 값과 genykey()라는 함수를 통해 sha1 방식을 통한 hash 값이 같아야 플래그 값이 얻어지는 것 같다.

따로 플래그 값을 출력해 주는 부분이 보이지 않는다.

./util.js 라는 파일이 실행되는 걸로 봐서 뭔가 있을 것 같다. 확인해보자. 


데이터를 넘길때 json 방식으로 값을 넘기고 code부분이 true가 되면 플래그 값이 출력하는 것 같다.

즉,  if ($json->key == $key) 이 부분이 참이되서 code==>true가 성립되면 플래그 값이 정상적으로 출력 되는 것 같다.

그럼 이제 저 구문을 참으로 만들어야 하는데 sha1 방식의 hash 값이랑 같은 키 값을 만드는 건 힘들어 보인다. sleep 함수로 brute force까지 차단시켜 놓았다.

type confusion라는 걸 참고하라 했으니 일단 이게 뭔지부터 찾아보자.

찾아보니 type confusion 취약점이라고 객체의 타입(type)을 혼동하여 나는 오류 및 취약점. 이란다.

그럼 ==가 php에서 느슨한 비교를 하기 때문에 json의 key값을 문자열과 ==로 비교했을때 반드시
TRUE 값이 나오는 값으로 변조해서 보내면 될 것 같다.


참고해본결과 문자열은 TRUE라는 값과 비교하면 반드시 TRUE가 된다.

자 그러면 json의 값을 변조해서 보내는 일만 남았다.

burp suite 를 키고 아무 값이나 넣어서 일단 보내보자.

..? url 인코딩된 값이 보인다. 아 소스에서 디코딩해서 썻었지.ㅎ

url 디코딩 후 보내는 키 값을 "test"에서 true로 바꿔 보냈다. 이렇게 보내게 되면 type confusion 취약

점으로 인해 ==가 느슨한 비교를 하게 되어 결과 값이 true가 되어 플래그가 얻어진다. 

성공! 


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr SimpleBoard  (0) 2018.01.04
wargame.kr tmitter  (0) 2018.01.04
wargame.kr strcmp  (0) 2018.01.04
wargame.kr EASY_Crackme  (0) 2018.01.04
wargame.kr md5 password  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,