목록Security (17)
농소
XSS는 Cross-Site Scripting의 약자로 웹 게시판이나 웹 메일 등에 스크립트 코드를 넣어 개발자가 원하지않는 행위를 만들게 하는 치명적인 공격기법중 하나이다. 이번 게시글은 위 공격기법을 이용하여 악성 스크립트가 삽입된 웹 서버에 접속한 사용자들을 대상으로 악성코드가 심어진 실행파일( 여기서는 쉘코드로 대체하겠다. )을 실행시키도록 하여 관리자 권한을 획득하여 키로거를 실행시키는 것을 해보도록 하겠다. 먼저 Kali 리눅스로 칼리리눅스 쪽으로 원격접속하도록 하는 쉘코드를 만들도록 하자 칼리리눅스(공격자)쪽으로 원격접속 하도록 하는 update.exe라는 실행파일을 만들었다. 해당 악성 실행파일이 제대로 적용되는지 확인을 해보자 meterpreter를 실행시키고페이로드를 설정해줍니다. 네트..
간단한 인젝션 공격 및 상품 가격을 변조하는 공격을 해보고자 합니다 해당 웹 쇼핑몰은 취약점이 있는 쇼핑몰로 정보보안 교육용으로서 해당 이미지를 사용하여 실습해보겠습니다. 우선 프록시 프로그램인 Burp Suite를 실행시키고 intercept를 off로 해둡니다. 우선 쇼핑몰 메인 페이지 입니다. 회원가입 없이 간단하게 injection을 해봅니다 해당 쇼핑몰의 로그인시도 질의는 SELECT ID,PW FROM USER WHERE ID=' ' AND PW=' '로 되어있습니다 앞서 말했듯이 공부용으로 만든 사이트 이므로 이러한 질의는 injection 공격에 아무런 방어책을 설정하지 않았기 때문에 쉽게 공격에 노출이 됩니다. [ ID = 1' or 1=1# ] // #은 DB에서 주석을 의미 [PW =..
쉘코드 ( Shellcode ) - 공격자가 실행하길 원하는 코드를 미리 작성 - 해당 공격코드를 타겟 프로세스의 메모리에 강제로 업로드 - 타겟 프로세스 메모리에 실행하고자 하는 명령들을 올려놓고 실행 우선 메모리에 올리려면 반드시 알아두어야 하는 것이 있다. 1. 기계어로 작성되어 있어야 한다.2. 데이터 세그먼트 사용 불가능. 왜 기계어로 사용해야하고 세그먼트를 사용하지 못하는건가? 이유는? 1) C로 작성 -> 기계어 추출 하는 경우 - ELF파일 전체가 메모리에 있어야만 명령어를 실행할 수 있다. - 여기선 기계어 코드만 메모리에 존재하기 때문에 실행될 수 없다. 해결책 - 세그먼트 없이 실행 가능하도록 스택형식으로 만들어야함. - 위와 같이 라이브러리 함수의 주소가 다른 프로세스에서의 라이브러..
취약점 - 에러의 한 종류 - 모든 취약점은 에러다. - 하지만 모든 에러는 취약점이라고 할 순 없고, 여러 에러중에 취약점이 발생 메모리 변조 버퍼(스택) 오버 플로우 - 1995년도에 처음 발표 - smashing the stack for fun and profit // phrack 사이트에서 이런 문서가 나옴, 첫 시작 - by Aleph One (바이너리 분석에서 유명한 분) 이러한 버퍼 오버플로우가 생기는 이유는 바로 취약한 함수를 사용하기에 발생. 취약한 함수 : scanf, gets, strcpy, . . . 그중 strcpy를 예를 들자면 우선 두번째 인자값을 buffer2에 복사하는 c코드를 작성하였다.이제 실행파일을 만들고 여러 테스트를 해보면 1. 20바이트를 넘지않는 정상적인 값을 ..
리버싱을 통해 해당 실행파일의 패스워드를 찾기위한 연습을 진행한다. 실행을 해 보았더니 패스워드를 입력하라는 input이 호출되고 아무번호나 입력했더니 wrong password라는 false를 반환한다.true값을 반환받기 위해 이 파일을 분석해 보겠다. 우선 gdb로 바이너리를 asm로 변환시킨 모습이다. 자 이제부터 처음부터 차근차근 분석 해 보겠다. 1 우선 프롤로그를 설정해 주었고, printf를 calll하고 있는걸 봐선 앞에 push값은 주소값을 보아 segment영역 일 것이고 전역변수인 것을 알 수 있다. 확인해 보았더니 Input password: 라는 문자열이 나왔다. 이 과정을 c로 변환해 보면 int main(){ printf("Input password: "); return 0;..
1. 디버거 사용법: GDB (콘솔상에서 사용하는 디버거) - bug : 프로그램에 존재하는 잠재적인 오류 - de-bugging : 버그를 찾는 행위 - de-bugger : 버그를 찾는데 도와주는 도구 일반 사용자 shell(user)가 메모리에 접근할 수 없고, 커널은 메모리에 접근권한을 가지고있다.우리가 프로세스에 접근하기 위해선 디버거를 이용하여 메모리에 접근 할 수 있다. 유명한 디버거 IDA, OLLY.. GDB 사용법 - 실행 : run - 종료 : quit 1). #>gdb 2). #>gdb (gdb) file 2. 자주 사용하는 GDB 명령어, 기능 - 명령어 축약 : (r)un - r만 입력해서 run으로 인식 - 명령어 완성 : r - r로 시작하는 명령어를 보거나 완성 할 수 있다..
시스템 프로그래밍 게임 프로그래밍 - 게임 관련 라이브러리 사용 네트워크 프로그래밍 - 소켓을 이용한 네트워크 라이브러리 사용 시스템 프로그래밍 - 윈도우즈 : win API (Advanced Programing Interface) - 리눅스 : system call 시스템 호출(System call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. os를 크게 나누면 2가지로 나눌 수 있다 1). shell(user) - 사용자 영역 (목적 - h/w제어)2). H/W(Device) - shell에서 하드웨어에 바로접근하게되면 문제가발생 한다. - 그래서 중간에 커널이 존재한다. 또, 장치를 출력하고싶으면 interface를 이용 - in..
asm 지역변수 배열활용 이번에 asm에서 배열을 지역변수로 나타내려면 어떻게 표현해야 하는지 알아보자 스택이 쌓일 수록 메모리주소값은 작아지는데 배열도 마찬가지로첫주소가 다음주소보다 높다는 생각을 할 수도 있다.하지만 배열같은경우 c에서 처럼 낮은 주소부터 높은 주소로 표현된다. 즉, 배열의 시작주소는 지정된 크기중 가장 낮은 주소에 위치한다. 우선 이전에 했던 입력한 문자열을 반대로 출력하는 코드를 지역변수로 변환해서 asm으로 작성해보겠다. C 언어 int main(){ char buffer[1024] = {0,}; int len =0; printf("input: "); gets( buffer ); while(buffer[len] !=0) {len++ } len--; while( len >= 0) ..
프로세스 메모리 구조 우선 메모리 구조를 확인하기 위해서 sleep이라는 함수를 이용해서 현재 동작중인 프로세스 메모리구조를 확인해 보겠다. 현재 sleep을 이용한 a.out실행파일이 동작중임을 알 수 있고 pid가 802인것을 확인 할 수 있다. 메모리 구조를 확인하기 위해서 proc 임시 디렉토리 -> pid 디렉토리 -> maps를 보면 확인할 수 있다. 자세히 살펴보도록 하자. 메모리 구조를 보았을때 0x00000000 - 0x08047999 범위까지는 사용을 하지않고 0x08048000부터 사용을 하는것을 알 수 있다 08048000-08049000 r-xp 000000..
반복문을 이용하여 정수 5개를 입력하고,입력한 정수들의 합을 구하는 코드를 작성하라. extern printfextern scanf segment .datainput db '%d', 00output db '%d', 10, 00 segment .bssbuffer resd 5len resd 1result resd 1 segment .textglobal main main: mov eax, 0 ; eax레지스터 초기화 mov dword [result], eax ; result값 0으로 초기화 mov dword [len], eax ; len값 0으로 초기화 while1: mov eax, dword [len] ; while문 buffer[0] ~ [4] 까지 cmp eax, 5 je while1_en..