반응형

두번째 문제입니다. 

리다이렉트를 시켜라.. 뭐 이런 문제인 것 같네요. [Start the Challenge] 버튼을 클릭하여 문제를 시작해봅시다.

문제에는 Social Networks라는 제목과 각각 Facebook, Twitter, Slack 페이지로 리다이렉트되는 버튼들이 존재합니다.

이를 다른 웹사이트로 리다이렉트 시켜라.. 이런 문제인 것 같습니다.(문제 제목으로 추측해보면..)


우선, 어떤 식으로 값이 전송되어 리다이렉트 되는지 알아보기 위해 Burp Suite(Proxy tool)을 이용하여 인터셉트 해봅시다.

GET Method로 url과 h 파라미터가 전송되고 있네요.

url을 조작하여 다른 페이지로 리다이렉트 시도를 해보겠습니다.(저는 naver로 리다이렉트 시켰지만, 다른 페이지도 가능합니다.)


url 파라미터만 조작하여 값을 전송할 경우 hash 값이 맞지 않다는 메시지가 출력되네요. 이로써 h 파라미터도 같이 맞춰주어야 한다는 것을 알게되었습니다. h의 값을 보니 MD5 해쉬값을 사용한 것 같네요. url부분(https://naver.com)을 MD5로 인코딩 해보겠습니다.

MD5 해쉬 Generator는 구글에 검색하시면 많이 있습니다. url 파라미터를 인코딩하니 해쉬 값이 나왔네요.

해당 url과 해쉬 값으로 파라미터를 조작하여 전송하면!!


위와 같이 Well done 문자와 함께 flag 값이 출력되네요~~


저는 proxy 툴을 사용하였지만, GET 메소드로 전송되는 거라 URL 상에서 조작하셔도 무방합니다. 

다만, 리다이렉트 문제라 flag 값이 쓰여진 페이지가 매우 빠르게 다른 페이지(네이버)로 넘어가는 점 알아두세요!!


반응형

'Study > Wargame' 카테고리의 다른 글

root-me >> HTTP directory indexing  (0) 2018.02.21
root-me >> User-agent  (0) 2018.02.21
root-me >> Weak password  (0) 2018.02.21
root-me >> HTML  (0) 2018.02.21
Root-me Wargame site  (0) 2018.02.21
반응형

 첫 문제여서 그런지 아주 쉬운 문제였습니다. 다행히 빠른 포기는 없는 걸로..ㅎ


 Flag 값 인증 방법을 알려드릴게요^^(다 아시겠지만요)


 우선, 문제를 클릭합니다.



 [Start the Challenge] 버튼을 눌러 문제를 보겠습니다.



음,,, 그냥 Password를 입력받는 칸만 나와 있습니다. 우선은 임의의 값을 넣어서 로그인을 시도해보겠습니다.


패스워드가 맞지 않다는 메시지가 뜨네요. 아무 정보없이 어떻게 풀어야 할까요?


사실 해답은 문제의 제목을 참고하면 되는데요, HTML을 이용하여 풀어야하는 문제이네요. 

워게임의 제일 기본인 '소스 보기'를 클릭합시다. (우클릭->소스보기 or F12 개발자도구)

패스워드를 찾았습니다!!! 주석으로 처리되어 있었네요. 

이전 페이지로 돌아가 패스워드 입력창에 넣어봤더니 이 패스워드를 입력해서 인증하라는 메시지가 출력되었습니다.

인증 Flag를 입력하는 부분은 [Start the Challenge] 버튼 하단 부분에 있는데요, 그 페이지로 돌아가서 얻은 패스워드(flag) 값을 전송하였더니!!

5 포인트를 얻었습니다^^

 








반응형

'Study > Wargame' 카테고리의 다른 글

root-me >> HTTP directory indexing  (0) 2018.02.21
root-me >> User-agent  (0) 2018.02.21
root-me >> Weak password  (0) 2018.02.21
root-me >> HTTP - Open redirect  (0) 2018.02.21
Root-me Wargame site  (0) 2018.02.21
반응형

 지금까지 공부를 소홀히 했던 나를 반성하며,,, 다시 블로그를 시작하려고 합니다!!


 공부 이외에도 지금까지 여행했던 곳들... 차근차근 올려보려고 해요


 www.root-me.org 워게임 사이트를 발견했는데, 초급부터 고급까지 다양한 난이도에 문제 수도 꽤 많아 아주 만족하고 있습니다.


 많이 부족한 실력이지만, 포기하지 않고 풀어보겠습니다.




  링크 : https://www.root-me.org/en/Challenges/Web-Server/ 



 (웹 서버 문제 이외에도 다양한 분야의 챌린지가 있어 실력을 향상하여 도전해보고 싶네요.)

반응형

'Study > Wargame' 카테고리의 다른 글

root-me >> HTTP directory indexing  (0) 2018.02.21
root-me >> User-agent  (0) 2018.02.21
root-me >> Weak password  (0) 2018.02.21
root-me >> HTTP - Open redirect  (0) 2018.02.21
root-me >> HTML  (0) 2018.02.21
반응형

일단, fd를 들어간 후, 어떤 파일들이 설치되어 있는지 ls명령어를 사용하여 확인한다.

위의 화면을 보면, fd 실행파일과, 소스, flag가 있는 것을 알수 있다.

우리가 얻어야 할 것은 이 flag에 저장되어 있는 키값이다.


이 문제는 소스 분석만 잘한다면 쉽게 풀수 있는 문제이다.(물론 나한텐 어렵지만ㅜㅜ)


cat [파일이름] 명령어를 써주면 파일의 속내용을 화면으로 뿌려주는데, cat fd.c를 하면 fd의 소스를 볼수 있다.

우리가 어떤 값을 입력했을 때, 입력한 개수는 argc에 저장되고 그 값은 배열 argv[]에 저장된다는 것을 알고 있을 것이다.


위에서 부터 천천히 분석해보면 입력하는 값이 2개 이하면 "pass argv[1] a number"가 출력되고 프로그램이 종료된다. 입력하는 값이 두개 이상이되어야 된다는 것을 알 수 있다.


변수 fd에는 atoi(argv[1])-0x1234를 연산한 값이 저장되고, len에는 read(fd, buf, 32)가 저장된다. 여기서 read() 함수를 잘 살펴보아야 한다.

read함수의 첫번째 인자에는 파일 디스크립터가 들어간다.

- 0 : stdin // 1 : stdout // 2 : stderr

두번째인자에는 파일을 읽어드리는 버퍼가 들어가고, 세번째엔 버퍼의 크기가 들어간다.


>>파일 디스크립터에는 파일이 입력되야하므로 fd값은 0이 되어야한다. 어떤 값에서 16진수 0x1234를 뺀 값이 0이 되어야 하므로, 0x1234 즉 십진수로 변환한다면 4660값이 들어가야 한다. (첫번째 입력값은 4660!!!!)

>>두번째 입력값과 문자열 "LETMEWIN"을 비교하였을 때 같아야 하므로!!!답은??ㅋㅋㅋㅋ


소스를 천천히 분석하고 답을 알았으니 fd를 실행시켜 값을 입력하면~~~

flag에 들어있는 키값을 볼 수 있다.


반응형

'Study > Reversing' 카테고리의 다른 글

PE헤더-NT Header  (0) 2014.08.03
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07
반응형



웹페이지에 간단한 계산기를 만들어보려고 한다. HTML언어만을 사용하기엔 클라이언트 언어이기 때문에 계산이 불가능하다. 그래서 서버언어인 JavaScript 언어를 사용하여 계산이 가능하도록 한다.


HTML언어로 틀부터 만들어보자.

<body>

<p>

<input type="text" id="num1" size="10" value=""> //첫번째 수

<select class="op" id="op"> //option 선택창

<option value='plus'>+</option>

<option value='sub'>-</option>

<option value='mul'>*</option>

<option value='div'>/</option></select>

<input type="text" id="num2" size="10" value=""> = <input type="text" id="num3" size="10" value="" readonly="readonly">

<input type="button" value="send" onclick="total()"> //계산 버튼

</p>

</body>

첫번째 칸과 두번째 칸에 계산할 수를 쓴 후 연산기호를 선택한다. 그런 다음 send버튼을 누르면 total()함수가 호출된다. 


<script type="text/javascript"> //JavaScript 부분을 HTML의 <head>사이에 삽입한다.

function total() //total()함수 부분

{

  var num1=document.getElementById("num1"); //<body>부분에서 num1변수를 getElementById를 이용하여 값을 가져온다.

  var num1s=num1.value; // num1에서 가져온 값을 num1s에 저장해주고,

  var num1b=parseInt(num1s); // 계산을 하기위해 그 값을 int형으로 바꿔준다.

  var num2=document.getElementById("num2"); //위 방법과 같음..

  var num2s=num2.value;

  var num2b=parseInt(num2s);

  var num3t;

  var op=document.getElementById("op"); //역시 op값을 가져오고

  var ops=op.value; //값으로 저장

  switch(ops) //ops의 연산기호에 따라 case를 나눈다.

  {

  case "plus": num3t = num1b + num2b;  document.getElementById("num3").value=num3t; break;

  case "sub": num3t = num1b - num2b; document.getElementById("num3").value=num3t; break;

  case "mul": num3t = num1b * num2b; document.getElementById("num3").value=num3t; break;

  case "div": num3t = num1b / num2b; document.getElementById("num3").value=num3t; break;

  } //계산한 값을 num3t에 저장한 후, 값을 num3로 가져간다.

}

</script>

값 불러오기, int형 변환만 생각한다면 간단한 계산기는 손 쉽게 만드는 것이 가능하다!!

반응형
반응형

객체지향 프로그래밍


 

 절  차    지  향

객  체   지  향 

정  의 

순서대로 프로그래밍 

무작위 프로그래밍 

 대표적  언어

 C언어, Basic 등..

C++, JAVA 등.. 

 호 출   방식

함수 직접 호출 

인스턴스를 통한 메소드 호출 


우리가 주로 사용하던 언어는 C언어, 즉 절차지향 언어였다. 쉽게 말해 절차지향 언어는 순차적으로 읽는 소설책같은 프로그래밍을 하며, 객체 지향 언어는 자신이 필요한 부분만 찾아 사용할 수 있는 백과사전과 같은 프로그래밍을 한다.

절차지향의 특징으로는 코드의 재사용이 높다는 점. 백과사전처럼 필요할 때 필요한 부분만 가져다 쓰면 되므로 기존 코드를 이용하여 쉽게 작성할 수 있다. 또한, 코드의 관리가 용이하다는 점을 들수있다. 그리고 신뢰성이 높은 프로그래밍을 할 수 있게 한다는 점인데, 객체지향언어에서의 메서드, 제어를 이용하여 데이터 보호가 가능하기 때문이다.


객체지향 언어에서 가장 중요한 개념이 있다면 클래스라 할 수 있다. 클래스는 객체를 생성하는데 사용되는데, 예를 들어, 어떤 건물을 세울려면 먼저 있어야 하는 설계도 같은 것이라 이해하면 된다. 클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 앞에서 예를 든 것처럼 어떤 설계도 하나만을 잘 만들어 놓으면 그 건물과 비슷한 건물을 세울때 마다 설계도를 다시 그리지 않아도 된다. 설계도의 토대만을 가져와 필요한 부분만을 수정하면 된다는 것이다.


위의 그림에서 하나의 설계도가 여러 건물의 밑받침이 되는 것처럼 클래스도 마찬가지이다. 클래스만 잘 만들어놓으면 매번 객체를 생성할 때마다 고민할 필요없이 클래스로 부터 호출하면 되기 때문이다.


클래스로 부터 객체가 만들어지는 것을 인스턴스화라고 한다. 위의 그림으로 예를 들자면, '아파트는 객체다', '아파트는 건물 클래스의 인스턴스'라고 표현 가능하다.

객체의 구성요소에는 속성과 기능이 있는데, 속성에는 멤버변수, 기능에는 메서드가 있다. 예를 들자면, 아파트의 속성에는 높이(층), 평수 등이 있고, 기능에는 주거, 사무 등이 있을 수 있다.





 

반응형

'Study > Java' 카테고리의 다른 글

Java-Hello World!  (0) 2014.07.07
이클립스 설치  (0) 2014.07.07
JAVA 설치  (0) 2014.07.07
반응형

NT Header에는 IMAGE_NT_HEADERS 구조체가 있는데, 3개의 멤버로 구성되어 있다.

그 중 Signature은 50450000h("PE 00")값을 가진다. 또한 File Header와 Optional Header 구조체가 있다.


File Header


IMAGE_FILE_HEADER 구조체는 파일의 개략적인 속성을 나타내는데, 옆의 그림에서 보이는 4가지 멤버가 있지 않으면 파일의 정상적 실행이 불가능하다.





1. Machine

머신 넘버는 CPU별로 고유한 값이다.


2. Number Of Sections

코드, 데이터, 리소스 등이 각각의 섹션에 나뉘어 저장되는데 그 섹션의 개수를 나타낸다.


3. Size Of Optional Header

IMAGE_NT_HEADERS 구조체의 마지막 멤버인 IMAGE_OPTIONAL_HEADER32 구조체의 크기를 나타낸다. 


4. Characteristics

파일의 속성을 나타내는 값이다. 실행 가능한지 DLL파일인지 등을 bit OR형식으로 조합한다.


참고로 IMAGE_FILE_HEADER의 TimeDataStamp 멤버는 파일의 실행에 영향을 미치지 않지만, 해당 파일의 빌드 시간을 알려준다.

위는 IMAGE_FILE_HEADER 구조체를 나타낸 것이다.


Optional Header

PE헤더의 구조체 중 가장 크기가 큰 구조체가 IMAGE_OPTIONAL_HEADER32이다.

1. Magic : IMAGE_OPTIONAL_HEADER32인 경우 10B, IMAGE_OPTIONAL_HEADER64(64bit)는 20B값을 가진다.


2. Address Of Entry Point

EP의 RVA값을 가진다. 프로그램 최초 시작 주소이다.


3. ImageBase

프로세스 가상 메모리는 0~FFFFFFFF까지 광범위한데 이 광활한 메모리에서 PE파일이 로딩되는 시작주소를 나타낸다. 일반적으로 EXE 파일의 ImageBase값은 00400000, DLL은 10000000이다. PE로더는 PE파일을 실행시키기 위해 프로세스를 생성하고 메모리에 로딩한 후 EIP 레지스터 값을 ImageBase+AddressOfEntryPoint 값으로 세팅한다.


4. SectionAlignment, FileAlignment

PE바디는 섹션으로 나뉘어 있는데 파일에 섹션의 최소단위를 나타내는 것이 FileAlignment이고, 메모리에서 섹션의 최소단위를 나타내는 것이 SectionAlignment이다. 섹션 크기는 반드시 FileAlignment/SectionAlignment의 배수가 되어야한다.


5. Size Of Image

PE파일이 메모리에 로딩되었을때 가상 메모리에서 PE Image가 차지하는 크기를 나타낸다. 


6. Size Of Header

PE헤더의 전체 크기이다. FileAlignment의 배수가 되어야 한다. 


7. Subsystem

Subsystem값을 보고 파일의 종류를 구분할 수 있다.

 값

 의             미

 1

 드라이버 파일 - 시스템 드라이버

 2

GUI 파일 - 창 기반 어플리케이션 

 3

CUI 파일 - 콘솔 기반 어플리케이션 


8. Number Of Rva And Sizes

IMAGE_OPTIONAL_HEADER32 구조체의 마지막 멤버 DataDirectory 배열 갯수를 나타낸다. 


9. DataDirectory

IMAGE_DATA_DIRECTORY 구조체 배열로 각 항목마다 정의된 값을 가진다.


위는 notepad의 IMAGE_OPTIONAL_HEADER 구조체 영역을 가져온 것이다.











반응형

'Study > Reversing' 카테고리의 다른 글

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-Dos header/Dos stub  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07
반응형

PE파일 구조를 자세히 들여다보자.


Dos Header

도스헤더는 PE file format을 만들 당시 Dos파일에 대한 호환성을 위해 만들어졌다. PE파일의 첫 부분에는 DOS EXE Header를 확장시킨 IMAGE_DOS_HEADER 구조체가 존재한다. 이 구조체에서 중요한 멤버는 e_magic과 e_lfanew가 있다.

e_magic 에는 dos signature("MZ")가 존재하고, e_lfanew 에는 NT HEADER 구조체가 존재한다.











notepad를 열어 Dos header 부분을 보면 4D5A(MZ), e_lfanew값은 000000E0을 알 수 있다.


Dos Stub

Dos stub는 옵션으로 존재하고 크기도 일정하지 않다. 코드와 데이터의 혼합으로 이루어져 있으며, Windows에서는 dos stub부분이 실행되지 않는다.

만약, Dos 환경에서 notepad가 실행되면 MS-DOS 호환모드를 가지고 있어 This program cannot be run in DOS mode를 출력하고 종료해버린다.

반응형

'Study > Reversing' 카테고리의 다른 글

"pwnable.kr" fd 문제풀이  (0) 2014.11.04
PE헤더-NT Header  (0) 2014.08.03
PE파일 구조  (0) 2014.07.31
리버싱 분석방법-정적분석, 동적분석  (0) 2014.07.07
반응형

TCP/IP 프로토콜은 인터넷 통신을 할 경우 사용하는 언어이다. TCP/IP는 랜카드에 세팅되어 있는데, 인터넷을 사용한다면 누구나 가지고 있어야 한다.

네트워크 속성(이더넷 속성)에 가보면 위의 사진처럼 TCP/IP가 체크된 것을 볼 수있다. 이것 때문에 우리는 인터넷을 사용할 수 있는 것이다. (체크가 해제되면 인터넷을 사용할 수 없다.)


IP주소는 전세계에서 나만 가지고 있는 것이다. IP주소 2개가 충돌되면 하나는 인터넷을 쓰지 못한다. 그러나, 요즘은 같은 IP주소를 사용하는 경우가 있다. 모든 인터넷을 사용하는 사람들에게 IP주소 하나씩을 할당하기엔 부족하기 때문이다. 그래서 요즘은 내부 네트워크에서는 공인되지 않은 IP주소를 사용하다가 인터넷을 사용할 때만 공인 주소를 가지고 나가는 NAT 방이나, 동일한 IP주소를 가지고 포트번호만을 바꿔 인터넷에 접속하는 PAT방식을 사용한다.



IP주소 한 자리는 0부터 255까지 쓸 수 있는데 그 이유는 2진수로 표현되어 있기 때문이다. IP주소는 2진수 32개로 만들어지는데, MAC주소 처럼 2진수로 표기하면 보기도 사용하기도 어려우니 십진수로 표기한다. 


자신의 아이피 주소를 알려면 cmd창에 ipconfig 명령어를 치면된다. 


네트워크 관리자는 매 장비가 추가 될때마다 IP 주소를 배정 하는 일은 보통이 아니다. 그래서 DHCP 서버가 나왔다. DHCP는 IP주소를 자동으로 할당해 주는 일을 담당하는데, DHCP 서버는 아이피 주소를 가지고 있다가 클라이언트 PC가 켜지면서 네트워크 상에 브로드캐스트를 뿌리면 자동으로 IP를 할당해준다.







반응형

'Study > Network' 카테고리의 다른 글

캐스트 종류+OSI 7계층  (0) 2014.08.02
맥 어드레스(MAC Address)  (0) 2014.08.02
케이블에 대해...  (0) 2014.08.01
네트워킹의 방식-이더넷과 토큰링  (1) 2014.07.24
네트워크 개요  (1) 2014.07.14
반응형

네트워크 통신을 하는 방식에 구분하여 크게 유니캐스트, 브로드캐스트, 멀티캐스트로 나눌 수 있다. 


1. 유니캐스트

-제일 많이 사용되는 트래픽

-통신을 위해 전송되는 프레임안에 출발지와 목적지의 주소(맥)를 미리 써넣는 방식

-1대 1통신이기 때문에 다른 장비가 프레임을 받는다면, 목적지의 맥주소가 자신의 맥주소와 다른 것을 확인한 후, 프레임을 버리게 되어 CPU에 영향을 주지 않는다.

-만약 목적지의 맥주소가 자신이라면 프레임을 CPU로 보내 CPU가 처리할 수 있도록 한다.



2. 브로드캐스트

-로컬 랜 상에 있는 모든 네트워크 장비에게 통신을 할 경우 사용하는 방식

-특정 대상이 없으므로 자신이 받고 싶지 않다고해서 받지 않는 것은 아니다.

-프레임이 오면 자신의 맥주소와 같지 않더라도, 브로드캐스트 패킷을 CPU에게 보내어 그 쪽에서 처리하게 한다. 

-따라서 CPU는 하던 일을 멈추고 다른 일을 해야하기 때문에 PC성능이 떨어지고 전체 네트워크로 전송되기 때문에 전체 트래픽이 증가되어 네트워크 성능도 떨어지게 된다.

-브로드캐스트는 처음 통신을 하는 경우, IP주소는 알지만 MAC주소를 모르는 경우에 사용된다.(ARP 과정) 또는 라우터끼리의 정보교환 혹은 다른 라우터를 찾을 때 사용되기도 한다.



3. 멀티캐스트

-어떤 네트워크 상의 장비들중 선택적으로 동시에 정보를 보낼 때 사용하는 방식

-멀티캐스트 기능을 라우터나 스위치에서 지원해야만 가능한 방식이다.


OSI 7 Layer

<OSI 7계층의 장점>


-데이터의 흐름을 한 눈에 볼 수 있다.

-큰 문제하나를 작은 문제 7개로 나눠 처리할 수 있으므로 문제해결이 쉽다.

-통신이 편리해 진다.

-각 층이 표준화되어있어 다른 회사 장비를 같이 사용해도 문제가 없다.











1층 물리적계층 : 전기적, 기계적, 기능적 특성을 이용하여 통신케이블로 데이터 전송 - 케이블, 허브


2층 데이터링크 계층 : 피지컬 레이어를 통해 송수신되는 정보의 오류와 흐름을 관리하여 정보의 전달을 도와줌 - 브리지, 스위치


3층 네트워크 계층 : 데이터를 목적지까지 빠르고 안전하게 전달 - 라우터



반응형

'Study > Network' 카테고리의 다른 글

TCP/IP 프로토콜  (0) 2014.08.02
맥 어드레스(MAC Address)  (0) 2014.08.02
케이블에 대해...  (0) 2014.08.01
네트워킹의 방식-이더넷과 토큰링  (1) 2014.07.24
네트워크 개요  (1) 2014.07.14

+ Recent posts

반응형
반응형