System&Write up/LOB 19

LOB troll -> vampire Write up

LOB troll -> vampire ID : trollPasswd : aspirin 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 code를 열어봅니다. egghunter가 없으니 공격은 환경 변수로 하면 될 것 같습니다.하지만 환경 변수는 스택의 위쪽에 위치하기 때문에 ‘\xbf'는 가능하지만 ‘\xff’를 우회하는 부분을 조금 생각해봐야 할 것 같습니다. | main() | argc | argv | etc, env | 0xbfffffff 저 안에 있는 애들의 크기를 늘려주면 주소가 낮아지지 않을까요? 환경 변수로 공격하자는 목적이니| main() | argc | argv | etc, env | 0xbfffffff환경 변수에 많은 NOP을 박아준다면 저런 메모리 구조를 가질 것이고, ‘\..

System&Write up/LOB 2017.10.10

LOB orge -> troll Write up

LOB orge -> troll ID : orgePasswd : timewalker 접속해서 ls 명령어로 파일을 확인합니다. cat 명령으로 code를 열어봅니다. darkelf에서 추가됐던 argv[0] 길이 체크가 사라지고, argc가 2개 (파일명 + 인자), argv[1]을 초기화하네요. 그럼 argv[0]에 셸코드를 집어 넣어야 할 것 같습니다.셸코드를 파일명으로 가지는 파일을 만듭니다. 그런데 잘 되지 않는다.이유는 셸코드에 ‘\x2f’ 문자가 ‘/’로 인식돼 이상한 경로로 나뉘게 됩니다. 그래서 ‘\x2f’가 없는 셸코드를 써야합니다. "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\x..

System&Write up/LOB 2017.10.09

LOB darkelf -> orge Write up

LOB darkelf -> orge ID : darkelfPasswd : kernel crashed 접속해서 ls 명령어로 파일과 디렉터리를 확인합니다. cat 명령으로 code를 열어봅니다. 추가된 코드의 내용은 파일 경로 + 파일명인 argv[0]의 길이를 체크하는데요.77byte여야 합니다. ./orge 상대 경로로 argv[0]을 넘겨줬을 때 strlen(argv[0])은 6byte일 것이고,/home/darkelf/orge 절대 경로도 77byte는 역부족이네요. 이럴 때 심볼릭 링크를 사용합니다.컴퓨팅에서 심볼릭 링크(symbolic link) 또는 기호화된 링크는 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉터리에 대한 참조를 포함하고 있는 특별한 종류의 파일이다. (위키백과) ..

System&Write up/LOB 2017.10.09

LOB wolfman -> darkelf Write up

LOB wolfman -> darkelf ID : wolfmanPasswd : love eyuna 접속해서 ls 명령어로 파일과 디렉터리를 확인합니다. cat 명령으로 code를 확인합니다. 추가된 보호 기법이 argv[1]의 길이를 48byte까지로 두는 것입니다. 하지만 goblin부터 argv[1]에는 ‘\bf’ 우회에만 초점을 두고 셸코드는 argv[2]에 넘겨줬었기 때문에 지금까지의 방식으로 풀도록 하겠습니다.goblin Write Up -> https://jaemin8852.tistory.com/40 argv[2]의 시작 주소를 찾기 위해 tmp를 만들고 원본 파일을 tmp에 복사합니다. payload : ./darkelf `python –c ‘print “A”*44 + “\xbf\xbf\xb..

System&Write up/LOB 2017.10.07

LOB orc -> wolfman Write up

LOB orc -> wolfman ID : orcPasswd : cantata 접속해서 ls 명령어로 파일과 디렉터리를 확인합니다. cat 명령어로 code를 확인합니다. buffer 부분을 0으로 초기화 하는 코드가 있지만 goblin에서 buffer를 쓰지 않았기 때문에 argv[2]를 이용해서 payload를 구성하도록 하겠습니다.goblin Write Up -> https://jaemin8852.tistory.com/40 argv[2]의 시작 주소를 찾기 위해 tmp를 만들고 원본 파일을 tmp에 복사합니다. payload : ./wolfman `python –c ‘print “A”*44 + “\xbf\xbf\xbf\xbf"’` `python –c ‘print “\x90”*100 +"\x31\xc..

System&Write up/LOB 2017.10.07

LOB goblin -> orc Write up

LOB goblin -> orc ID : goblinPasswd : hackers proof 접속해서 ls 명령어를 이용해서 파일과 디렉터리를 확인합니다. cat 명령어를 이용해서 code를 확인합니다. egghunter 기법 때문에 우리는 환경 변수를 이용한 공격을 할 수 없게 되었습니다.그리고 무조건 Return Address는 스택 영역으로 변조해야 합니다. 하지만 buffer의 크기는 너무 작아 이용하기 힘들 것 같습니다. argv[1]은 '\xbf' 우회에 초점을 두도록 하겠습니다.그렇다면 환경 변수도 아니고 buffer도 아니고 argv[1]도 아니고 스택에 존재할 수 있는 부분은 뭐가 있을까요? argv[2]입니다. 지금까지는 main 함수 인자를 파일명과 payload 이렇게 두 개만 넣어..

System&Write up/LOB 2017.10.03

LOB cobolt -> goblin Write up

LOB cobolt -> goblin ID : coboltPasswd : hacking exposed 접속해서 ls 명령어로 파일과 디렉터리를 확인합니다. cat 명령을 이용해서 코드를 확인합니다. gremlin에서는 strcpy를 이용해서 buffer에 복사 했다면 cobolt에서는 gets로 입력을 받으니 인자 전달 방식을 다르게 해주면 될 것 같습니다. 환경 변수에 셸코드를 등록해보겠습니다.export SC=$(python –c ‘print “\x90”*13000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"’) 환경 변수의 주소를 알아내기 위해 코드를 짜고 ..

System&Write up/LOB 2017.10.03

LOB gremlin -> cobolt Write up

LOB gremlin -> cobolt ID : gremlinPasswd : hello bof world 접속해서 ls 명령어로 파일과 디렉터리를 확인합니다. cat 명령으로 코드를 확인해봅시다. 코드를 보면 gate에서는 256byte 였는데 지금은 셸코드도 들어가기 힘든 16byte로 줄었습니다. 환경 변수를 이용하겠습니다. 환경 변수를 만들어 셸코드에 등록하겠습니다.export SC=$(python –c ‘print “\x90”*13000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"’) 만든 환경 변수의 주소를 알아내기 위해 코드를 짜고 실행해봅시다. 환경 ..

System&Write up/LOB 2017.10.03

LOB gate -> gremlin Write up

LOB gate -> gremlin ID : gatePasswd : gate 접속해서 ls 명령어로 파일과 디렉터리를 확인합니다. cat 명령을 이용해서 코드를 확인합니다. 버퍼에 셸코드를 박고 Return Address를 버퍼의 주소로 변조하겠습니다. tmp 디렉터리를 만들고 gremlin 실행파일을 복사하고 디스어셈블 합시다. 확인해보면 스택프레임을 0x100(십진수로 256)만큼 할당하는게 보입니다. 메모리 구조는 이렇게 될 것 같네요.| buffer(256) | SFP(4) | RET(4) | 그럼 A*256+B*4+C*4를 넣고 버퍼의 주소를 알아보도록 하겠습니다. 확인해보면 버퍼의 시작 주소는 0xbffff908 이겠네요. 256(buffer)+4(SFP) 만큼을 쉘코드와 NOP으로 덮고, R..

System&Write up/LOB 2017.10.03
반응형