| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 드림핵
- System
- 순서도
- 리버싱
- WarGame
- 해킹
- 웹해킹
- 워게임
- network
- hacking
- 웹
- 소프트웨어
- 네트워크
- ftz
- 소프트웨어보안
- reversing
- 비박스
- 네트워크보안
- Web
- 시스템해킹
- 알고리즘
- CodeEngn
- Webhaking
- 시스템
- dreamhack
- TCP
- XSS
- bee-box
- webhacking
- 모의해킹
- Today
- Total
목록전체 글 (236)
Without a Break
문제 사이트에 들어가면 다음과 같이 나온다. 각 페이지에 들어가면 다음과 같은 페이지가 나온다. 각 페이지의 url을 보면 입력한 경로를 그대로 출력하고 있음을 알 수 있었다. 어떤 경로를 입력해도 텍스트로 뜨는 것 외에 다른 동작을 하지 않았다. 어떤 경로를 입력해도 되지 않으니 템플릿 언어를 써보기로 했다. *템플릿 언어 : 파이썬 변수 및 문법을 html 안에서 쓸 수 있도록 제공해주는 언어 템플릿 언어 {{7*7}}을 삽입했더니 결과값이 나타났다. 문제 코드를 확인하면 %(request.path)를 통해 경로를 출력한다는 것을 알 수 있었다. 섹션의 옵션 값이 뜨도록 {{config.items()}}를 입력해주니 플래그를 확인할 수 있었다.
문제 사이트로 들어가면 다음과 같이 나타난다. List 페이지에 들어가니 플래그가 있는 flag.php가 있는 것을 확인할 수 있었다. flag.php 페이지에 들어가니 역시나 플래그는 바로 뜨지 않았다. 문제에서 말했던 /uploads/flag.php 경로가 맞는데 왜 뜨지 않는걸까? view.php 파일을 확인해보니 /flag가 필터링되어 Permission denied가 뜨는 것을 알 수 있었다. index.php를 보면 GET['page']를 통해 입력을 받아서 include로 실행한다. 위와 같이 /var/www/uploads/flag의 경로로 실행해봤더니 can you see $flag?라는 글자가 뜨는 것을 확인할 수 있었다. php에서 flag를 우회하는 방법 중 하나는 flag 필터를 우..
문제 사이트에 들어가면 다음과 같은 화면이 나온다. socket 페이지의 모습이다. 문제 코드를 보면 admin으로 POST 메소드를 통해 접속한 후 if문을 통과하면 플래그가 반환되는 것을 알 수 있다. if문을 통과하는 조건은 다음과 같다. 클라이언트의 ip가 127.0.0.1인지 User-Agent의 헤더 값이 Admin Browser인지 DreamhackUser가 admin인지 admin 쿠키 값이 true인지 userid가 admin인지 현재 host의 ip는 0.0.0.0이고, 포트 번호는 8000이다. host : 127.0.0.1 port : 8000 data: POST /admin HTTP/1.1 Host:host1.dreamhack.games User-Agent:Admin Browser..
문제 사이트에 접속하면 다음과 같은 화면이 나온다. command 문제라서 주소창에 명령어를 입력해봤지만 실행되지 않는다. 문제 코드를 확인하니 GET 메소드일 때는 실행이 안되고, GET 이외의 메소드일 때만 명령어가 실행된다는 것을 알 수 있었다. 버프 스위트를 사용해 문제 사이트의 패킷을 가로채서 리피터로 보낸다. 리피터로 보낸 후 GET 메소드를 HEAD 메소드로 바꿔주고, flag.py의 내용을 request bin으로 생성한 링크로 전송하는 코드를 작성한다. 요청을 수정하고 send 버튼을 눌러줬다. 전송 버튼을 누르면 요청에 대한 응답이 잘 이루어졌다는 200 OK가 나타난다. request bin을 확인하면 요청한 응답이 제대로 와서 플래그를 확인할 수 있다.
문제 재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다. 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... , 10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ... 총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라. 입력 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다...
Lazy binding을 하는 바이너리는 실행 중에 GOT 테이블을 업데이트할 수 있어야 하므로 GOT에 쓰기 권한이 부여된다. 그런데 이는 바이너리를 취약하게 만드는 원인이 된다. 또한, ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료와 관련된 .init_array, .fini_array가 있다. 이 영역들은 프로세스의 시작과 종료에 실행할 함수들의 주소를 저장하고 있는데, 여기에 공격자가 임의로 값을 쓸 수 있다면, 프로세스의 실행 흐름이 조작될 수 있다. => RELocation Read-Only(RELRO) 개발 RELRO : 쓰기 권한이 불필요한 데이터 세그먼트에 쓰기 권한을 제거한다. Partial RELRO 권한 prelro를 실행해보면 0x601000부터 0x602000까지의 주소에..
라이브러리 : 컴퓨터 시스템에서 프로그램들이 함수나 변수를 공유해서 사용할 수 있게 한다. C언어를 비롯하여 많은 컴파일 언어들은 자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원하고 있다. 라이브러리를 사용하면 같은 함수를 반복적으로 정의해야 하는 수고를 덜 수 있어서 코드 개발의 효율이 높아진다. 또한, 표준 라이브러리가 제작되어 있어서 개발자들은 쉽게 해당 함수들을 사용할 수 있다. 링크 : 프로그램에서 어떤 라이브러리의 함수를 사용한다면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다. 동적 링크 동적 링크된 바이너리를 실행하면 동적 라이브러리가 프로세스의 메모리에 매핑되고, 실행 중에 라이브러리의 함수를 ..
파일 입출력 파일모드 기능 설명 "r" 읽기 전용 파일을 읽기 전용으로 연다. 단, 파일이 반드시 있어야 한다. "w" 쓰기 전용 새 파일을 생성한다. 만약 파일이 있으면 내용을 덮어쓴다. "a" 추가 파일을 열어 파일 끝에 값을 이어 쓴다. 만약 파일이 없으면 파일을 생성한다. "r+" 읽기/쓰기 파일을 읽기/쓰기 용으로 연다. 단, 파일이 반드시 있어야 하며 파일이 없으면 NULL을 반환한다. "w+" 읽기/쓰기 파일을 읽기/쓰기 용으로 연다. 파일이 없으면 파일을 생성하고, 파일이 있으면 내용을 덮어쓴다. "a+" 추가(읽기/쓰기) 파일을 열어 파일 끝에 값을 이어 쓴다. 만약 파일이 없으면 파일을 생성한다. 읽기는 파일의 모든 구간에서 가능하지만, 쓰기는 파일의 끝에서만 가능하다. "t" 텍스트 ..