목록분류 전체보기 (285)
tmxklab
1. 문제확인 특정 Host에 ping을 보내는 서비스이며 Command Injection을 통해 플래그를 획득할 수 있다. 2. 접근방법 subprocess를 이용하여 /bin/sh -c ping -c 3 "{host}"명령을 수행할 수 있으며 host에는 내가 입력한 값이 들어간다. 또한, try문에서 에러가 발생하면 exception처리가 된다. Host입력 란에 쉘 명령어를 쓰려고 하자 필터링이 된다. 개발자 도구[F12]에서 html을 확인한 결과 input에 pattern을 통해 필터링이 되는 것 같다. 3. 문제풀이 html은 수정할 수 있으므로 필터링되는 부분을 제거해주고 /bin/sh -c ping -c 3 "host" 여기서 host부분에 쉘 명령어를 입력해주자(참고로, 에러가 발생하면..
1. 문제확인 host와 port값을 지정하고 Data를 보낼 수 있는 것 같다. 위와 같이 입력 값을 구성하고 Send 버튼을 누르면 다음과 같이 출력된다. 이제 소스코드를 확인해보자 /admin으로 POST형식으로 접속하면 admin()가 호출되고 if문을 통과하면 FLAG값을 리턴해준다. 2. 접근방법 처음에는 BurpSuite를 통해서 직접 url에 admin과 헤더 값 등을 변경하였는데 첫 번째 if문에서 막혔다.. 그래서 생각한 것은 처음 /socket에서 입력받는 코드 부분을 살펴보았다. host, port, data를 입력하면 소켓 통신을 통해 연결되고 입력한 data값을 보내준다. 따라서, /socket에 있는 입력 폼을 이용하여 웹 서버의 host주소와 port번호를 넘겨주면 다시 웹 ..
1. 문제확인 접속해서 userid에 guest에 대해 View버튼을 누르면 위와 같이 key-value형태로 나온다. 문제 정보에서는 Path Traversal 취약점을 이용하여 /api/flag에 있는 플래그를 획득할 수 있다고 나온다. 2. 접근방법 이번에도 마찬가지로 문제 파일을 다운로드하여 코드를 확인해보자 먼저 FLAG변수에 flag값이 담긴다. get_info()에서는 request의 method형식에("GET", "POST") 따라 다르게 처리되는데 POST형식인 경우 '{API_HOST}/api/user/{userid}'형식으로 요청을 보낸다. 마지막으로 밑에 빨간색 박스를 보면 '/api/flag' 형식의 요청이 들어온경우 flag()를 호출하여 우리가 원하는 flag값을 return한..
1. 문제확인 쿠키로 인증 상태를 관리하며, admin 계정을 접속해야 플래그를 획득할 수 있다. 2. 접근방법 먼저, 문제 파일을 다운로드하여 코드를 확인해보자 맨 위 빨간색 박스를 살펴보면 ./flag.txt를 읽어들인 다음 'admin'에 대한 비밀번호를 저장한다. 'guest'유저는 비밀번호가 그대로 'guest'이다. 그리고 아래 빨간색 박스를 살펴보면 'username'에 대한 cookie값을 가져와서 username이 존재하면 index.html에 'guest' 또는 'admin'에 따라 다르게 표시되는 것을 확인할 수 있다. 특히 if문에서는 username이 'admin'이면 플래그 값을 보여준다. 3. 문제풀이 먼저, guest유저로 접속해보자(id = 'guest', pw = 'gue..
1. 문제확인 ascii_easy@pwnable:~$ ls -l total 1700 -r-xr-sr-x 1 root ascii_easy_pwn 7624 Nov 3 2017 ascii_easy -rw-r--r-- 1 root root 1041 Nov 3 2017 ascii_easy.c -r--r----- 1 root ascii_easy_pwn 52 Aug 6 2014 flag -r--r----- 1 root ascii_easy_pwn 141 Oct 27 2016 intended_solution.txt -rwxr--r-- 1 root root 1717736 Oct 27 2016 libc-2.15.so ascii_easy@pwnable:~$ 1) mitigation 확인 2) 문제 확인 3) 코드흐름 확인 3..
1. 문제 확인 otp@pwnable:~$ ls -l total 20 -r--r----- 1 otp_pwn root 65 Jun 14 2014 flag -r-sr-x--- 1 otp_pwn otp 9052 Jun 14 2014 otp -rw-r--r-- 1 root root 820 Jun 14 2014 otp.c 1) mitigation 확인 2) 문제 확인 3) 코드 흐름 확인 3-1) otp.c #include #include #include #include int main(int argc, char* argv[]){ char fname[128]; unsigned long long otp[2]; if(argc!=2){ printf("usage : ./otp [passcode]\n"); return 0..
1. 문제확인 1) mitigation 확인 statically linked 2) 문제 확인 입력 값을 받고 hash값을 출력해주는 것 같다. 3) 코드흐름 확인 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { int dec_val; // [esp+18h] [ebp-28h] char enc_val; // [esp+1Eh] [ebp-22h] unsigned int len; // [esp+3Ch] [ebp-4h] memset(&enc_val, 0, 0x1Eu); setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 1, 0); printf("Authenticate : "); _isoc99_s..
여기서 다루는 내용은 Device Driver와 I/O Manager에 중점을 둔다. 다음 그림은 유저단에서 WriteFile() API 함수를 호출했을 때 I/O Manager와 Device Drvier가 처리하는 과정이다. syscall(x64) 또는 sysenter(x86) 요청을 발생하면 커널 익스큐티브(ntoskrnl.exe)에서 NtWriteFile() 시스템 서비스 루틴을 호출한 후 요청을 I/O Manager에게 전달한다. I/O Manager는 요청한 연산을 처리하는 드라이버를 파악하여 해당 드라이버에게 IRP(I/O Request Packet)을 전달한다. (IRP는 데이터 구조체로 I/O연산에 수행되어야 하는 연산과 필요한 버퍼의 정보를 포함한다.) Device Driver는 IRP를..
후킹의 목적은 정상 API 호출을 차단하여 API에 전달되는 파라미터를 모니터링하거나 API에서 반환되는 값을 필터하는 것이다. 공격자가 악성 커널 드라이버를 설치하여 커널 공간에서 후킹을 시도할 수 있다. 커널 컴포넌트가 시스템 작동에 매우 중요한 역할을 하기 때문에 커널 공간에서 후킹은 유저 공간에서 후킹하는 것보다 강력하다. 따라서, 커널 공간에서 이루어지는 다양한 후킹 기술과 탐지 방법을 살펴보자 1. SSDT 후킹 커널 공간에 존재하는 SSDT(System Service Descriptor Table)은 커널 익스큐티브(ntoskrnl.exe, ntkrnlpa.exe 등)에서 export한 서비스 루틴의 포인터를 포함한다. Window API 호출 흐름 0. 목차 1. 커널 메모리 내용 2. 유..
참고) I/O 관련 작업(Device Driver, I/O Manager) 여기서 다루는 내용은 Device Driver와 I/O Manager에 중점을 둔다. 다음 그림은 유저단에서 WriteFile() API 함수를 호출했을 때 I/O Manager와 Device Drvier가 처리하는 과정이다. syscall(x64) 또는 sysenter.. rninche01.tistory.com 1) devocetree 플러그인 Device Tree정보를 확인 vol_2.6.exe -f --profile= devicetree 2) driverirp 플러그인 특정 드라이버 또는 모든 드라이버와 관련된 주요 IRP 함수를 표시 vol_2.6.exe -f --profile= driverirp -r -r옵션을 지정하지 ..