[Security/BOF] LEVEL 9. Troll -> vampire 문제 풀이 이번에는 main()에 인자를 2개 이상 사용이 가능합니다. 그리고 bf 영역에 ff 값은 안된다고 되어있습니다. 그러면 스택에 많은 값을 넣어서 스택 크기를 늘리면 됩니다. 10000값을 넣고 해도 아직 ff영역입니다. 더 추가합니다. 100000만큼 넣습니다. 발견했습니다. 공격합니다. 중간에 bash2를 하지 않고 해서 수정하고 다시 주소를 찾아야 하나 걱정했는데 nop 값이 커서 그냥 성공했습니다. Programming 2014.08.28
[Security/BOF] LEVEL 8. orge -> troll 문제 풀이이번에는 main에 넘겨주는 값이 무조건 2여야합니다. 즉 argv[2]를 사용할 수 없습니다. 그래서 그냥 argv[0]에 쉘을 넣어서 공격하도록 하겠습니다. 더미를 만들어서 점프할 주소를 찾습니다. 보면 argv[1]이 0xbffffbc7에 있습니다. 그래서 이보다 위에 값을 봅니다. Argv[0]의 주소를 찾았습니다. 다시 링크를 만들어서 공격하겠습니다. 성공했습니다. 그리고 이번에 쉘코드는 중간에 \x2f가 없는 쉘코드를 사용했습니다. Programming 2014.08.28
[Security/BOF] LEVEL 7. darkelf -> orge 문제 풀이 이번 문제에서는 argv[0]의 사이즈가 77인지 체크를 합니다. 즉 절대경로길이가 77이어야 합니다… 혹시나 싶어서 실행해 보았습니다. 일단 절대 경로가 77이 아닌 것을 알 수 있었습니다. 딱 봐도 작아 보이긴 합니다… 공격을 위해서 심볼릭 링크를 사용합니다. 점프할 주소값을 찾습니다. 주소를 찾았으니 공격을 합니다. 성공하였습니다. Programming 2014.08.28
[Security/BOF] LEVEL 6. Wolfman -> darkelf 문제 풀이이번에는 위에서 했던 것에서 argv[1]의 길이가 48보다 길면 너무 길다고 하면서 종료한다… 그래도 ret를 덮게 하기 위해서…. 8바이트나 더 주었다… 그래서 이번에는 argv[2]를 이용해서 여기에 쉘을 넣어 사용하는 방법을 하겠습니다. 더미를 하나 만들고 gdb를 실행합니다. strcpy 콜 하기 전에 break를 걸고 쓰레기 값을 통해서 주소를 확인합니다. 보면 43으로 차있는 곳이 argv[2]의 영역이 됩니다. 이곳에 쉘을 넣고 공격을 하겠습니다. 성공입니다. Programming 2014.08.28
[Security/BOF] LEVEL 5 orc -> wolfman 문제 풀이Level 4 에서 사용한 방어 방법에 추가로 buffer를 초기화 시켜줍니다. 아마 버퍼에서 쉘 코드를 실행하는 것을 막기 위한 것 같네요… 하지만 스트링카피는 그 위에서 해주는군요… 같은 방법을 사용합니다. 순간 안되서 확인해보니 bash2를 해주지 않아서 안되었습니다. 그래서 bash2로 바꿔주고 다시 주소를 찾아야 하나 했는데… 혹시나 싶어서 그냥 해보니 되었습니다. Nop 쪽으로 적절히 떨어진거 같습니다. Programming 2014.08.28
[Security/BOF] LEVEL 4. Goblin -> orc 문제 Orc를 확인해 보니 buffersize는 40이고 환경변수를 모두 날립니다. 먼가 해서 보니… 이전 문제 풀이 중 환경변수를 적용해서 푸는 방법이 있었군요…… 아하…. 그리고 argv[1][47]이 \xbf를 체크합니다. 근데 같지 않은 경우 종료하라고 되어 있습니다. 그런데 지금까지 공격한 방법은 전부… bf였죠…. 그래서 level3과 같은 방법으로 공격하겠습니다. 위치를 찾았습니다. 공격 하겠습니다. 성공하였습니다. Programming 2014.08.28
[CMD] MS-DOS와 명령어 비교 Linux / Unix MS-DOS 설명 ./program program 프로그램 실행 ( 현재 디렉토리에 있어야함 ) cd x (또는 cd /x) cd x 디렉토리 x로 이동 cd .. cd .. 한 디렉토리 위로 가기 ls dif 디렉토리 목록 보여주기 cat type 터미널 상의 내부 보여주기 mv x y move 파일 x를 y로 옴기기 cp x y copy 파일 x를 y로 복사하기 rm x del 파일 x 지우기 mkdir md 디렉토리 만들기 rmdir rd 디렉토리 지우기 rm -r deltree 디렉토리 지우고 파일도 다 df chkdsk 장치에서 남은 용량 보여주기 top mem 메모리 상태 보여주기 man x - x에 관한 메뉴얼 페이지 얻기 less x - 텍스트 파일 x 열기 echo.. Programming 2014.08.28
[Linux/chmod] 권한설정 chmod chmod는 리눅스에서 permission을 바꿀수 있는 명령어입니다. 간단하게 보면 처음 권한이 인 상태에서 test1의 권한을 변경시켜 보겠습니다. 다음과 같이 하면 됩니다. 사용 방법은 chmod [옵션] (u|g|o|a)(+|-)(r|w|x) files directory.. 와 같이 사용하면 됩니다. 여기서 u,g,o,a 는 -rwxrwxrwx 일때앞의 rwx는 User 가운데는 Group 끝은 Other을 나타낸다 즉 이때 하나하나 적용할 때 앞에 붙여 주는 것이다. 그리고 a는 3속성 모두 적용할 때 사용합니다. 숫자 값으로 해주는것도 가능하다. R : 4, W : 2, X : 1 의 값을 가지고 있기 때문에 속성의 합을 주어도 가능하게 됩니다. 간단하게 테스트를 해보면 위와 같은 상황에서 해.. Programming 2014.08.28
[Linux] Linux Permission 리눅스에서는 파일에 대해서 크게 3가지 권한을 제공한다. R : 읽기, W : 쓰기, X : 실행 리눅스에서 ls -l의 명령어를 쳐보면 다음과 같이 나온다. test1을 보면 -rw-rw-r-- 라고 나와있다. 읽기와 쓰기 기능이 모두 되는것이다. 그런데 보면 반복적으로 적혀있다. 이렇게 되어있는 이유는 파일에 접근할수 있는 범위마다 권한을 다르게 해주기 때문이다. 정리하면 다음과 같다. 위처럼 접근 범위가 Owner Group, Other이 있고 이에 이에 따라서 접근 했을때 할수 있는것의 제한을 둘 수 있는것이다. 맨위 그림에서 test2를 예를 들면 test2는 Owner은 읽기 쓰기 실행 관한이 Owner에만 있기 때문에 다른 권한에서는 실행이 되지 않는다. Programming 2014.08.28
[Security/DBG] OllyDBG 단축키 Ctrl+F2 재시작 F7 Step into F8 Step over Ctrl+F9 함수 코드 내에서 RETN 명령어 까지 커서 이동 Ctrl+G 원하는 주소로 이동 F4 cursor 위치로 이동 ; commend 입력 : label 입력 F2 Break Point * 현재 EIP를 보여줌 - 이전의 커서를 보여줌 Enter 커서가 CALL / JMP 등의 명령어에 있으면 따라 들어감, 실행되는 것은 아니다. Programming 2014.07.09