Webhacking.kr 150점 write-up
Wargame/webhacking.kr

Webhacking.kr 150점 write-up

old 19.

admin으로 로그인해야 풀리는 문제이다.

다른 id로 로그인 해봤는데 계속 5글자에서 잘린다.

일단 admin이 안되니 아무거나 입력해서 로그인해보자.

로그인 하니 userid라는 쿠키값을 확인할 수 있다.

굉장히 복잡하게되어있다. 값이 인코딩되어있는 것 같다.

그리고 로그아웃 해보자. 어라, 로그아웃이 안된다!!!

문제가 뭘까..고심을 열심히 해보았다. 소스도 건드려보고(location.href..뻘짓이었음).. 그러다가 hit문제를 푼게 생각이 나서 쿠키를 없애보았다.=> user 정보를 없앨 수 있었다.=> 로그아웃 성공! 하지만 별 도움은 안됨..

=> 쿠키가 base64로 인코딩된거 아닐까? 해서 디코딩해봤는데 안됐다. base64가 아니었다.

일단 aaaaa로 입력해보았다.

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjEwY2MxNzViOWMwZjFiNmE4MzFjMzk5ZTI2OTc3MjY2MTBjYzE3NWI5YzBmMWI2YTgzMWMzOTllMjY5NzcyNjYxMGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjEwY2MxNzViOWMwZjFiNmE4MzFjMzk5ZTI2OTc3MjY2MQ%3D%3D

같은 반복되는 부분이 있지 않을까? 눈알이 빠질뻔했다. 못찾겠다.

replace str하던 때를 생각해봤다. 그거랑 비슷하게 조합해보면 되지 않을까 싶었다,

그럼 일단 admin은 안되니까 admim까지만 입력해보고, n은 나머지 뒤에서 찾아보자.

MGNjMTc1YjljMGYxYjZhOD/MxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5/MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFi/ODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE%3D=>admi

MGNjMTc1YjljMGYxYjZhOD/MxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5/MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFi/ODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE/2ZjhmNTc3MTUwOTBkYTI2MzI0NTM5ODhkOWExNTAxYg%3D%3D=>admim

MGNjMTc1YjljMGYxYjZhOD/MxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5/MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFi/MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2Nj/E3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ%3D%3D=>adman

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFi/MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2Nj/E4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZA%3D%3D=>admad

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFi/ODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ%3D%3D=>admin완성.

 

쿠키 굽고, 새로고침하면 pwned. => url을 바꾸는 방법, maxlength 바꾸는 방법도 있음.

 

old 25.

아무런 생각이 안났다.. flag is in the code라는 것만 발견할수 있었다.

삭님에게 sos를 쳤더니 php wrapper 취약점이라는 것을 살펴보라고 하셨다.

빠르게 검색해보도록 하자.=> lfi 취약점을 이용한다고 한다. lfi+php wrapper 로 다시 검색을 해보았다(아는게 없으니..)

https://opentutorials.org/module/4291/26819

php wrapper? 코드나 데이터를 둘러싼 또 하나의 코드로, data를 또 한번 변환시켜주는 역할을 한다고 한다. 실제 데이터의 앞에서 어떤 틀을 잡아주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램이다.

여기서 세가지 정도 의 php wrapper를 보여주었는데, 우선 expect;//는 디렉토리를 보여준다고 한다. 디렉토리는 보여져 있으니 패스.

 

그 다음 php:://filter!!앗 서버안에 존재하는 문서를 열람할수 있게 해준다고 한다.

바로 이거다 하고 php filter를 사용해서 sql에 입력해보았다.

=> php filter를 이용하는 형식:

(주소)=php;//filter/convert.base64-encode/resource=(파일경로)

 

 

http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag.php => 안된다. 디렉토리 명만 붙여줘야 하는건가?(의문점!!)

http://webhacking.kr:10001/?file=php:://filter/convert.base64-encode/resource=flag

빙고. 인코딩된 내용이 나왔다.

PD9waHAKICBlY2hvICJGTEFHIGlzIGluIHRoZSBjb2RlIjsKICAkZmxhZyA9ICJGTEFHe3RoaXNfaXNfeW91cl9maXJzdF9mbGFnfSI7Cj8+Cg==

base64로 인코딩되어있는 내용이니까 후딱 디코딩해주었다.

"FLAG{this_is_your_first_flag}"; 찾아서 auth에 입력해준다. 장장 네시간 소요. 흑흑

 

=>의문점: 앞에서 flag,index 만져볼 때 php를 입력해도 자동으로 떨어졌던걸 확인할수 있었는데, 코드에서 자동으로 확장자를 붙여주도록 짜여져있다고 한다. 확장자가 붙어도 상관없을수도 있다고.

 

 

old 27

view source로 바로 가보자.

어휴..필터링되는게 넘 많다. #,select,0x,),띄어쓰기,no입력 다 안된다.

일단 id=admin이면 될테니까 차근차근 필터링해보자.

?or id=‘admin’#

1. =like으로 걸러진다. =을 다 like로 바꿔주자.

2. 공백은 %0a로 바꿔주자.

3. 주석 #=> ;%00

%0ar%0aid%0alike%0a'admin';%00

??? or에서 문제가 생긴다. or가 없어짐. or까지 필터링 되는건 없었는데?

왠지 모르겠어서 그냥 id말고 no를 건드리기로 했다.

일단 소스에서 no가 괄호로 막혀있고, 앞을 거짓으로 해주고 뒤를 진실 no=2로 만들어주었다.

no=0)%0bor%0bno%0blike%0b2%0b;%00

=> old 27 pwned.

의문점) or가 왜 없어지지?

 

old 31.

$port = rand(10000,10100);

$socket = fsockopen($_GET['server'],$port,$errno,$errstr,3) or die("error : {$errstr}");

들어가자 마자 한 10초정도 흐르고 time limit이라는 게 떴다. 우선 port10000-10100사이에서 랜덤하게 결정되는 것은 이해했고, fsockopen이 무엇인지 검색해 보았다.

fsockopen을 통해 php에서 다른 웹사이트에 데이터를 전송할수 있다고 한다.

일단 포트를 하나 열어줘야 플래그를 받든 하니까 포트를 열어주도록 하자. 공유기에 있는 포트포워딩 기능을 이용하면 원하는 포트를 열어줄 수 있다.

근데 중요한 점이.. 내가 공유기 아이디를 까먹었다는 것이다.. 워게임하려고 공유기 초기화한 내인생이 레전드...

그리고 리눅스 서버를 켜서 10000~10100 사이에서 몇 개 포트를 켜놓고 기다렸더니 플래그가 도착했다.

FLAG{i_have_a_big_and_beautiful_server}

굉장히 오래걸렸다 이것도..너무 힘든 문제..

 

old 32

투표를 할수 있게 되어있는데, 한번 투표하면 alreadyvote라는 문구가 뜨면서 재투표가 안된다. 이게 다 쿠키가 남아있어서이다. 후딱 제거해주자.

쿠키를 제거하고 내 아이디에 vote해줘서 100점을 만들면 pwned.

나는 노가다 했는데 똑똑한 친구는 버프수트에 repeater라는 기능을 사용했다고 한다..

 

 

 

old -47

우선 뭔가 전송을 하는 부분이 있길래 전송을 해보았다.

 

뭔가 메일을 전송하는 과정인 것 같다. 모르는 용어들이 많아서 우선 검색부터 해보았다.

EHLO를 검색해보자..

 

https://mantos.kr/12?category=600143(이분 게시물 참고)

SMTP 방식으로 메일을 전송하는 과정의 한 명령어라고 한다..

메일이 전체적으로 보내지는 과정을 우선 알아보았다. 유익하지만 쓸모없는 지식을 얻었다.

dead end라서 다시 검색해보기로 했다. mail injection이라는게 있을 까 싶어서 검색했더니

, 찾을 수 있었다.

https://blog.naver.com/window__han/80165739307

 

관리자에게 보내지는 메일의 구성은

mail(받는사람, 제목, 내용, [추가헤더,[추가인자])로 구성되어있다고 한다.

이 중에 cc(carbon copy): 참조자를 이용해서 자신의 메일주소를 삽입하면 이메일이 원래 전송되는 사람 이외에도 보내줄수 있다고 한다. 이런 과정을 이용해서 메일을 중간에서 탈취하는 것 같다.

php mail 함수 에 따르면 참조자 이전에 crlf를 반드시 입력해주어야 한다고 한다.

subject:hello

Cc: skyridxxxx@gmail.com

만능박사 버프수트를 사용했더니, 내 주소로 메일이 도착했다.

FLAG{wasted_too_much_time_damn}, this shit is mocking me.

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

Webhacking.kr- challenge 10,36,42, 43  (0) 2020.02.23
Webhacking.kr) OLD-23 writeup  (0) 2019.12.30
Webhacking.kr) old-33 WRITE-UP  (0) 2019.12.30
Webhacking.kr- 50,100점 문제 writeup  (0) 2019.11.20