분류 전체보기
[LOB] - darkknight -> bugbear 풀이
[LOB] - darkknight -> bugbear 풀이
2019.10.06/* The Lord of the BOF : The Fellowship of the BOF - bugbear - RTL1 */ #include #include main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') { printf("stack betrayed you!!\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } 이번 문제는 필자가 좋아하는 RTL 공격이다. 스택의 주소를 사용할 수 없으므로 공유 라이브러리 함수를 사용해보자. bugbear 바이너리를 분석..
[BaekJoon] - 1004번 어린왕자
[BaekJoon] - 1004번 어린왕자
2019.10.051004번: 어린 왕자 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 첫째 줄에 출발점 (x1, y1)과 도착점 (x2, y2)이 주어진다. 두 번째 줄에는 행성계의 개수 n이 주어지며, 세 번째 줄부터 n줄에 걸쳐 행성계의 중점과 반지름 (cx, cy, r)이 주어진다. 입력제한은 다음과 같다. (-1000 ≤ x1, y1, x2, y2, cx, cy ≤ 1000, 1 ≤ r ≤ 1000, 1 ≤ n ≤ 50) 좌표와 반지름 www.acmicpc.net 근무 하면서 푼 문제이다. 고민하다가 후임이 좋은 풀이법을 알려주었다. 출발점과 도착점이 주워지고, 행성의 개수가 7개라 하면 아래 표 처럼 만들 수 있다. 원은 (x-x1)**2 + (y-y1)**2..
[LOB] - troll -> vampire 풀이
[LOB] - troll -> vampire 풀이
2019.10.05/* The Lord of the BOF : The Fellowship of the BOF - vampire - check 0xbfff */ #include #include main(int argc, char *argv[]) { char buffer[40]; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] != '\xbf') { printf("stack is still your friend.\n"); exit(0); } // here is changed! if(argv[1][46] == '\xff') { printf("but it's not forever\n"); exit(0); } strcpy(buffer, argv[1]); printf..
[LOB] - orge -> troll 풀이
[LOB] - orge -> troll 풀이
2019.10.05/* The Lord of the BOF : The Fellowship of the BOF - troll - check argc + argv hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; // here is changed if(argc != 2){ printf("argc must be two!\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { printf("stack is still your..
[LOB] - darkelf -> orge 풀이
[LOB] - darkelf -> orge 풀이
2019.10.05/* The Lord of the BOF : The Fellowship of the BOF - orge - check argv[0] */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } // here is changed! if(strlen(argv[0]) != 77){ printf("argv[0] error\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1..
[LOB] - wolfman -> darkelf 풀이
[LOB] - wolfman -> darkelf 풀이
2019.10.04/* The Lord of the BOF : The Fellowship of the BOF - darkelf - egghunter + buffer hunter + check length of argv[1] */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { printf("stack is still yo..
[LOB] - orc -> wolfman 풀이
[LOB] - orc -> wolfman 풀이
2019.10.04/* The Lord of the BOF : The Fellowship of the BOF - wolfman - egghunter + buffer hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { printf("stack is still your friend.\n"); exit(0); }..
[LOB] - goblin -> orc 풀이
[LOB] - goblin -> orc 풀이
2019.10.04/* The Lord of the BOF : The Fellowship of the BOF - orc - egghunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { printf("stack is still your friend.\n"); exit(0); } strcpy(buffer, argv..
[LOB] - cobolt -> goblin 풀이
[LOB] - cobolt -> goblin 풀이
2019.10.04/* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } 이번 문제는 작은 크기의 buffer 에 gets() 함수로 사용자에게 입력을 받고 있다. 이전 문제 풀이와 똑같이 RTL 공격 기법을 사용할 것이다. RTL에 대한 설명은 아래 링크에 설명되어 있다. https://lactea.kr/entry/bof-Return-to-Libc-RTL-%EA%B3%B5%EA%B2%A9-%EA%B8%B0%EB%B2%95?category=866608 [bof] - Return to Libc (RTL)..
[LOB] - gremlin -> cobolt 풀이
[LOB] - gremlin -> cobolt 풀이
2019.10.04/* The Lord of the BOF : The Fellowship of the BOF - cobolt - small buffer */ int main(int argc, char *argv[]) { char buffer[16]; if(argc cobolt 문제이다. 위 코드를 보면 buffer의 크기가 16bytes로 작아진 것을 볼 수 있다. 즉, buffer에 shellcode를 넣을 수 없다는 뜻이다. 따라서 필자는 RTL 공격 기법을 사용할 것이다. RTL 공격 기법에 대한 설명은 아래 링크..
[LOB] - gate -> gremlin 풀이
[LOB] - gate -> gremlin 풀이
2019.10.04/* The Lord of the BOF : The Fellowship of the BOF - gremlin - simple BOF */ int main(int argc, char *argv[]) { char buffer[256]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } LOB 첫번째 문제이다. buffer 변수의 크기는 256bytes 인데, strcpy에서 argv[1]의 값을 buffer로 값을 복사하는 과정에서 bof 공격이 가능하다. gdb로 분석하기 위해 gate 바이너리 파일을 복사한 후 분석을 진행하겠다. [gate@localhost gate]$ mkd..
[webhacking.kr 2019 old] - challenge 18
[webhacking.kr 2019 old] - challenge 18
2019.10.01sql injection 문제이다. 소스 보기를 하면 몇몇개의 문자들이 필터링 되어 있다.
[webhacking.kr 2019 old] - challenge 17
[webhacking.kr 2019 old] - challenge 17
2019.10.01이번 문제는 입력하는 곳이 주어지고 마찬가지로 javascript로 값을 비교하여 어떤 곳으로 요청을 보내는 문제이다. 아래 코드는 문제 내에 있는 javascript 문제이다. unlock=100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+1/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+100*10*10+1..
[webhacking.kr 2019 old] - challenge 16
[webhacking.kr 2019 old] - challenge 16
2019.10.01이번 문제의 html 코드를 보면 아래와 같이 javascript 코드가 있는 것을 볼 수 있다. document.body.innerHTML+="*"; function mv(cd){ kk(star.style.left-50,star.style.top-50); if(cd==100) star.style.left=parseInt(star.style.left+0,10)+50+"px"; if(cd==97) star.style.left=parseInt(star.style.left+0,10)-50+"px"; if(cd==119) star.style.top=parseInt(star.style.top+0,10)-50+"px"; if(cd==115) star.style.top=parseInt(star.style.top+0,..
[webhacking.kr 2019 old] - challenge 14
[webhacking.kr 2019 old] - challenge 14
2019.10.01이번 문제는 뭔가를 입력하는 곳이 있다. html 코드를 보면 javascript 코드로 어떠한 행위를 하는데, 아래 코드를 보자. function ck(){ var ul=document.URL; ul=ul.indexOf(".kr"); ul=ul*30; if(ul==pw.input_pwd.value) { location.href="?"+ul*pw.input_pwd.value; } else { alert("Wrong"); } } ul 값과 사용자가 입력한 값이랑 비교해서 같으면, GET 방식으로 요청을 보낸다. 간단하게 크롬 콘솔창에서 ul 값을 확인해 보겠다. var ul=document.URL; ul=ul.indexOf(".kr"); ul=ul*30; console.log(ul); 위 코드를 실행해보면..
[webhacking.kr 2019 old] - challenge 10
[webhacking.kr 2019 old] - challenge 10
2019.10.01위 문제의 소스 코드중 중요한 부분만 가져오면 아래와 같다. a 태그를 클릭하면 onclick 액션이 실행되는데, 왼쪽으로 1px 만큼 움직인다. 이 값이 1600px 이면 GET 방식으로 요청을 보낸다. O 이 문제를 풀기 위해서는 풀이 법이 다양하겠지만, 필자는 그냥 style 값에서 left 값을 1599px 값으로 수정한 후 a 태그를 클릭했다. 그럼 left 값은 1600px가 되고 조건에 맞게 되므로 문제가 풀리게 된다.
[webhacking.kr 2019 old] - challenge 8
[webhacking.kr 2019 old] - challenge 8
2019.10.01Access Denied!"); echo(htmlspecialchars($agent)); exit();}$db = dbconnect();$count_ck = mysqli_fetch_array(mysqli_query($db,"select count(id) from chall8"));if($count_ck[0] >= 70){ mysqli_query($db,"delete from chall8"); }$result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");$ck = mysqli_fetch_array($result);if($ck){ echo "hi ".htmlentit..
[webhacking.kr 2019 old] - challenge 6
[webhacking.kr 2019 old] - challenge 6
2019.10.01위 문제의 소스코드를 보면 id와 pw값을 각각 20번씩 base64로 인코딩하고 이를 각각의 문자로 치환하는 것을 볼 수 있다. 이 문제를 풀기 위해서는 user와 password 쿠키 값이 역으로 디코딩해서 최종적으로 user는 'admin'이 , password는 'nimda'가 나와야 한다. 따라서 'admin' 과 'nimda' 이 20번 base64로 인코딩하고 치환한 값을 얻기 위해서는 위의 소스코드의 일부를 가져와 아래 처럼 수정 후 실행한다. 실행하면 아래와 같은 결과가 출력이 된다. 이를 user 쿠키과 password 쿠키에 값을 각각 넣어 수정하고 재요청 보내면 문제가 풀리게 된다.
[webhacking.kr 2019 old] - challenge 1
[webhacking.kr 2019 old] - challenge 1
2019.10.01위 문제의 소스 코드를 보면 아래와 같다. 'user_lv' 이라는 쿠키가 없을 경우 쿠키를 생성하고 값은 1로 설정한다. ---------------------
[bof] - RTL Chaining 공격 기법
[bof] - RTL Chaining 공격 기법
2019.09.29Return to Libc Chaining 0x01 What is it? RTL 공격에서 RET 주소를 변조하여 하나의 공유 라이브러리 함수를 호출 했다면, RTL Chaining 공격 기법은 RTL 공격 기법을 응용하여 여러개의 공유 라이브러리 함수를 호출 할 수 있다. 0x02 Prior knowledge 이 공격 기법을 처음 보고 이해하기는 힘들 수도 있다. (필자가 그랬다…ㅇㅇ) 이 글을 이해하기 위해서는 호출된 함수가 인자를 가져오는 방법과 Return to libc 공격 기법을 이미 숙지 했다라는 기준으로 설명을 하겠다. (모른다면 링크 클릭) Return to Libc 아래와 같은 코드가 있다고 가정하자. read 함수에서 buf 변수 크기 이상으로 값을 받고 있다. 여기서 bof가 발생하는..
[bof] - Frame faking (Fake EBP) 공격 기법
[bof] - Frame faking (Fake EBP) 공격 기법
2019.09.250x01 what is Frame faking Frame faking 공격은 RET까지 덮어 쓸 수 있는 상태이고 RET에 스택 또는 라이브러리 주소 등을 덮어 씌울 수 없는 상황일때 사용하는 공격 기법이다. 이 공격 기법은 SFP를 덮어씌우고 RET 주소를 leave 주소로 덮어씌워 buf에 있는 shellcode를 실행하게 할 수 있다. 0x02 Concept 이 글은 64bit를 기준으로 설명을 적었다. 우선 이 공격을 배우기 위해서는 LEAVE 명령어와 RET 명령어에 대해 알고 있어야 한다. LEAVE MOV ESP, EBP POP EBP RET POP EIP JMP EIP 스택이 아래처럼 구성이 되어 있다고 가정하자. 이 스택을 잘 기억해야 헷갈리지 않을 것이다. (아래로 갈수록 high ad..
[bof] - Return to Libc (RTL) 공격 기법
[bof] - Return to Libc (RTL) 공격 기법
2019.09.250x01 What is it? RTL 공격은 스택에 NX-bit 보안 기법이 적용 되었을때 사용하는 공격 기법이다. NX란 Never eXecutable stack 을 줄인 말로 "스택에서 코드 실행 불가" 라는 보안 역할을 한다. NX-bit 때문에 스택에서 shellcode를 삽입하고 이 주소를 RET에 overwrite 해도 실행되지 않아 공격이 실패하게 된다. 이를 우회 하기 위한 기법이 Return to Libc 이다. Return to Libc은 공유 라이브러리 함수의 주소를 가져와 RET에 overwrite 하고 이를 호출하는 공격 기법이다. 바이너리에 호출하려는 함수가 없어도 이미 메모리에 적재되어 있는 공유 라이브러리 함수의 주소를 가져와서 사용이 가능하다. 0x02 Prior knowl..
[bof] - Return to Shellcode 공격 기법
[bof] - Return to Shellcode 공격 기법
2019.09.25# What is it?? Return to Shellcode는 Return address 값을 shellcode가 저장된 주소로 변경해, shellcode를 호출하는 방식이다. Return address 값은 보통 어셈블리어에서 CALL 또는 RET 명령어를 호출 후 스택에 저장이 된다. # CALL & RET CALL 명령어는 다음과 같은 행위가 이루어진다. CALL PUSH ReturnAddress JMP CALL 명령어는 CALL 명령어 다음 명령어의 주소 값을 stack에 저장하고 피연산자 주소로 이동한다. 현재 ESP가 다음 명령어로 이동할 주소 값을 가르키고 있고, 이때 RET 명령어는 POP 명령어로 EIP에 저장하고 해당 주소로 이동한다. RET POP EIP JMP EIP # Previ..
ECB 설명 및 취약점
ECB 설명 및 취약점
2019.09.17Concept ECB(Electronic codebook)는 암호화하려는 메시지를 여러 불록으로 나누어 각각 암호화 하는 방식이다. 암호화를 하기 위해서는 반드시 암호화에 쓰이는 대칭키 의 길이와 각 블록에 들어있는 길이가 같아야 한다. 예를들어 다음과 같은 평문이 있다고 가정하자. 123456789abcdefg 우선 암호화를 하기위한 대칭키 K(6자리)가 있고 위 평문을 6개씩 묶어 블록으로 나눈다. 123456 789abc defg 3번째 defg는 ECB 암호화를 하기에는 규칙에 맞지 않아, 패딩(Padding)이라는 것을 해준다. 이는 빈 공간을 채우는 역할로 여러가지 빈공간을 채우는 방식이 있지만 0으로 채워 넣겠다. 123456 789abc defg00 각 6개씩 3개의 블록으로 나누어 졌고,..
editor.md의 기능인 markdown online 에 저장 기능 넣기
editor.md의 기능인 markdown online 에 저장 기능 넣기
2019.09.12# Markdown online 온라인으로 markdown 에디터가 있으면 얼마나 좋을까라고 생각하면서 찾다보니 editor.md 라고 웹브라우저 markdown 에디터가 있었다. editor.md 링크 정말 내가 원하는 tool 이지만 한가지 아쉬운 점이 있었다. 현재 작성중인 markdown 문서를 저장하는 기능이 없다는 것이다. 그래서 커스터마이징 하게 되었다. Install customized editor.md 우선 editor.md를 설치하고 /editor.md/ 로 가면 example 이라는 디렉토리가 있을 것이다. Lactea Github 에 들어가서 첨부된 파일을 다운 받는다. 다운받은 파일을 example 디렉토리에 다음과 같은 구조로 파일을 저장한다. example └───> saveF..
apache2 404 not found page 바꾸기
apache2 404 not found page 바꾸기
2019.09.12상태 코드를 공격자에게 그대로 노출 시키는 것은 공격자에게 서버 구조를 조금이나마 유추가 가능해지기 때문에 숨기는 것이 좋다. apache2는 /etc/apache2/sites-available/ 디렉토리에 현재 운용되고 있는 conf 파일을 수정한다. ServerName lactea.kr DocumentRoot ....... ........ ErrorLog ${APACHE_LOG_DIR}/lactea_error.log CustomLOG ${APACHE_LOG_DIR}/lactea_access.log combined Errordocument 404 "/error.html" 위 코드 처럼 Errordocument [상태코드] [보여줄 페이지] 를 적어준다. 필자는 404 not found 일 경우 /err..
apache2 서버 정보 숨기기
apache2 서버 정보 숨기기
2019.09.12공격자로 부터 서버가 사용하는 프로그램의 이름이나 버전이 노출 될 경우, 침투하는데 좋은 정보를 줄 수 있기 때문에 이를 숨겨야 한다. apache2 인 경우 /etc/apache2/conf-available/ 디렉토리에 security.conf 파일을 수정한다. security.conf 파일을 수정하면 아래 설정 값을 볼 수 있을 것이다. ServerTokens Full ServerSignature On ServerTokens는 응답 헤더에 서버 정보를 주게되고, ServerSignature는 404 에러 페이지가 뜰 경우 서버 정보를 출력하는 옵션이다. 이를 아래 처럼 저장한 후 apache2를 재시작 해준다. ServerTokens Prod ServerSignature Off curl 로 요청시 아..
구글, 데이터 남용 신고하면 큰 상금 준다
구글, 데이터 남용 신고하면 큰 상금 준다
2019.09.02구글, 데이터 남용 신고하면 큰 상금 준다 : 앱에서의 데이터 남용 사례를 구글에 신고하면 큰 상금을 준다고 합니다. 구글 플레이 스토어에 등록된 앱 중 1억 번 이상의 설치 수를 기록 중인 것들에서 취약점을 발견할 경우에도 구글이 포상을 합니다. 개발사가 따로 버그바운티를 운영할 경우 보안 전문가는 두 번의 상금을 탈 수 있는 것이죠. 상금 자체도 3~4배로 대폭 늘렸습니다. 요 몇 년 구글 플레이 스토어가 자꾸 뚫리다보니 구글이 급진적인 처방을 내린 것으로 보입니다. https://www.boannews.com/media/view.asp?idx=82664 [9.2 보안 WITS] 텍사스 총격, 허리케인 도리안, 사이버전 세계의 전쟁, 기후, IT, 테러, 보안 소식을 전하는 보안 WITS입니다. 두 ..
Paypal에서 발견된 HTTP Request Smuggling 설명 및 예제
Paypal에서 발견된 HTTP Request Smuggling 설명 및 예제
2019.08.30========= `추가 (2020-08-10)` ======== 이 공격에 좀 더 공부를 해서 portswigger 문서를 번역한 pdf 파일을 공유한다. 글 본문의 내용과 비슷하지만 아래 PDF 문서를 보는 것을 추천한다. 아래 번역글은 portswigger에서 얻은 자료들을 바탕으로 만들어 졌다. 입문: HTTP Request Smuggling 이란 HTTP Request Smugging vulnerability test HTTP Request Smugging Exploit `Exploit using python` python 으로 http request smuggling tool 만들기 소스 코드는 github 에서 볼 수 있으니 참고 바란다. 모든 기능은 완성되지 않았지만, 사용하는데 문제는 없..
공격자가 암호화된 연결을 감시 할 수 있는 새로운 블루투스 취약점
공격자가 암호화된 연결을 감시 할 수 있는 새로운 블루투스 취약점
2019.08.22산업 디바이스, 스마트 IoT 디바이스, 랩탑, 스마트폰을 포함한 블루투스가 탑제된 수십억대 디바이스는 공격자가 두대의 디바이스 사이에 전송된 데이터를 감시하도록 할 수 있는 매우 심각한 취약점이 발견되었다. CVE-2019-9506이라고 불리는 이 취약점은 '암호화 키 협상 프로토콜'이 두대의 장비에 보안 연결을 할때 두대의 블루투스 BR/EDR 디바이스가 암호화 키를 위한 앤트로피 값을 선택하는 방식에서 나타난다. Key Negotiation of Bluetooth(KNOB) 공격이라고 불리는 이 취약점은 원격 공격자가 가까운 거리에서 타겟 디바이스에게 연결된 두 디바이스 사이에 암호화된 블루투스 트래픽을 조작하거나 감시하거나 가로채는 것이 가능하다. 블루투스 BR/EDR(Basic Rate/Enha..