zj3t

email: euntaejang@gmail.com

Latest Posts

폴더안에 있는 파일들의 MD5 해시값을 구해주는 파이썬 코드

import os

import hashlib, glob

def file2md5(filename):
    md5 = hashlib.md5()
    with open(filename, 'rb') as f:


        for chunk in iter(lambda: f.read(8192), ''):
            md5.update(chunk)


    return md5.hexdigest()


path=raw_input("Input path of folder: ") #폴더 경로 입력, 문자열로 입력받음
array=os.listdir(path) #경로에 있는 파일들의 리스트를 가져옴


i=0
for path, dirs, files in os.walk(path): #하위 디렉토리를 검색해주는 os.walk 모듈을 사용    for file in files: #input 디렉터리 안에 있는 모든 파일을 출력(폴더안의 폴더 또한 해당)
        print os.path.join(path,file)
        flist = glob.glob(os.path.join(path,file))


        for i in flist:
            print i,os.path.getsize(i),file2md5(i)


    #for dir in dirs:                   #input 디렉터리 안에 있는 모든 폴더 들을 출력
        #print os.path.join(path,dir)

제목 자체를 보면 무겁고 대단해보이고 하지만 알고보면 간단한 또 어떻게보면 주의해야할 부분인 것 같습니다.

사실 이건 제가 알아낸게 아니라 공부 도움많이 받는형이 알려준 건데 주의할 필요가 있어 포스팅 하게됬습니다.

먼저 아이폰으로 사진을 찍습니다.



아이폰은 갤럭시와는 다르게 사진을 찍으면 위치정보가 남아 사진첩에 들어가서도 어디서 언제 찍었는지를 알수 있게 해줍니다.

이 사진을 꿀뷰라는 프로그램으로 열면(꿀뷰는 많이 알려진 프로그램입니다. 네이버에서 다운가능!!)



이렇게 다른사람이 꿀뷰를 이용하면 현재 사용자의 위치와 기록등을 알 수 있습니다. 포렌식에서도 더 잘만 연구하면 이걸 이용할 수도 있겠다는 생각을 했습니다.

하지만 이 기능을 다른사람이 이용하기 위해서는 네이버 메일이나 다음 메일로 찍은 사진을 얻어야합니다.

즉 카톡이나 페북에서 얻은 사진은 안됩니다......

카톡이나 페북은 사진을 jpg로 바꾸고 위치 정보를 지워버립니다.

그래도 모른것 보다 아는게 좋을꺼 같아 포스팅 해봅니다.

허접한 포스팅...


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char* argv[])
{
struct stat st; :struct stat-C에서 파일에 대한 정보를 담고있는 구조체
FILE* fp;
if(argc !=3)
{
fprintf(stderr,"ERROR\n");
exit(EXIT_FAILURE);
}
sleep(25);
if((fp=fopen(argv[1],"a"))==NULL)
{
fprintf(stderr, "ERROR\n");
exit(EXIT_FAILURE);
}
//파일을 a모드로 열 수 없을 때 에러 메시지 출력
fprintf(fp,"%s\n",argv[2]);
fclose(fp);
fprintf(stderr,"SUCCESS\n");
exit(EXIT_SUCCESS);


stderr(Standard Error (스탠다드 에러)라는 의미이다. 즉 에레의 표준장치인데  에러메세지를 출력할 장치라는 뜻입니다.) 
같은 경우는 버퍼 없이 바로 출력 합니다. 따라서 어떤 상황이 와도 가장 빠르게 에러 메시지를 출력 할수가 있다.

EXIT_FAILURE for failure case. While,
You can use either exit(0) or EXIT_SUCCESS for success case.
Note that, EXIT_SUCCESS or 0 are both same.

-레이스 컨디션

:쉽게 말하면 일종의 바꿔치기라고 할 수가 있다.
 관리자의 권한으로 실행되는 프로그램 중간에 끼어들어 자신이 원하는 작업을 하는 것!!!!
 (심벌릭 링크를 이용할 수가 있다.)

1.심벌릭 링크
: 윈도우의 바로가기와 비슷하다. 리눅스의 심벌릭 링크는 ln 명령어에 -s 옵션을 주어 생성 할 수가있다.
  레이스 컨디션에서 심벌릭 링크를 사용하는 가장 큰 특징은 예를 들어 a이라는 파일에 ln -s a b 명령어를 실행하여 b라   는 심벌릭   링크 파일을 만들었다. 이때 원본파일인 a를 제거해도 링크파일 b는 a라는 이름의 파일을 계속 바라본다. 즉   기존 내용와 다르지만 파일이름은 같은 a를 다시 생성해도 링크파일 b는 a를 바라본다.

 지금 하는 레이스 컨디션에서는 /etc/shadow를 이용한다.(패스워드가 저장된 /etc/paswwd도 이용이 가능하긴 하다.) /etc/shadow /etc/passwd 파일내의 패스워드 필드를 /etc/shadow 파일에 암호화하여 저장하는 파일이다.




앞에서 설명한듯, touch 명령어로 test파일을 생성한뒤 test파일에 /etc/shadow에서 얻어낸 root패스워드에 대한 정보를 입력한다. (&를 붙혀 백그라운드로 실행) sleep(25) 코드 때문에 파일을 쓰기전까지 25초의 시간내에 기존의 test파일을 삭제하고 /etc/shadow파일을 가리키는 test를 가진 심벌릭링크 파일을 생성하여 심벌릭링크 파일인 test에 /etc/shadow에서 얻은 루트정보가 입력되어야한다. root: xxxxxxxxxxxxxxxxxxx:16582:99999:7:::에서 xxxxx부분은 root패스워드를 암호화한 정보이다. 이것을 root::16582:99999:7:::를 입력하여 root패스워드를 넣지 않음으로써 관리자의 권한을 얻을 수가 있다.
vi 에디터를 이용하여도 권한 상승을 할 수 있다는 것을 알게되었다.
vi에디터의 위치는 /usr/bin/vi 에 있다!!!


-vi 에디터로 명령어를 실행한다. (콜론(:) !표 다음 실행할 프로그램을 적으면 프로그램이 실행된다. 여기서는 /bin/bash를 실행하였다.


명령어 id로 확인해보니 일반사용자 권한에서 루트권한을 얻을 것을 볼 수가있다.

/etc/shadow 파일과 같이 관리자 소유의 파일은 일반 계정으로는 읽을 수 없음!!!
하지만 setuid 비트가 주어진 more 명령을 이용하면 /etc/shadow 파일을 읽기 가능하다






#include <stdio.h>
int main()
{
     setuid(0);                //setuid를 0으로 만듬 즉 파일 소유자의 권한을 가지겠다는 뜻
     setgid(0);                //setgid를 0으로 만듬 즉 파일 소유 그룹의 권한을 가지겠다는 뜻
     system("/bin/bash");  //system함수를 이용하여 bash를 실행
}