[Webhacking] 파일 업로드 취약점 공격
2021. 4. 22. 17:18
Hacking/Webhacking
파일 업로드 취약점 공격 웹 서비스 첨부 파일, 환경 설정 미흡을 이용하여 악의적인 스크립트가 포함된 파일을 업로드 한 후에 웹 서버에 침투를 하는 공격 공격자는 서버 사이드 스크립트(PHP, JSP, .NET 등)을 이용하여 웹쉘(WebShell)을 제작 웹쉘(WebShell)은 원격에서 웹 서버를 제어하기 위한 목적으로 만들어졌으나, 지금은 웹쉘 = 악성코드라고 분류를 하여 안티 바이러스에서 탐지함 게시판 첨부 파일, 이력서 첨부 파일, 이미지 첨부 파일, 웹 채팅방 파일 공유 기능 등에서 발생 직접 만들어 사용할 수 있으나, https://github.com/tennc/webshell 같은 깃허브에서 쉽게 구할 수 있음 파일 업로드 취약점 공격의 목적 1. 웹 서버를 통해 데이터베이스의 정보를 획득..
[CTF] HackPack CTF 2021 writeup
2021. 4. 22. 15:37
Hacking/CTF
Baby Calc 문자열 두 개를 입력 받아서 "python3 -c 'print(%s+%s)'" 형식으로 저장하고 그것을 system 함수를 통해 명령어를 실행시켜준다. 1) "python3 -c 'print()';/bin/bash;#" 2) open("flag", "rt"). read() "N"ot "G"am"I"ng a"N"ymore in "X"mas debug 라는 이름의 hidden type 으로 정의된 input 태그가 보인다. value 값을 1로 변경해보았다. location /maybehereimportantstuff 로 이동해보았다. Indead v1 웹셀 파일을 업로드 하였는데 잘 안되서 소스코드를 확인하기 위해 index.phps 로 가보았다. core.php에서 get imagesi..
[HackCTF] ROP
2021. 4. 20. 02:23
Wargame/HackCTF
1. 문제 NX 가 걸려있다. 입력을 받고, Hello World! 를 출력한다. read() 입력 시 버퍼보다 더 입력받아 bof 가 발생한다. NX + ASLR 걸려있는 상황에서, 주소도 leak 되지 않음 -> ROP 2. 문제 해결 과정 기본적인 rop로도 풀 수 있지만, 이번엔 다음과 같이 풀어보았다. -> got 주소를 하나 leak 한 후 bof 가 터지는 vulnerable_function 으로 다시 돌아가서 leak 했던 주소를 통해 system, binsh 실제 주소를 구한 뒤 페이로드를 다시 보내는 방식 필요한 것들을 구해보자! pppr 가젯 offset : 0x88 + 4 = 140 3. 익스플로잇
[HackCTF] Gift
2021. 4. 19. 18:07
Wargame/HackCTF
1. 문제 nx가 걸려있다. 1. binsh, system 주소를 leak 한다. 2. fgets() 를 통해 입력받고, 입력받은 것을 출력한다. 3. gets() 를 통해 입력 받는데, bof 가 발생한다. binsh 의 주소는 고정되있고, system 의 주소는 바뀐다. binsh 의 주소는 아마 bss 영역일테고, system 은 실제 주소를 leak 해주는 것 같다. 처음엔 binsh 주소에 "/bin/sh" 이 실제로 들어가있는 줄 알고 익스를 했는데 잘 안되서 보니 binsh 위치에 아무 값도 들어있지 않았다. 아마 위치만 지정해준 것 같고, 저기다가 "/bin/sh" 을 넣어서 쓰라는 것 같다. 다음과 같이 실행하면 될 것 같다. 1. gets(&binsh) 2. system(binsh) 실..
[HackCTF] Look at me
2021. 4. 19. 15:37
Wargame/HackCTF
1. 문제 NX 가 걸려있다. system 함수를 쓰지 못할 것으로 보인다. 어쩐지 함수들이 굉장히 많았는데, 정적 링킹 되서 그런 거였다. gets() 입력 시 bof 가 발생한다. 현재, Nx + aslr 걸려있으며, 주소가 leak 되지 않고 있다. 그런데 정적 링크된 파일이라 system 함수를 이용할 수 없다. 이때 어떻게 쉘을 얻을 수 있을까? ->쉘코드를 bss 영역에 주입하고, mprotect() 함수를 통해 그 영역을 실행 가능하게 하면 된다. 2. 문제 해결 과정 1. gets() 통해 &bss 에 쉘코드 삽입 2. mprotect() 를 이용해 그 영역에 실행 권한 주기 구해야 될 것들 - bss 영역 - gadget - shellcode (x86 : 25byte) \x31\xc0\x..
[HackCTF] Random Key
2021. 4. 19. 01:17
Wargame/HackCTF
1. 문제 NX bit 가 걸려있다. flag 함수를 실행하기 위해선 우리가 입력한 값과 random 하게 만들어진 값이 같아야만 한다.... 음............. 어떻게 같게 할 수 있을까?? pwnable.kr 풀었을 때는 srand() 함수가 없어서 rand() 결과로 나오는 난수가 일정한 값이였지만, 여기서는 seed 값이 계속 변해서 다른 난수가 계속 생성된다. 따라서 생성되는 난수와 같게 해주려면 아무래도 직접 난수를 만들어야 할 것 같다. 2. 익스플로잇 난수를 생성하는 간단한 프로그램을 만들어서, 리눅스 ';' 파이프 명령을 통해 난수 생성 프로그램과 서버 접속을 동시에 하므로써, 똑같은 난수를 생성하도록 하였다.
[HackCTF] 1996
2021. 4. 18. 20:27
Wargame/HackCTF
1. 문제 NX bit 가 걸려있다. 1. "어떤 환경 변수를 읽고 싶니?" 멘트를 출력한다. 2. name 버퍼에 입력을 받는다. 3. getev() 함수를 통해 입력받은 환경변수의 값을 읽어온다. 처음에는 환경 변수 문제인 줄 알고, 엄청 고민했었는데 아니었다!! 최종 목표는 spawn_shell 함수를 실행하는 것일 것이다. 그리고 앞에서 name 에 std cin 으로 입력을 받을 때 크기를 지정하지 않기에 bof 를 일으킬 수 있다. 따라서 ret 값을 spawn_shell() 시작 주소로 변경해주면 될 것 같다. (spawn_shell 은 코드 영역에 존재하므로 ASLR의 영향을 받지 않음 -> 고정된 주소) 2. 익스플로잇
[HackCTF] Yes or no
2021. 4. 16. 21:36
Wargame/HackCTF
문제 NX + ASLR 이 걸려있다. gets() 가 실행되도록 값을 입력 -> bof 를 발생시켜 ret 를 변경가능 현재 NX bit, ASLR 이 적용된 상황에서 주소가 leak 되지 않고 있다. -> 64 bit rop 기법을 통해 쉘을 얻을 수 있을 것이다. 두 가지 정도의 방법이 있다. 먼저 다음과 같이 기본적인 rop 기법을 이용하는 방법이다. 1. bss에 binsh 주입 2. put_got 주소를 leak 함 3. got overwrite 함 4. puts 실행함 아니면 rop 을 이용하되, leak 을 한 뒤에 다시 main 으로 돌아가면 굳이 got overwrite 없이도 쉘을 실행할 수 있다. 문제 해결 과정 주소를 leak 한 뒤에 main 으로 돌아가는 방법을 써보겠다. 필요한..