HO_9
HO9
HO_9
전체 방문자
오늘
어제
  • 분류 전체보기 (104)
    • Write Up (3)
    • WarGame (21)
      • The Lord of Bufferoverflow(.. (7)
      • The Lord of Sql Injection(L.. (1)
      • Pwnable.kr (1)
      • Pwnable.tw (0)
      • XSS GAME (6)
      • Pwnable.xyz (5)
    • SYSTEM HACKING (49)
      • 기법 (24)
      • 문제 풀이 (24)
    • CODING (2)
      • PYTHON (2)
    • WEB HACKING (1)
    • Plan (0)
    • PROJECT (0)
    • iOS (6)
    • ALGORITHM (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • .

인기 글

태그

  • log4j
  • JNDI
  • 아파치
  • 취약점

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HO_9

HO9

Special Chapter-RTL Chaining
SYSTEM HACKING/기법

Special Chapter-RTL Chaining

2017. 11. 11. 16:56
728x90

RTL을 DAY-6에서 봤다.

이번에는 RTL Chaining기술에 대해서 알아 볼 것이다.

RTL Chaining은말 그대로 RTL을 연속적으로 사용해서 공격하는 것 이다


그럼 알아보도록하자.

소스코드는 


#include <stdio.h>

#include <stdlib.h>


void call_system(char *arg){

        system(arg);

}


void get_message(char msg[]){

        char admin[128];

        read(0,msg,512);

        memcpy(admin,msg,512);

}


int main(void){

        char id[20];

        char pw[256];

        char message[512];


        setvbuf(stdout, 0, _IONBF, 0);


        write(1,"ID:",3);

        read(0,id,20);

        write(1,"PW:",3);

        read(0,pw,256);


        printf("Hello! %s\n",&id);

        printf("Input your message to admin.\n");


        get_message(message);

        printf("Your Message Is %s\n",&message);


        printf("Thank you!\n");

}


이 코드를 사용하겠다.

이코드는 Special Chapter-프로세스 디버깅에 가보면 볼 수 있다.

자세한 분석은 그 글을 보기를 바란다. 

2017/11/02 - [SYSTEM HACKING/정리자료] - DAY-4 프로세스 디버깅



(DAY-6참조)

{

[낮은 주소값 = 높은주소]                                                     [높은 주소값 = 낮은주소]

AAAAAAAAAAAAAA    BBBB       read(주소)     리턴값         "0"   "공간 주소(bss)"  "넣을 양"    "원하는 함수"  "리턴값"   "인자"    

[buffer]                  [saved ebp] [saved eip]   [return값]       [read인자]x3                               [함수 주소]     [return값] [인자]


이렇게 있다고 치자

read는 실행이 될 것이다.

그후 return 값에 pop을 세번해주는 코드의 주소값을 넣으면 어떻게 될까?

위에서 보이듯이 0,공간,넣을양이 pop되서 빠질 것이고

원하는 함수가 실행될 것이다.


이런식으로 실행을하는 것이 RTL Chaining이다.


그럼 한번 해보겠다.


(gdb) p read
$1 = {<text variable, no debug info>} 0xf7ee3af0 <read>
(gdb) p system
$2 = {<text variable, no debug info>} 0xf7e48da0 <__libc_system>

saved eip에는 read함수의 주소를넣고
원하는 함수 자리에는 system함수의 주소를 넣어보겠다.

read의 인자 부분에는 0,그리고 아무런 빈공간을 주소로 주고,넣을양은0xffffffff 로하겠다.

그럼이제는 return값만 정해주면된다


pop을 세번 해준다.

그럼 원하는 함수인 system을 실행시킬수 있을것이다.


정리를 해보자.


A를 140개를 채워서 saved ebp까지 채운후

.

saved eip에 read 함수의주소 \xf0\x3a\xee\xf7을 넣어준다.

.

return값에는 pop을 세번하는 주소 \xf9\x86\x04\x08을 넣어주고

.

read 인자에는 0을넣어주고 \x00\x00\x00\x00

공간주소에는 \x3c\xa0\x04\x08라는 적당한 공간의 주소를 넣어주겠다.

넣을양은 \xff\xff\xff\xff로 하겠다.

.

system 함수의 주소 \xa0\x8d\xe4\xf7를 넣어주고.

system 함수의 리턴값은 "RETA"로 한후

인자는 \x3c\xa0\x04\x08 read함수에서 받은 값으로 하겠다.

(함수의 주소는 바뀔수 있으니 알아보고 하자.)


한번 실행을 해보자.



정말로 SUCCESS라는 파일이 만들어져있는지 확인해보자.



SUCCESS파일이 확인되었다.


이상으로 RTL Chaining을 끝맞추겠다.










'SYSTEM HACKING > 기법' 카테고리의 다른 글

DAY-8 FSB(Format String Bug)  (0) 2017.12.31
DAY-7 ROP(Return Oriented Programming)  (0) 2017.11.18
DAY-6 Return To Library  (0) 2017.11.11
DAY-5 쉘코드 작성  (0) 2017.11.10
DAY-4 프로세스 디버깅  (0) 2017.11.02
    'SYSTEM HACKING/기법' 카테고리의 다른 글
    • DAY-8 FSB(Format String Bug)
    • DAY-7 ROP(Return Oriented Programming)
    • DAY-6 Return To Library
    • DAY-5 쉘코드 작성
    HO_9
    HO_9

    티스토리툴바