'Web Hacking'에 해당되는 글 6건

  1. 2015.02.27 Challenge 47
  2. 2015.02.27 Challenge 15
  3. 2015.02.27 Challenge 25
  4. 2015.02.27 Challenge 4
  5. 2014.10.01 Challenge 14 3
  6. 2014.10.01 challenge 6 5

Challenge 47

Web Hacking 2015. 2. 27. 17:23



< http://webhacking.kr/challenge/bonus/bonus-11/index.phps > 로 들어가 보면 소스가 뜬다.



PHP mail() 함수



: mail(받는사람, 제목, 내용, 옵션)


php의 mail()함수의 내용을 해석해 보면

admin@webhacking.kr 에게 'readme'라는 제목으로 "password is $pass" 내용을 보내라.


뒤에 $header 이 무슨내용인지 모르겠다.

문제 페이지에서 mail header injection 이라는 hint 가 있었다.

mail header injection에 대해 찾아보았다.




Cc(숨은 참조자)의 역할이 중요하다고 한다. 

숨은 참조자는 숨은 참조자로 지정해준 메일의 주소로도 메일이 날라가게 하는 것이다.


URL 인코딩으로 고쳐주면 될 것 같다.

URL 인코딩은 문자를 오직 ASCII코드로 바꿔 보내주는 것 같다.


그런데 웹에서의 값을 어떻게 바꿔 보내줄 수 있을까?!

'피들러'를 이용하면 된다고 한다.







이메일 창에 내 아이디를 넣어 보내보았다.

왼쪽편에 창이 하나더 뜨고 클릭한 다음 오른쪽에 inspertions 안에 Raw에 들어가 보니 밑에

email=oyeahhh%40naver.com이 생겼다.


composer창으로 들어가서 Request Body부분에

Cc:oyeahhh%40naver.com을 추가 하고

오른쪽 위에 Execute를 눌었다.


그랬더니 왼쪽편에 새로운 hppt가 생겼다. body는 399로 다른것들과 달랐다.

클릭해서 Webview에서 보면 밑에 Password is 하고 뜬다.

password를 Auth에 입력하면 된다!



피들러의 사용법을 몰라서 고생을 했다.

피들러 사용법 설명이 잘 된 동영상이 있어서 보고 참고하면서 했다.


http://www.youtube.com/watch?v=gXRzR-YU35c



'Web Hacking' 카테고리의 다른 글

Challenge 15  (0) 2015.02.27
Challenge 25  (0) 2015.02.27
Challenge 4  (0) 2015.02.27
Challenge 14  (3) 2014.10.01
challenge 6  (5) 2014.10.01
Posted by oyeahhh
,

Challenge 15

Web Hacking 2015. 2. 27. 17:22

15번을 누르고 들어가면 팝업창이 하나 뜬다.



바로 확인을 누르면 Challenge 화면이 뜬다.


15번을 누르고 무슨 이유였는지 확인을 누르지 않고 다른 일을 하다가 다시 들어가서 확인을 누르니

하얀 화면만 떴다.

그래서 소스보기를 했더니!!



password는 하고 답이 나와있는 것이다!


답을 Auth에 넣어 보았다!




정답~


무슨 원리인지는 모르겠다... ㅎㅎㅎ



'Web Hacking' 카테고리의 다른 글

Challenge 47  (0) 2015.02.27
Challenge 25  (0) 2015.02.27
Challenge 4  (0) 2015.02.27
Challenge 14  (3) 2014.10.01
challenge 6  (5) 2014.10.01
Posted by oyeahhh
,

Challenge 25

Web Hacking 2015. 2. 27. 17:21


음? 올드좀비 유저 뭐시기...음?

hello.txt 와 index.php 그리고 password.php를 들어가 봐야할 것 같다.


소스파일을 보니 별거 없다




먼저 index.php로 들어가 보았다.



똑같다. 별 차이가 없다. 차이가 있다면 주소창에 /index.php 가 추가되었다는거?


hello.txt에 들어가 보았다.


hello world!


password.php에 들어가 보았다.


별거 없다... ㅎㅎㅎ


처음 시작부터 ?file=hello 라는

어떤 값이 들어가 있었다.

그래서 file에 다른 것들을 다 넣어 보았다.

모두다 아무런 변화가 없었다. 

음....


재우에게 물어 보았더니

lfi취약점을 찾아 보라고 한다...

lfi...  모르는게 끝도 없다 ㅎㅎㅎㅎㅎ


로컬 파일 인클루션(Local File Inclusion)란?


LFI란 Local File Inclusion의 약자로 웹 브라우저를 통해 서버에 파일을 포함시키는 과정입니다.

이 취약점은 인클루드할 페이지 경로가 적절히 필터링되지 않았고 디렉토리 변경 명령어들의 

삽입을 허용했을때 일어납니다. 대부분의 LFI 취약점은 URL을 통해 이뤄지는데 이는 보통 개발자가 

GET Method 사용을 선호하기 때문입니다.



더보기



요약하자면

------------------------------------------------------------------------------------------------


http://www.site.com/index.php?pages=../../../../etc/passwd


../../../ 와 같이 ../를 여러번 붙여 주는 이유는 /etc/passwd 디렉토리의 상위디렉토리 존재 가능성 때문입니다.

위 URL처럼 시도하면 /etc/passwd를 읽어올수 있겠지만 조건에 따라 여전히 안 읽어질수도 있습니다.

여러 이유들이 존재할수 있지만 하나의 이유로는 코딩에 의해 생성된 쓰레기 값 때문 일수 있습니다.

아래 URL대로 시도를 해주면 쓰레기값을 성공적으로 날려버릴수 있습니다.


http://www.site.com/index.php?pages=../../../../etc/passwd%00


/etc/passwd 뒤에 %00은 널바이트로써 /etc/passwd 뒤에 붙는 쓸데없는 값들을 널바이트로 날려버립니다.


------------------------------------------------------------------------------------------------


page= 말고도 아래와 같이 이러한 경로를 갖는 URL들은 LFI를 의심해볼수 있습니다.

file=            path=             doc=            pdf=

folder=          style=            document=       PHP_PATH= 

lang=            template=         pg=             document_root=



file= 를 갖고 있기 때문에 LFI라는걸 알수 있고 %00를 사용하요 쓰레기 값을 날려버리면 된다.




file=password.php%00 값을 넣으면 password가 나타난다!



~~nullbye2~~값을 Auth에 넣으면



challenges clear! 이란 창이 뜬다! ㅎㅎㅎ



'Web Hacking' 카테고리의 다른 글

Challenge 47  (0) 2015.02.27
Challenge 15  (0) 2015.02.27
Challenge 4  (0) 2015.02.27
Challenge 14  (3) 2014.10.01
challenge 6  (5) 2014.10.01
Posted by oyeahhh
,

Challenge 4

Web Hacking 2015. 2. 27. 17:20

소스를 봐도 아무것도 없다.

근데 base64 디코딩을 해야할 것 같다. ( 뒤에 '==' 이 있길래)



디코딩 사이트

http://ostermiller.org/calc/encode.html


 

디코딩 결과.


결과를 password 창에 넣어 보았다.

아무일도 일어 나지 않았다.


고민을 했다.

이건 무엇인가.

한번더 디코딩 해 보았다.



요상한 문자가 나왔다... ㅎㅎㅎ


다른걸로 인코딩 디코딩 다 해보았지만 소용이 없었다.

종헌오빠에게 SOS를 쳤다... ㅎㅎㅎ

오빠가 '해쉬값'이라는 특급힌트를!!


해쉬값!

많이 들어보고 해쉬 함수의 값이란건 알고 있었지만

정확한 뜻을 몰라서 찾아보았다.






대표적인 해쉬함수로는 'MD5'와 'SHA'가 있다!

구글 검색을 해 sha-1 값을 찾아보았다.


sha-1 값 찾는 사이트.

http://sha1.gromweb.com/




아래의 값을 password에 넣어보았다.

아무런 변화가 없었다.

그래서 한번더 해 보았다.



그랬더니... 영어가!!!

심지어 'test' 라는 알아 볼 수 있는 영어가 나왔다!!!!






성공!!!

해쉬값을 이용한 문제는 어떤 단어가 나오나...?ㅎㅎㅎㅎ

암호화의 문제이니까?! 

조금더 공부를 해 봐야겠다!



'Web Hacking' 카테고리의 다른 글

Challenge 47  (0) 2015.02.27
Challenge 15  (0) 2015.02.27
Challenge 25  (0) 2015.02.27
Challenge 14  (3) 2014.10.01
challenge 6  (5) 2014.10.01
Posted by oyeahhh
,

Challenge 14

Web Hacking 2014. 10. 1. 16:46




횡~하다... ㅋㅋㅋ 내마음도 횡해진다.

6번을 풀고 자신감을 얻었는데 다시 막막해 진다.

힘내서 해보자! 아자!



종헌오빠의 세미나에서 배운 우클릭 페이지 소스 보기!

소스는 소중하니까여~~~





이렇게 새 창이 뜨면서 코드가 보인다! 

좋아 좋아~ 뭔가 보이는 것 같다.



더보기





function ck() 이게 뭔지 몰라서 인터넷에 처보니 ck() 이름은 없었다.

그래서 function에 대해 찾아 보았더니 직접 만든 함수인걸 알게 되었다.


[PHP] 함수 만들기!


funtion 함수이름 {

함수 내용.

}



함수 내용을 보니 ul 에 document.URL이 저장 되어있다.

document.URL의 의미를 몰라 찾아 보았다.


이것은 바로 현재 객체의 전체 주소를 반환해준다!  한마디로 객체(document)의 주소(url)!

-> ul 에 저장된 주소는 http://webhacking.kr/ 이다.



※객체란? 

변수들과 그와 관련된 매서드들을 하나로 묶어 놓은 집합.

구조화된 변수와 유사한 방법으로 여러 개의 함수까지 묶어 놓은 것.


객체의 특징

1 . 캡슐화(encapsulation)와 정보의 은닉성(information hiding) - 데이터의 추상화.

2 . 상속(inheritance) - 프로그램의 재사용.

3 . 다형성(polymorphism) - 프로그래밍의 용이.




.indexOf()의 함수를 몰라 찾아보았다.


처음으로 나오는 특정 단어의 위치! 

'welcome'은 공백 포함하여 0부터 시작하여 13번째에 'w'가 처음 나온다!



ul.indexOf(".kr") 은 ul의 주소에서 '.kr'이 몇번째에 위치되어 있는지 찾는 함수이다.

ul = ul=ul*30;이므로 '.kr'의 위치 곱하기 30한 값을 다시 ul에 넣는다.


이 값을 pw에 넣어주면 될 것 같다.

'.kr'은 17번째에 있으므로 17 * 30을 넣어 보았다. 



성공!!

여기서 나온 Password 값을 Challenges 옆에 있는 Auth에 넣는다.






challenge 14 clear!!!!!!!!!

예~~~ 좋아좋아!!

소스코드만 잘 읽을 수 있다면 점수가 낮은 문제는 금방 풀수 있는 것 같다!

그래서 낮은 점수겠지만....ㅎㅎㅎㅎ

굳!!!





'Web Hacking' 카테고리의 다른 글

Challenge 47  (0) 2015.02.27
Challenge 15  (0) 2015.02.27
Challenge 25  (0) 2015.02.27
Challenge 4  (0) 2015.02.27
challenge 6  (5) 2014.10.01
Posted by oyeahhh
,

challenge 6

Web Hacking 2014. 10. 1. 16:41




시작부터 막막하다....ㅋㅋ 100점짜린데....

그래 이것저것 다 해보자!



index.phps 를 누르면 코드가 뜬다


더보기




차례 차례 코드 해석을 해보자.



 if문 user이 아닐때(?)


for문 시작. id와 pw를  base64로 인코딩 20회 반복한다.















 












[PHP] str_replace("찾을문자열","치환할문자열","대상문자열") 

 -> val_id와 val_pw의 문자열을 치환한다 

-> 1,2,3,4,5,6,7,8 을 !,@,$,^,&,*(,) 로 치환.



 

디코딩 해라.




 

디코딩한 id 와 pw가 admin과 같다면 solve!!!



ㅎㅎㅎㅎㅎㅎ 무슨 소린지 모르겠다.

일단 Hint 는 base64! 이걸 사용해야 하는 것 같다.

그리고 인코딩과 디코딩을 20번 해야 할 듯 하다. 대충 감으로.


생소한 base64.... base64인코딩은 어떻게 하는 것일까.

겸사 겸사 base64에 대해서 , 그리고 왜 인코딩 하는지 디코딩 하는지 공부해 보았다.



역시 구느님!!!

결론은 64개 문자 이용 -> 바이너리 데이터를 아스키 텍스트 데이터로 표현!

     How? base64는 8bit의 데이터를 6bit로 표현하기 때문! 8 X 3 == 6 X 4 !  => 문자 3개에서 4개를 얻는다!


온라인으로 인코딩, 디코딩 가능!

 http://www.convertstring.com/ko/EncodeDecode/Base64Encode




▶내가 처음으로 한일! admin을 20번 인코딩 해 보았다.


더보기


휴... 힘들었다 복붙!

이제 뭘해야 할까... 저 길고 이상한 문자들은 무엇이란 말인가

다시 코드를 보도록 하자. 천천히 생각해보자.



이것의 의미... 디코드 아이디에 쿠키 유저에 넣어라?

아이디를 20번 다시 디코딩하면 admin이 나올텐데...?

쿠키가 어떤 일을 하는지 뭘 의미하는지 잘 모르겠다.


[PHP] 쿠키에 대해 알아 보자!


쿠키 생성!

setcookie(이름, 값, 유효시간, 디렉토리, 도메인 보안);


-이름(name) : 쿠키의 이름

-값(value) : 쿠키가 가질 값. "문자" , 변수, 값을 없앨려면 아무 값도 적지 않으면 된다.

-유효시간(expir_time) : 쿠키가 언제까지 작동할까를 적어준다. 0 혹은 아무것도 적지 않으면 브라우저가 닫힐 

때 까지, 0 이외의 다른 숫자를 넣으면 사용자가 쿠키를 삭제하기 전까지 유지된다. 지금부터 얼마간 지속시키려면 time()함수와 함께 써야한다. time() + 지속 초

-디렉토리(diretory) : 쿠키가 작동할 디렉토리의 절대 경로. 보통 생략한다.

-도메인(domain) : 작동할 도메인을 적어준다. 보통 생략한다.

-보안(secure) : 쿠키의 보안 상태를 정의한다. 1을 적으면 SSL암호화가 되어야만 작동, 적지 않거나 0을 적으면 

보안을 무시한다. 이것은 신경 쓸 필요가 없다.



※쿠키 생성 예제.



2번줄 setcookie("123","abcd") : 123이라는 쿠키에 abcd라는 문자열 저장. 브라우저를 닫으면 

사라진다

3번줄 setcookie("themics","phper",1) :쿠키가 영원히 지속된다. themics라는 쿠키에 phper라는 

문자열 저장.

4번줄 setcookie("nzeo",$nzeo_data) :  nzeo쿠키에 $nzeo_data의 값을 갖게 하고 브라우저를 

닫으면 사라진다.

5번줄 setcookie("php_study",$data,time() + 1800,"/httpd/html/") :  php_study쿠키에 

변수 $data에 있는 값을 대입한다. 지금부터 1800초, 즉 30분 지속되며 /httpd/html/ 이하에서 작동한다.

6번줄 setcookie("asdf","ghjkl",1,"/",".nzeo.com") : asdf라는 쿠키에 ghjkl라는 값을 갖게 하고 

영원히 지속되며 쿠키가 루트(/)이하, 즉 서버의 모든 파일에 작동한다. 또한 nzeo.com의

 모든 서브도메인에서도 작동하는 광범위한 쿠키이다.


※쿠키 사용.

$_COOKIE["쿠키이름"];



쿠키값 제거.

 setcookie("쿠키명");




쿠키에 대해서 공부를 하니 조금 무슨 소리인지 알겠다.

decode_id 에 쿠키 user 값을 넣어라. 그러면 디코딩이 되어 우리가 원하는 값을 얻을 수 있다.

디코딩을 20번 할 예정이니 우리는 인코딩을 20번 한 값을 넣으면 될 것 같다.


이제 20번 인코딩한 값을 user, password 쿠키 값에 넣으면 되는데 어떻게 넣는지 모르겠다....

우리의 멘토 사쿠야오빠한테 물어 보았다.

구글의 확장 프로그램 'edit this cookie'를 쓰면 자동으로 쿠키를 바꿔준단다... 와우!


'edit this cookie' 확장 프로그램.

https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?hl=ko






user과 password 값에 20번 인코딩한 값을 넣고 V를 누른 다음 새로 고침을 하면 된다.




와우! 한방에 성공!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!






뿌듯뿌듯ㅎㅎㅎㅎㅎ

사쿠야선배는 300점 문제를 가면 멘붕이 온다고 했다 ㅎㅎㅎㅎㅎㅎㅎㅎㅎ

비록 100점 짜리지만 너무 기분이 좋다 ㅎㅎㅎㅎㅎㅎ!!!

샤랄라~


처음 Webhacking.kr을 하면서 느낀점은 코드를 찬찬히 보자. 여러가지 생각을 해보자.

점수가 높아지면 문제도 어려워 지겠지만 그래도 지금처럼 열심히 하면 풀수 있겠지?!

힘내자! 예~~~




'Web Hacking' 카테고리의 다른 글

Challenge 47  (0) 2015.02.27
Challenge 15  (0) 2015.02.27
Challenge 25  (0) 2015.02.27
Challenge 4  (0) 2015.02.27
Challenge 14  (3) 2014.10.01
Posted by oyeahhh
,