-
[pwnable.kr][Toddler's Bottle] 2. collisionWargame/pwnable.kr 2019. 7. 16. 02:37
MD5 해시 충돌에 관한 문제이다. ID: col / PW: guest로 접속하여 파일을 확인해보았다. col의 소스코드를 확인해보자. main을 먼저 보면, 인자가 20 bytes이어야 하고, hashcode와 check_password(인자)가 같아야 flag가 출력된다는 것을 알 수 있다. 그렇다면 check_password 함수를 자세히 살펴보자. unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i
-
[pwnable.kr][Toddler's Bottle] 1. fdWargame/pwnable.kr 2019. 7. 15. 19:49
pwnable.kr의 첫 번째 문제는 fd(File Descriptor)에 대한 문제이다. 먼저 파일 디스크립터에 대해 잘 모른다면 아래 설명을 참조하자. ...더보기 파일 디스크립터(File Descripter)란? 리눅스에서 파일을 읽고 쓰기 위해서는 반드시 파일을 open해야 한다. 만약 프로세스가 실행중에 이미 존재하는 파일을 open하거나 새로운 파일을 생성해달라고 커널에 요청하면, 커널은 해당 파일에 대해 '파일 디스크립터'라는 0 이상의 정수값을 반환한다. 리턴된 파일 디스크립터 값은 후에 프로세스가 read(), write()와 같은 시스템콜 함수를 이용하여 특정 파일에 접근할 때 인자로 사용된다. 즉, 파일 디스크립터란 프로세스에서 특정 파일에 접근할 때 사용하는 일종의 인덱스 값이다. ..
-
[LOS] 1. gremlin 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 15. 16:35
문제로 들어가면 상단에 쿼리문이 출력되어 있고, 아래에는 해당 웹페이지의 코드가 나와있다. 소스코드를 간단히 살펴보면, preg_match 함수로 id와 pw의 특정 문자열을 필터링하고 있다. 또한 입력받은 id와 pw를 확인하여 쿼리문이 정상적으로 수행되면 문제가 해결된다. 따라서 SQL 인젝션을 이용하여 쿼리문이 항상 true를 반환할 수 있도록 id와 pw의 인자를 조작하면 된다. select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}' select id from prob_gremlin where id='1' or '1' and pw='1' or '1' 위와 같은 SQL문이 전송될 수 있도록 현재 페이지의 URL 뒤에 ?id=1..
-
[시스템해킹 #5] RET SLED, FEBPEVI$ION/SYSTEM HACKING 2019. 6. 24. 22:45
[RET SLED] ret: 어셈블리어 명령어. POP EIP, JMP EIP RET: 리턴 어드레스 어셈블리어 명령어인 ret과 리턴 어드레스를 의미하는 RET은 철자가 같아 혼동의 여지가 있다. 이 둘의 구분을 위해 어셈블리어 명령어인 ret을 '가젯'이라 부르고, ret의 주소를 '가젯 주소'라 한다. (하지만 보통 가젯과 가젯 주소는 어셈블리어 ret의 주소로 혼용되곤 한다.) 가젯은 코드 영역에 위치하기 때문에 컴파일 시에 결정되고 고정적이다. RET SLED의 목적은 ret(어셈블리어) 명령을 한번 더 실행시킴으로써 shellcode를 실행시키는 것이다. 리턴 어드레스(RET)에 ret 가젯을 삽입함으로써 리턴 어드레스를 뒤로 지연시키기 때문에 SLED라고 하며, 삽입된 ret 가젯을 통해 s..
-
[와이어샤크 #5] 지연 탐지EVI$ION/Wireshark 2019. 6. 24. 11:56
※ 실습 파일: http-openoffice101b.pcapng, http-pcaprnet101.pcapng [Time 열로 지연 문제점 검출하기] 간혹 패킷 전송이 너무 지연되는 문제가 발생하는 경우가 있다. 이를 검출하기 위해서는 Time 열을 확인해야한다. Time 열을 통해서 대기 시간(Latency, 전달 지연)을 알 수 있다. 대기 시간이란, 호스트가 request를 보내고 response를 받을 때까지의 시간 간격을 말한다. Time 열과 Info 열을 같이 확인하면 경로, 클라이언트, 서버 입장에서의 대기 시간을 각각 검출할 수 있다. 1) 경로 전달 지연 : RTT (Round Trip Time, 왕복 시간) 전달 지연 경로 전달 지연이 발생하는 원인은 아래와 같다. ▶ 우선 순위에 따라..
-
[Webhacking.kr] Challenge 48 풀이Wargame/Webhacking.kr 2019. 5. 25. 19:48
48번 문제로 들어가자마자 XSS가 일어났다는 팝업창이 뜬다. 팝업창을 끄면, 파일과 메모를 업로드할 수 있는 페이지가 있다. 아무 파일이나 업로드해 전송해보았다. (파일명은 3글자를 넘을 수 없다고 해서 확장자를 지우고 전송했다.) 전송해보니 내가 입력한 메모와 함께 upload file과 delete 버튼이 생성됐다. upload file을 클릭했더니 null이라는 메시지만 출력되었고, Delete를 클릭했더니 메시지와 업로드 파일이 삭제되었고 URL도 바뀌었다. 파일을 삭제한 후, 삭제된 파일 경로(webhacking.kr ~~ /upload/[파일명])로 들어가보면 에러가 출력된다. 이를 통해 delete 클릭 시에는 메모 뿐만 아니라 업로드한 파일도 삭제한다는 것을 알 수 있다. 즉, 파일 삭제..
-
[Webhacking.kr] Challenge 41 풀이Wargame/Webhacking.kr 2019. 5. 25. 18:33
이번 문제는 파일 업로드 취약점과 관련된 문제이다. 일단 아무 빈 파일을 업로드해봤더니 Done~이라는 메시지가 출력됐다. index.phps로 들어가서 소스를 확인해보자. 업로드한 파일명을 $fn에 저장하고, 파일명에 /, \, htaccess, .htaccess이 들어가거나 파일명이 10자가 넘어가면 페이지를 종료한다. 또한 파일명에 .(온점), 이 들어가면 이를 공백으로 필터링한다. 그 다음 $cp 변수에 웹서버에 저장된 임시 파일명을 저장하고, copy 함수를 사용하여 해당 파일을 $hidden_dir/$fn으로 복사한다. 그리고 $hidden_dir/$fn 파일을 쓰기 모드로 열어 패스워드를 파일에 입력하면 코드가 종료된다. 따라서 패스워드를 알아내기 위해서는 $hidden_dir을 알아야 한다..
-
[Webhacking.kr] Challenge 47 풀이Wargame/Webhacking.kr 2019. 5. 23. 15:39
47번 문제는 메일 헤더 인젝션과 관련된 문제이다. 47번 문제의 소스를 보니 index.phps로 가보라고 나와있다. index.phps로 접속해보자. 코드를 보니 mail 함수가 사용된 것을 확인할 수 있다. mail(수신자, subject, message, header) 함수는 PHP에서 이메일을 보낼 때 사용하는 함수이다. mail 함수의 인자 중 하나인 header는, 메일 헤더의 마지막에 추가하고 싶은 헤더 내용을 입력할 수 있는 인자이다. 일반적으로 header의 인자로 들어가는 추가 헤더에는 3가지가 있다. from: 메일 송신자의 주소 cc(carbon copy): 메일의 참조인. 수신자 외 다른 사람에게도 메일을 수신한다. bcc(blind carbon copy): 숨은 참조인. 수신자..