linux 2012.12.07 03:12

Setting Ubuntu Server 12.04 on VMWare

 다음은 혼자 공부하기+Linux와 관련된 일을 수월하게 하기 위한 목적으로 VMWare에 설치한 Ubuntu Server 12.04의 세팅 과정이다.

 Windows에서 -nix 관련 일을 하려면 Cygwin을 설치하면 되지 않느냐는 생각도 할 수 있지만, 그 뭔가 어설픈듯한(완성도를 논하는게 아니라, Cygwin에서 모든 Linux의 기능을 "설치"하고 "사용가능"하게 만들 수가 없다는 뜻이다) Cygwin을 참을 수가 없어서 결국 VM을 만들기로 했다.

1. 공유 폴더 만들기

지난 포스트에서 했다. 저 포스트에도 써있지만, 공유폴더를 심볼릭 링크 해주면 편하다.

2. root pw 설정

sudo su

passwd

3. SSH 설치: VM은 Background로 돌리고 각종 터미널 프로그램(iPuttyXShell을 추천한다. 둘다 개인사용자는 무료)으로 VM에 할당된 내부 IP에 접속하는 것이, 터미널 스크롤도 안되는 VMWare 화면보다 훨씬 나은게 당연하다

sudo apt-get install ssh

4. vim 설치: 사실 이후 작업을 하면 쓸 일이 별로 없지만.. 그래도 리눅서라면 당연히 설치(?)해야하지 않을까. 적어도 기본으로 있는 vi는 쓸게 못 된다.

sudo apt-get install vim

5. vsftpd 설치: 이 작업때문에 4번 작업이 별 의미가 없다. FTP접속을 가능하게 해주는 데몬인데, FTP접속이 가능하다면 FTP가 연동되는 수많은 "쩌는" 편집기들(Notepad++, Sublime Text 2 등. 전자는 무료, 후자는 유료지만 주기적으로 거슬리는 화면을 보면 무료로 사용할 수 있다)로 파일을 열어서 편집하면 그만이기 때문. vim이 더 좋다는 변태들은 답x... ㅈㅅ...

sudo apt-get install vsftpd

vim /etc/vsftpd.conf (이럴때는 또 vim이 쓰기가 편하다.. 터미널창에서 다 끝나니까)

anonymous_enable을 NO로 바꾸고 local_enable, write_enable을 주석처리하는 #을 지우고 :wq

sudo /etc/init.d/vsftpd restart 

로 vsftpd를 재시작하면 설정파일대로 잘 작동한다.

6. gdb 설치

sudo apt-get install gdb


 일단 이정도 설치해놓으면 VM을 켠 다음 바로 Background로 트레이에 쳐박아놓고 터미널 클라이언트로 접속해 쓰던가 각종 편집기로 FTP에 접속해서 코딩하는데 불편함이 없을 것 같다.


신고
linux 2012.12.07 01:58

Setting Shared Folder in Ubuntu Server 12.04 on VMWare

다른건 다 모르겠고

공유폴더를 위해 vmware tools를 깔았는데, 제대로 설정이 안 되어서 vmware-config-tools.pl을 실행시켰더니 kernel header path를 못찾겠단다.

해결책

$
$
$
$ sudo apt-get install linux-headers-$(uname -r)

일반적으로 커널 업데이트를 하지 않았다면, uname -r의 결과는 3.2.0-29-generic-pae이다.

설치하고 나서 다시 config하면 path가 잘 들어가 있음.

재시작하면 shared folder는 /mnt/hgfs에 마운트되어 있음. 편히 쓰려면 홈디랙토리에 ln -s /mnt/hgfs shared 정도로 심볼릭링크를 해주면 깔끔함.

신고
BOF원정대 2012.11.18 21:03

[0x03] cobolt

int main()
{
    char buffer[16];
    gets(buffer);
    printf("%s\n", buffer);
}

gremlin과 완전히 같지만, argv로 payload를 넘기던 것과 달리, 여기선 프로그램 실행 후에 stdin(키보드)으로 입력을 받는다. 그런데 키보드로 표현할 수 있는 문자는 ASCII문자 뿐이다. 그렇다면 ASCII문자로만 payload를 구성해야 할까? 

물론 말이 안 된다. 0xbffffdc1, 즉 0xbf, 0xff, 0xfd, 0xc1을 어떻게 키보드로 칠 수 있겠는가. 결국엔 이 Non-ASCII 문자들을 stdin으로 전달해줘야 한다는 말이 된다. C언어에서 파일 입출력에 대해 배우면서 들은 말이 있을 것이다. File Descriptor라고. 



그리고 C언어 책을 주의깊게 봤다면, stdin은 File Descriptor #0이고, stdout은 #1인 것도 알 것이다(그림과 같이). 이 말이 무슨 뜻이냐면, 파일 입출력을 할 때 File Descriptor에 내용을 전달하는 것 처럼(밑의 예제를 보자), stdin에도 파일 입출력처럼 출력을 할 수 있다는 뜻이다(정확하게 말하자면, stdin도 파일 입출력과 다를 것이 없다).
/* example */
int main(){
	FILE *fp = fopen("aa.txt","w");
	
	/* File Descriptor fp(aa.txt) 에 출력 */
	fprintf(fp, "Hello, World!\n");
	
	/* File Descriptor stdout(모니터) 에 출력 */
	fprintf(stdout, "Hello, World!\n"); 
}

결국, 여담이지만, printf() = fprintf(stdout)이고 scanf() = fscanf(stdin) 이라고도 할 수 있는 것이다. 연결고리를 더 찾아보자면 fflush(stdin)(권장하지는 않는 함수지만) 도 마찬가지고. 

다시 본론으로 돌아가서, 그렇다면 stdin에 payload를 출력해주면 되므로 이를 위한 방법을 찾아본다면 이 문제가 해결될 것이다. 

Hint: pipe, cat, stdin

Payload


신고

'BOF원정대' 카테고리의 다른 글

[0x03] cobolt  (0) 2012.11.18
[0x02] gremlin  (0) 2012.11.18
[0x01] gate  (0) 2012.11.17
[0x00] 후기  (0) 2012.11.17
VMWare Fusion 5 에서의 부팅 문제  (0) 2012.08.29