c#

  • c++의 연산력 + Visual Basic의 편의성
  • 객체지향 프로그래밍언어
  • 넷 프레임워크에 최적화    


namespace란?

관련 구조체, 클래스, 델리게이트, 인터페이스 등을 그룹화 한 것


class : C# 프로그램을 구성하는 기본 단위

 - field : 정적인 상태

 - method : 동적인 기능


android:orientation="vertical" 줄바꿈


# LinearLayout은 한가지 방향으로만 출력할 수 있다. 방향을 바꾸고 싶다면, 중첩하여 사용하면 된다.


android:text="Color Test" 텍스트 내용
android:textSize="30sp" 텍스트 크기

# dp, in, mm, pt, px, sp의 단위가 있다.


android:textColor="#5c355c" 텍스트 색상

# html 색상 코드를 사용한다.


android:textStyle="bold|italic"/> 텍스트 스타일


  • bold (굵게)
  • italic (기울이기)
  • normal (기본)



코드를 보니 RET 제외한 스택을 전부 0으로 초기화 시킨다.

아무리 봐도 모르겠어서 예전에도 한번 여기서 막혀서  일단 다른사람이 어떻게 풀었는지 참조하면서 공부했다.

찾아보니 LD_PRELOAD 라는 것을 사용해서 푸는 것이라고 한다.

LD_PRELOAD는 dynamic linker 가 해당 경로의 so 파일을 공유 라이브러리로 무조건 선적재함.

라고 정의 되어있지만, 간단히 말해 프로그램이 시작될때 참조하는 것이라고 기억해두었다.

다음과 같은 코드를 짠 후

* stdio.h를 포함하지 말아야한다.

컴파일 옵션을 저렇게 주고, LD_PRELOAD를 등록 시킨 후

실행 시키면 놀랍게도 이렇게 쉘이 따인다.

그대로 golem에 적용시켜보려고 했더니 이렇게 먹히질 않는다.

아마도 실행되는 권한이 바뀌면서 LD_PRELOAD가 먹히지 않는 것이라고 생각하였다

혹시나 하고 다른 여러가지 실험을 해보았다.

먼저 /bin/my-pass의 권한에 setuid 비트가 걸려있는지 확인을 해보았다.

걸려있지 않았다 my-pass는 geteuid를 호출할때 setuid비트가 걸린 계정의 암호를 보여주기 때문에 setuid비트를 걸지 못한다.

이렇게 훨씬 상위의 비밀번호도 알아낼수 있었다.

일단 이렇게 아무동작도 안하는 프로그램을 하나 생성해서 이름을 쉘코드로 만들어 컴파일 해준다.

'IT > LOB' 카테고리의 다른 글

[LOB] vampire  (0) 2016.07.23
[LOB] troll  (0) 2016.07.17
[LOB] orge  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17

코드를 보면 ultra argv hunter 라고 argv를 모두 초기화 시키는 부분이 추가되었다.

처음에는 어떻게 할지 모르겠어서 일단 코드를 보고 심볼릭링크가 필요하다는 것을 알았다.

gdb 권한문제 때매 파일 명 길이가 같은 새 파일에 복사 후 심볼릭 링크를 걸어주었다.

쉘코드는 이것을 사용하였다.

\x68\x8a\xe2\xce\x81\x68\xb1\x0c\x53\x54\x68\x6a\x6f\x8a\xe4\x68\x01\x69\x30\x63\x68\x69\x30\x74\x69\x6a\x14\x59\xfe\x0c\x0c\x49\x79\xfa\x41\xf7\xe1\x54\xc3

구글링을 통해 스택 레이아웃을 다시 한번 살펴보았다.

https://www.win.tue.nl/~aeb/linux/hh/stack-layout.html

마지막 부분에 program name이 남는 것을 볼 수 있었다.

혹시나 해서 한번 시도해보았다.


정말로 마지막 부분에 프로그램 이름이 남아있었다. 

그래서 이부분에서 nop 주소중 하나를 골라서 ret에 덮었더니 성공하였다.

Flag : shellcoder


'IT > LOB' 카테고리의 다른 글

[LOB] skeleton  (0) 2016.07.24
[LOB] troll  (0) 2016.07.17
[LOB] orge  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17

소스가 많이 줄어들었다.

이번에는 \xff를 필터링 하고 있다.

 | argv[2] | argv[1] | argv[0] |

-->>> 

스택의 진행 방향이다.

argv[2]의 크기가 커질 수록 argv[1]는 더 낮은 주소에서 시작되게 된다.    

이렇게 3번쨰 인자값을 늘리면서 0xbffff 가 아닌 주소값을 찾아내었다.

Flag : music world


'IT > LOB' 카테고리의 다른 글

[LOB] skeleton  (0) 2016.07.24
[LOB] vampire  (0) 2016.07.23
[LOB] orge  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17

코드를 보면 argv[0]을 초기화 시키는 구문이 사라지고, argv[1]을 초기화 시키고 있다.

따라서 argv[0]을 이용하여 문제를 풀어야한다.

이렇게 코드를 만들고, argv[0]의 주소를 구한다.

argv[0]에 쉘코드를 넣어야 하는데, 어떻게 넣어야 할까 하다 이름 자체를 변경하여 넣기로 하였다.

하지만 쉘코드 중간에는 "\x2f" 라는 부분이 있는데 이 부분은 디렉토리를 구분해주는 인자이기 때문에 계속 오류가 떴다.


그래서 다음과 같은 쉘코드를 사용하였다.

\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81


이렇게 복사후

쉘을 땄다.

Flag : aspirin

'IT > LOB' 카테고리의 다른 글

[LOB] vampire  (0) 2016.07.23
[LOB] troll  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17
[LOB] orc  (0) 2016.07.17

argv[0]을 77자로 체크하는 구문이 추가되었다. 따라서 심볼릭 링크로 파일명을 바꿔준 후 실행하는 방법을 쓴다.

다음과 같이 코드를 짜고 

심볼릭링크를 걸어준다.


주소를 따준 후에

실행 해준다.

전 단계와 같은 방법으로 하되, argv[0]의 값만 신경써주면 된다

Flag : timewalker

'IT > LOB' 카테고리의 다른 글

[LOB] troll  (0) 2016.07.17
[LOB] orge  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17
[LOB] orc  (0) 2016.07.17
[LOB] goblin  (0) 2016.07.17

코드를 보니 argu의 길이를 확인하는 구문이 새로 생겼다.

buffer 주소값과 argv의 주소값을 찾도록 복붙하였다.

주소값을 구했다.

처음 두번과 같이 argument를 제약한다.

buffer(40) + sfp(4) + ret(4)  이므로 딱 48바이트가 된다. 있으나마나 한 제약이라

 전 단계의 페이로드를 그대로 쓰면 된다.


Flag : kernel crashed

'IT > LOB' 카테고리의 다른 글

[LOB] orge  (0) 2016.07.17
[LOB] darkelf  (0) 2016.07.17
[LOB] orc  (0) 2016.07.17
[LOB] goblin  (0) 2016.07.17
[LOB] cobolt  (0) 2016.07.12

실행시켜보면 overflow me을 출력한다.

이게 코드이다.


gdb로 까보니 배열과 key사이의 거리는 52인것을 알수 있다.

Flag : daddy, I just pwned a buFFer :)

'IT > Pwnable.kr' 카테고리의 다른 글

pwnable.kr / col  (0) 2016.04.09
pwnable.kr / fd  (0) 2016.04.07

코드를 보면 전레벨과 동일하지만, 마지막에 buffer hunter라는 구문이 추가되었다.

argv[1]의 주소에도 인자가 쓰여져 있으므로 argv[1]의 주소를 덮으면 된다.

근데 실수로 버퍼를 이용해서 풀어버렸다.

왜 버퍼헌터가 작동 되지않은것은 잘 모르겠다.

이렇게 argv[1]의 주소를구해 덮는 방법도 있다.

Flag : love eyuna

'IT > LOB' 카테고리의 다른 글

[LOB] darkelf  (0) 2016.07.17
[LOB] wolfman  (0) 2016.07.17
[LOB] goblin  (0) 2016.07.17
[LOB] cobolt  (0) 2016.07.12
[LOB] gremlin  (0) 2016.07.12

+ Recent posts