'System'에 해당되는 글 39건

  1. 2019.03.19 [FTZ school] level 15
  2. 2019.03.19 [FTZ school] level 14
  3. 2019.03.19 [FTZ school] level 13
  4. 2019.03.19 [FTZ school] level 11
  5. 2019.03.17 [FTZ school] level 10
  6. 2017.05.20 [FTZ school] level 9
  7. 2017.05.20 [FTZ school] level 8
  8. 2017.05.20 [FTZ school] level 7
  9. 2017.05.20 [FTZ school] level 6
  10. 2017.05.20 [FTZ school] level 5
System/FTZ2019. 3. 19. 06:19

▲ 언뜻 보면 level14와 같아 보이지만 check가 그냥 변수가 아닌 포인터 변수로 변경되었습니다.


▲ 분석 편의상 intel 문법으로 변경하였습니다. 보면 버퍼를 56만큼 할당 해 주고 ebp-16위치에 있는 값과 0xdeadbeef를 비교해 줍니다. 따라서 56-16 = 40. 즉 40만큼의 NOP을 입력해 준 후 deafbeef가 있는 주소를 입력해주면 됩니다.


▲deadbeef는 프로그램 내에 하드코딩 되어 있는 상태. 약간의 게싱을 통해 찾아냈습니다. 주소값은 0x080484b2 입니다.


따라서 공격은 NOP*40 + 0x080484b2로 이루어집니다.

▲ (python -c 'print "\x90"*40+"\xb2\x84\x04\x08"';cat) | ./attackme


'System > FTZ' 카테고리의 다른 글

[FTZ school] level 17  (0) 2019.03.19
[FTZ school] level 16  (0) 2019.03.19
[FTZ school] level 14  (0) 2019.03.19
[FTZ school] level 13  (0) 2019.03.19
[FTZ school] level 11  (0) 2019.03.19
Posted by BadSchool
System/FTZ2019. 3. 19. 05:42

▲레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다. 버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이 최고의 효과를 가져다줍니다. 라고 하네요. 일단 디스어셈블 해보겠습니다.


▲ 버퍼의 크기는 56(=0x38) 해당 프로그램은 check변수가 0xdeadbeef라면 권한을 주는 프로그램이네요. 딱히 사이에 다른 공간이 없으므로 귀찮게 deadbeef체크 부분을 찾지 않고 그냥 deadbeef로 덮어버렸습니다.


▲ 원래는 사이 거리까지 구해야하지만 ㅎㅎ... 별로 어려운 것이 아니기에 그냥 풀었습니다.

(python -c 'print "\xef\xbe\xad\xde"*56';cat) | ./attackme

'System > FTZ' 카테고리의 다른 글

[FTZ school] level 16  (0) 2019.03.19
[FTZ school] level 15  (0) 2019.03.19
[FTZ school] level 13  (0) 2019.03.19
[FTZ school] level 11  (0) 2019.03.19
[FTZ school] level 10  (0) 2019.03.17
Posted by BadSchool
System/FTZ2019. 3. 19. 05:26

▲ level13의 힌트. i값을 체크하는 것을 보니 스택 가드를 사용하는 듯 하다. 버퍼 오버 플로우를 해주되 i부분을 계산하여 i값을 침범하지 않도록 코드를 짜주면 된다.


▲ main의 strcpy 직후에 bp를 걸어주고 A를 1024개 넣어 스택에서의 i위치를 찾아 보았다. 

버퍼의 크기는 총 1048byte, 버퍼에서 ret까지 거리는 4byte 즉 버퍼시작에서 ret까지는 1052byte 만큼의 거리이다. 버퍼시작에서 i까지의 거리는 1036byte이다.


그렇다면 공격은 NOP*1036개+i값+NOP*(1052-1048=12) + system주소 + NOP*4 + /bin/sh 주소 가 된다.


./attackme `python -c 'print "\x90"*1036+"\x67\x45\x23\x01"+"\x90"*12+"\xc0\xf2\x03\x42"+ "\x90"*4+"\xa4\x7e\x12\x42"'`

'System > FTZ' 카테고리의 다른 글

[FTZ school] level 15  (0) 2019.03.19
[FTZ school] level 14  (0) 2019.03.19
[FTZ school] level 11  (0) 2019.03.19
[FTZ school] level 10  (0) 2019.03.17
[FTZ school] level 9  (0) 2017.05.20
Posted by BadSchool
System/FTZ2019. 3. 19. 03:45

▲ level11의 파일리스트. 누가봐도 눈에띄게 공격해 달라는 빨간색 파일과 힌트 파일이 보인다.


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
int main( int argc, char *argv[] )
{
    char str[256];
 
    setreuid( 30923092 );
    strcpy( str, argv[1] );
    printf( str );
 
cs

▲ 코드를 보기쉽게 다시 올려보았다. attackme의 소스파일로 보인다. 인자값을 입력받아 strcpy의 취약점을 이용해 공격하는 문제이다.


▲ esp에 sub 0x108을 해주는 모습. 즉 스택에 264byte 만큼의 공간을 할당해 주었다. 따라서 현재 메모리 구조는 그림과 같이 보인다(편의상 EBP로 적는다).

+ 왜 dummy값이 8byte인가요??? ---> 264byte의 할당 값 중 str이 256byte를 사용하고 있기 때문.


따라서 우리는 str+dummy 의 264byte에 셸 코드와 NOP으로 채워 준 후 EBP 부분을 쓰레기 값으로 채워 준 후 RET 부분에 셸 코드로 넘어가는 주소값을 넣어주면 된다.


▲ 간단한 perl 언어로 a를 268개, A를 4개 입력한 모습 보이는 것과 같이 str시작 주소는 0xbfffee40

RET는 0xbffffb20, EBP는 0xbfffee60 이 된다. 그렇다면 셸 코드+nop 264byte + dummy 4byte + 쉘주소 4byte를 입력해 주면 되겠습니다............... 하지만 해당 프로그램에는 랜덤스택주소 방어기법이 적용되어 있어 성공이 되지 않습니다. 브루트 포스를 하는 방법도 있지만 저는 그것이 아닌 RTL 공격 기법을 이용해 보겠습니다.


++ RTL 공격 기법이란?

Retrun To Libc 즉 리턴 주소를 공유 라이브러리 주소로 바꿔 실행하게 되는 것이다. 즉 쉘코드를 직접 작성하지 않고 라이브러리 함수를 이용하게 됩니다.


=============다시 처음부터 ㅎㅎ=======================================


▲ gdb로 main에 bp를 걸어준 다음 print함수를 이용해서 system함수의 주소를 알아냈습니다. 이제 execve에 /bin/sh를 실행해야 하는데요. system 함수 안에 execve가 있으므로 그걸 찾아내야 합니다. 저는 간단한 반복문으로 찾아보도록 하겠습니다.


▲ 코드 사진


▲ 주소는 0x42127ea4

자 그러면 이제 알아내야 할 것은 다 알아냈습니다.

system 함수 주소 : 0x4203f2c0,    /bin/sh 주소 : 0x42127ea4

따라서 NOPx268 + 0x4203f2c0 + NOPx4 + 0x42127ea4 를 입력해 주면 됩니다.


▲ 처음에 perl언어로 작성하였는데 아무리 해도 16진수 값이 들어가지 않아서 파이썬으로 짰습니다.

./attackme `python -c 'print "\x90"*268+"\xc0\xf2\x03\x42"+"\x90"*4+"\xa4\x7e\x12\x42"'`

'System > FTZ' 카테고리의 다른 글

[FTZ school] level 14  (0) 2019.03.19
[FTZ school] level 13  (0) 2019.03.19
[FTZ school] level 10  (0) 2019.03.17
[FTZ school] level 9  (0) 2017.05.20
[FTZ school] level 8  (0) 2017.05.20
Posted by BadSchool
System/FTZ2019. 3. 17. 23:20

▲level10의 힌트내용이다. 중요한 키워드는 공유메모리와 key_t의 값 7530 으로 보인다.




▲공유메모리란? 한 메모리 공간을 여러 프로세스가 같이 공유하여 사용하는 것. 그림의 좌측이 일반적인 메모리고 우측이 공유메모리다. 따라서 같은 공유 메모리를 쓰는 프로그램을 하나 만들어 주면 쉽게 그 값을 읽을 수 있다.


▲공유메모리 관련된 코드는 구글링을 통하여 알아냈다. 


▲ 실행해주면 클리어!

'System > FTZ' 카테고리의 다른 글

[FTZ school] level 13  (0) 2019.03.19
[FTZ school] level 11  (0) 2019.03.19
[FTZ school] level 9  (0) 2017.05.20
[FTZ school] level 8  (0) 2017.05.20
[FTZ school] level 7  (0) 2017.05.20
Posted by BadSchool
System/FTZ2017. 5. 20. 01:17

▲힌트 내용. 드디어 BoF문제가 나타나고 있다. 잘 안보이니 아래를 보고 분석해보자.


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
//다음은 /usr/bin/bof의 소스이다.
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
main(){
 
  char buf2[10];
  char buf[10];
 
  printf("It can be overflow : ");
  fgets(buf,40,stdin);
 
  if ( strncmp(buf2, "go"2== 0 )
   {
        printf("Good Skill!\n");
        setreuid( 30103010 );
        system("/bin/bash");
   }
 
}   
 
//이를 이용하여 level10의 권한을 얻어라.
 
cs

▲보면 buf2배열과 buf배열을 각각 10씩 주고있다.

입력값은 buf에 40개를 받는데 비교는 값을 받지 않는 buf2를 비교한다. 이게 어찌된 일일까?

메모리 구조를 보며 생각해보자.

Low 

buf [10] 

buf2 [10] 

SFP [4] 

RET [4] 

 High

▲BoF는 값을 넘치게 입력하여 다른 변수의 값을 덮어 버릴 수 있는 공격이다.

즉 buf에 10바이트 넘는 값을 입력하게 되면 buf2로 넘어가게 된다.

그러므로 10개의 아무값이나 입력 하고 go를 입력해주면 된다.





▲근데 뭘까? 입력했는데 아무런 반응이없다. 당황할 수 있다.

하지만 사실 메모리 구조에는 더미값이라는 쓰레기값이 사이사이 존재한다.

현재 상황에서는 더미값이 몇바이트인지 정확히 알기는 귀찮으니

그냥 go를 덮어주면 더미값을 넘어 buf까지 도착할 것이다



▲ Correct!

'System > FTZ' 카테고리의 다른 글

[FTZ school] level 11  (0) 2019.03.19
[FTZ school] level 10  (0) 2019.03.17
[FTZ school] level 8  (0) 2017.05.20
[FTZ school] level 7  (0) 2017.05.20
[FTZ school] level 6  (0) 2017.05.20
Posted by BadSchool
System/FTZ2017. 5. 20. 01:06

▲힌트에 1481용량의 파일을 찾으라고한다.


▲그런데 1481로 아무리 찾아봐도 나오지 않았다.

하도 안되서 WriteUp을 검색해보니 2700이였다. 아마도 누군가 고의로 바꿔놓은듯 하다.

검색해보았더니 수상한 found.txt가 보였다.

cat으로 /etc/rc.d/found.txt를 보았더니 level9의 섀도우가 보였다.


▲암호화 된 비밀번호의 복호화 값을 알기 위해 짱짱툴인 존더리퍼를 사용하였다.

사용법은 검색을 통해 알아보는게 더 정확할 듯 하다.


'System > FTZ' 카테고리의 다른 글

[FTZ school] level 10  (0) 2019.03.17
[FTZ school] level 9  (0) 2017.05.20
[FTZ school] level 7  (0) 2017.05.20
[FTZ school] level 6  (0) 2017.05.20
[FTZ school] level 5  (0) 2017.05.20
Posted by BadSchool
System/FTZ2017. 5. 20. 00:54

▲/bin/level7을 실행하여 나오는 패스워드를 알아내면 되는 듯 하다.

패스워드는 가까운곳에 있고, 2진수를 10진수로 그리고 계산기 설정을 공학용으로?... 흠 일단 실행해보자


▲아무 패스워드나 입력하였더니 틀렸다고 뜨며 모스부호 처럼 생긴 문자열이 나타났다.

혹시 입력값마다 다른가 하고 다른값을 입력해 보았지만 같았다.

힌트에서 2진수를 10진수로 바꿀수 있는지 물어봤던것이 생각나어 바꾸어보았다.

자세히 보았더니 문자열에 공백으로 경계가 있었다.


▲공백을 경계선으로 정하고 -를 1 _를 0 으로 계산하였다.


▲우리의 짱짱웹사이트 rapidtables를 사용하여 변환시켰다.

이래서 공학용 계산기가 필요하다고 했나보다.


▲입력하였더니 값이 나타났다.


'System > FTZ' 카테고리의 다른 글

[FTZ school] level 9  (0) 2017.05.20
[FTZ school] level 8  (0) 2017.05.20
[FTZ school] level 6  (0) 2017.05.20
[FTZ school] level 5  (0) 2017.05.20
[FTZ school] level 4  (0) 2017.05.20
Posted by BadSchool
System/FTZ2017. 5. 20. 00:42

▲level6에 접속하였더니 전과 다르게 hint가 바로 보인다

뭔가 미심적었지만 일단 엔터를 눌러 넘어가 보았다.


▲텔넷 접속 서비스라며 1, 2, 3 선택지를 주지만 그 어디도 들어가 지지 않는다.

컨트롤C나 컨트롤D를 눌러봤지만 그것도 되지 않았다.

궁금하여 힌트의 인포샵 bbs 텔넷 접속 메뉴를 검색해보니 이런 글이 있었다.



▲혹시 몰라 hint가 열린 창에서 컨트롤c를 눌러보니 명령어창으로 바로 넘어갔고

ls에 패스워드가 있길래 설마하고 cat을 해보니 바로 나왔다.ㄷㄷ




'System > FTZ' 카테고리의 다른 글

[FTZ school] level 8  (0) 2017.05.20
[FTZ school] level 7  (0) 2017.05.20
[FTZ school] level 5  (0) 2017.05.20
[FTZ school] level 4  (0) 2017.05.20
[FTZ school] level 3  (0) 2017.05.20
Posted by BadSchool
System/FTZ2017. 5. 20. 00:33

▲ /usr/bin/level5 프로그램이 /tmp에 level5.tmp라는 임시파일을 생성한다고 한다.

실행해 보니 만들어 지는 듯 하나 바로 없어진다.

감이 안잡혀서 검색해 보니 레이스 컨디션 공격이라고 한다.

레이스 컨디션이란 한정된 자원을 동시에 이용하려는 여러 프로세스가 자원의 이용을 위해 경쟁을 벌이는 현상이라고 한다.

이 점을 이용하여 임시 파일의 심볼릭 링크를 생성하고 삭제된 임시파일의 값을 알아내거나 변조시키는 공격이다.



▲a.c 와 b.c에 각각 위와같이 코딩하고 컴파일 하였다.

a.c는 for문으로 임시파일을 지속적으로 생성해 준다.

b.c는 for문으로 /level5.tmp가 없어지기 전에 level5.attack라는 심볼릭 링크를 지속적으로 생성해 준다.

즉 a와 b를 동시에 실행하면 패스워드를 알아낼 수 있다.

스레드를 이용하여 위 코드들을 합칠수 있을 듯 하지만 아직 실력이 부족하여 못하였다.



▲ ./a & \ ./b 라고 실행하면 마지막에 패스워드가 나타난다.

&명령은 ./a 프로그램을 백그라운드로 실행하라는 의미를 가진다.

'System > FTZ' 카테고리의 다른 글

[FTZ school] level 7  (0) 2017.05.20
[FTZ school] level 6  (0) 2017.05.20
[FTZ school] level 4  (0) 2017.05.20
[FTZ school] level 3  (0) 2017.05.20
[FTZ school] level 2  (0) 2017.05.19
Posted by BadSchool