LEVEL11의 힌트를 보겠습니다. strcpy만 봐도 이제 BOF 취약점을 이용해야 겠다는 것을 알겠죠? 일단, BOF 취약점을 생각하고 GDB를 통해 리버싱 해보겠습니다. dir을 보면 attackme라고 실행파일이 하나 있습니다. 소스파일은 없고, 덩그러니 있는 것을 보니 위에서 hint를 줬던 소스인가? 하다가 읽기 권한이 있고, setuid 권한이 있습니다. gdb로 소스를 보면 hint에서 나온 소스와 동일한 것을 알 수가 있습니다. 256바이트의 배열을 할당하고 setreuid를 이용해 level12의 권한(3092)를 획득하고 인자값을 할당한 배열에 복사한 후에 출력해 주는 동작을 하고 있습니다. 아래와 같이 프로시저 부분에서 0x108(264)과 0x8(8)을 빼줍니다. 힌트에서 보면 s..
level10에서 hint를 보겠습니다. ls -al을 보면 못보던 program이라는 디렉터리입니다. 하지만 root권한이라서 읽지도 못합니다. 분명히 program 안에는 단서가 있을텐데 말입니다. 혹시 몰라서 평소같이 level11을 권한으로 하는 파일을 찾아봤더니, 전혀 없네요.. 다르게 생각해보면 프로그램을 시스템이 시작될 때 자동으로 시작되도록 등록하는 설정에 해당 파일이 있을 수 있으므로 rc.local 파일을 확인해 볼 필요가 있습니다. 그 파일은 /etc/rc.d/rc.local 경로에 있습니다. 이제 rc.local 파일에서 실행파일의 이름과 경로를 알았으니 level10이라는 이름으로 실행중인 프로세스가 있는지 확인해 봅니다. 하지만 level10으로 실행 중인 프로세스는 없다. 즉,..
level9 힌트를 보면 bof에 대한 문제라고 미리 알려줍니다. 그리고 소스를 공개하고 있습니다. 파일을 찾아서 ls-al로 확인 결과 읽을 수가 없고 실행만 가능하네요. 다행히 위에 소스를 공개했으니 저 소스를 복사해서 따로 파일을 만들어서 분석 진행 하겠습니다. 위의 소스와 똑같이 bof를 tmp 디렉터리에서 다시 만들었습니다. 물론 권한은 읽기 권한을 주었습니다. 소스 내용을 요약하면 일단, buf, buf2 각각에 배열을 할당하고 fgets함수로 buf를 받습니다. 하지만 바로 밑의 strncmp는 buf2와 "go"의 문자열을 비교하여 앞의 2글자가 맞으면 성공이네요. 하지만 fgets으로 받는 것은 buf이기 때문에 buf2값에 "go"라는 값을 넣어줘야 성공하는 문제입니다. 컴파일 후에 b..
level8의 힌트를 보면 shadow 파일을 찾아야 하는 문제인데, 용량이 '2700'이라고 단서를 주었으니 차근차근 풀어가보겠다./etc/passwd와 /etc/shadow 파일 구조는 아래의 주소를 참고하고 이 글을 다시 보길.http://suspected.tistory.com/entry/etcpasswd-etcshadow-%EA%B5%AC%EC%A1%B0 ls -al로 /etc/passwd와 /etc/shadow를 보면 차이점이 /etc/shadow는 읽을 수가 없다. 힌트에서 용량이 "2700"이라는 것을 주었으니 find 명령어로 찾아보면 될 것이다. 아래의 표는 find에서 -size를 이용해서 찾을 경우 사용하는 옵션이다. -size n[bckw] 설명 -size 1b 512바이트 단위의 ..
level7의 hint를 보겠습니다. 2진수를 10진수로 바꾸는 문제라고 유추할 수 있겠네요. 계산기를 공학용으로 다들 매일 쓰시니 상관은 없을 듯 합니다. 버릇이 들었는지 find 명령어를 이용해서 해당 파일을 찾습니다. /bin/level7이 출력됩니다. 하지만 열어보려 하니 실행권한만 있을 뿐 다른 권한은 없어서 cat명령이 통하지 않습니다. 위에서 /bin/wrong.txt가 존재 하지 않아서 정보를 확인할 수가 없습니다. 누가 삭제를 했는지 없네요..그래서 다른 곳에서 정보를 얻어왔습니다. 원래 /bin/level7을 실행하면 아래의 내용이 출력 됩니다. 올바르지 않은 패스워드 입니다.패스워드는 가까운곳에...--_--_- --____- ---_-__ --__-_-대학 수업때 이산수학이라는 과목..
시스템 인터럽트는 프로세스간에 주고받는 신호로 시스템 개발에서는 중요한 요소이다. 소스코드 상에서 시그널을 전달하는 방법을 알아보자. 시그널을 발생시키려면 아래 표와 같이 signal() 함수를 사용하면 된다. signal() 함수의 사용법 사용 예 설명 signal(시그널 번호, SIG_DFL) signal(SIGINT, SIG_DFL) SIGINT 시그널 실행 signal(시그널 번호, SIG_IGN) signal(SIGQUIT, SIG_IGN) SIGQUIT 시그널 무시 signal(시그널 번호, handler 함수) signal(SIGINT, handler) SIGINT(Ctrl + C)가 입력되면 handler 함수를 실행 위의 표를 참조해서 시그널 함수를 구현해보면 아래의 소스를 볼 수가 있다..
레이스 컨디션 취약점이 존재하기 위한 최소한의 조건- 다른 계정의 권한에 접근해야 하므로 SUID가 걸려 있어야 한다.- 임시 파일을 생성해야 한다.- 공격자가 임시로 생성되는 파일명을 정확하게 알아야 한다. 레이스 컨디션 환경- 임시 파일의 생성을 시도- 임시 파일이 생성되면 내용을 쓰고 바로 파일을 삭제(공격자 입장에서는 임시 파일에 내용을 쓰고 삭제하는 순간이 너무 짧은 것이 문제)- 임시 파일의 생성에 실패하면 프로그램을 종료요약해보자면1. 파일 생성2. 파일 생성에 성공하면 생성된 파일에 내용 쓰기3. 쓴 내용을 읽어들여 처리/사용4. 파일 삭제* 구체적으로는 2번과 4번 사이에 취약점이 존재하게 된다. 위의 실행 흐름에서 2번과 4번 사이에 공격할 수 있는 틈이 있긴 하지만 너무 짧은 시간 간..
LEVEL4에 hint는 "누군가 /etc/xinetd.d/에 백도어를 심었다"라고 나옵니다. 문제를 풀기 전에 일단, xinetd 데몬의 설정 구조를 알아봅시다.cat /etc/xinetd.conf를 입력하면 밑의 화면이 나오는데, 하나씩 살펴보면 instances = 60: xinetd 데몬에 의해 실행되는 네트워크 서비스 데몬의 최대 동시 접속 허용을 위한 데몬의 기동 수치log_type = SYSLOG authpriv: 시스템 로그를 "보안 및 승인에 관한 메시지 등급"으로 저장log_on_success = HOST PID: 접속에 성공했을 때 원격호스트 IP와 xinetd PID를 로그에 저장log_on_failure = HOST: 접속에 실패했을 때 원격호스트 IP를 로그에 저장한다는 의미로,..
- Total
- Today
- Yesterday
- 비트코인
- malware
- 악성코드
- us-cert
- CVE-2018-0798
- Cisco Talos
- cuckoo-sandbox
- MS-Office
- CVE-2018-9375
- Static Analysis Engine
- idapython
- Bisonal
- Flybits
- 한글악성코드
- .wll
- koodous
- 해킹메일
- 스피어피싱
- keylogger
- 출처 : Do it 안드로이드 프로그래밍
- Kimsuky
- infostealer
- Decoding
- VirusBulletin
- 멋쟁이사자처럼 4기
- AMSI
- Yara
- vuln
- Servey
- 위협정보공유
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |