보안
FTZ level14
FTZ Level14 ID : level14 PW: what that nigga want? 먼저 ls -l을 이용해 어떤 파일이 있는지 살펴보자 attackme 프로그램에 level14의 권한으로 setuid가 걸려있는 것을 확인할 수 있다. 우선 hint의 내용을 보자 cat hint #include #include main() { int crap; int check; char buf[20]; fgets(buf, 45, stdin); #buf 변수에 45바이트만큼 입력받음 if (check==0xdeadbeef) { setreuid(3095, 3095); system("/bin/sh"); #/bin/sh 쉘 실행 } } fgets 함수에서 BOF가 일어날 수 있다!! 그런데 fgets는 45byte만큼..
FTZ level13
FTZ Level13 ID : level13 PW: have no clue 먼저 ls -l을 이용해 어떤 파일이 있는지 살펴보자 attackme 프로그램에 level13의 권한으로 setuid가 걸려있는 것을 확인할 수 있다. 우선 hint의 내용을 보자 cat hint #include int main(int argc, char *argv[]) { long i=0x1234567; char buf[1024]; setreuid(3094, 3094); if(argc>1) #argv로 받는 입력이 1개 이상 있다면 strcpy(buf, argv[1]); #입력 buf로 복사 if(i != 0x1234567){ printf(" Warning: Buffer Overflow !!! \n"); kill(0, 11); ..
FTZ level12
FTZ Level12 ID : level12 PW: it is like this 먼저 ls -l을 이용해 어떤 파일이 있는지 살펴보자 attackme 프로그램에 level13의 권한으로 setuid가 걸려있는 것을 확인할 수 있다. 우선 hint의 내용을 보자 cat hint #include #include #include int main(void) { char str[256]; # 256바이트 크기의 문자형 배열 setreuid(3093, 3093); #level13의 프로세스 ID printf("문장을 입력하세요.\n"); gets(str); #gets 함수로 배열 str에 입력을 받음 printf("%s\n", str); #입력받은 내용 출력 } gets 함수에서 BOF가 일어날 수 있다!! 우리의..
Webhacking.kr 41번
파일을 업로드할 수 있는 폼들이 있다. 우선 소스를 보자! 소스코드를 보면 파일명에서 ., , /를 필터링하고 복사해서 upload_dir에 저장하고 그 위치에 flag를 write하는 것을 알 수 있다. 그럼 upload_dir를 찾아보자! 파일 이름을 엄청 길게 해서 업로드를 하면 오류 메시지와 함께 해당 디렉토리의 위치를 알려준다! 다만 로컬에서 하면 파일 이름을 아무리 길게 해서 만들어도 소용이 없으므로 burpsuite 같은 툴을 이용해주자! 찾은 디렉토리와 업로드 했던 파일을 url에 써주면 flag를 알 수 있다!
HackCTF read file
이번에는 HackCTF의 Web 문제 중 Read File 문제를 풀어보자! File is flag.php라고 나와있다. 뭐 바로 풀리진않겠지만 url에 flag.php를 넣어보자! 음 flag가 필터링 되어있을까? url 아무 곳에나 flag를 넣어보자 구글 주소 사이에 flag를 넣어도 아무 문제 없이 처음 페이지가 잘 나오는 것을 보아 flag가 필터링되어있음을 알 수 있다! flag가 필터링되어도 flag.php가 출력되게끔하면 성공!
Webhacking.kr 6번
webhacking.kr 6번 문제를 풀어보자 첫 화면에 들어가면 ID와 PW가 보인다. 먼저 소스를 보자 코드를 정리해보면 user 쿠키값이 없을 때 val_id 값에 guest, val_pw 값에 123qwe를 저장하고 20번 반복하면서 val_id, val_pw를 인코딩하고 항목 안에 1~9의 숫자가 있으면 해당되는 특수문자로 대체한 뒤 user 쿠키와 password 쿠키에 저장하는 코드이다. 디코딩 부분도 마찬가지로 user와 password 쿠키값을 가져와서 각 특수문자에 대칭되는 1~9의 숫자로 치환하고 20번의 디코딩을 한 후 디코딩한 id가 admin이고 pw가 nimda면 문제가 해결된다. 따라서 admin과 nimda를 20번 인코딩한 후 숫자를 해당되는 특수문자로 바꾼 뒤 그 값들을..
Webhacking.kr 45번
webhacking.kr 45번을 풀어보자! 전형적인 id와 pw를 입력하는 SQL injection 문제다. 소스를 보자! id와 pw 둘다 addslashed() 함수를 적용하고 있다. addslashed() 함수는 문자열에 작은 따옴표, 쌍 따옴표, 역슬래시 문자가 포함되어 있다면 그 문자앞에 역슬래시를 붙여주는 함수다. 그리고 id 값은 멀티바이트 문자로 바꾸고 admin, select, limit, pw, =, >,
Webhacking.kr 44번
webhacking.kr 44번을 풀어보자! 어떠한 값을 제출할 수 있는 form이 있다. 우선 소스를 보자! id의 길이는 5이며 ls를 execute하라고 되어있다. system() 부분이 소스의 실행부분이기 때문에 이 부분에 맞게 id를 전송해야한다. system 구문에서 ls를 실행하기 위해 ';'ls 를 입력해 전송하자! 이 flag값을 URL에 붙여 전송하면 FLAG 값 얻을 수 있다!