checksec.sh


위 스크립트를 이용하여 파일에 어떤 보호 기법이 적용되어 있는지 확인이 가능하다.


명령어는 checksec.sh --file 파일명


으로 가능

'System hacking > linux exploit 관련' 카테고리의 다른 글

dumpcode 파일  (0) 2016.09.01
stdin out 표준 입출력  (0) 2016.07.08
file 디스크립터(다른 프로세스 간 통신)  (0) 2016.03.09
gdb 내 값 전달  (0) 2016.03.08
C언어 주소 값 brute force 방법  (0) 2016.01.05

C언어 주소 값 brute force 하는 방법


예를 들어 0xbf***f64 을 brute force 하는 경우

bf, **, *f, 00 이므로, **는 for문을 통해 입력 가능하나, *f의 경우 00001111을 항상 적용 시켜 주어야 한다.
그러기 위해서 255(11111111)부터 시작하는 값을 ~ 문자를 통해 비트 반전을 시키고(255(11111111) -> 0(00000000)), & 값을 연산하여, 즉 00000000과 1111을 mask 할 경우 참이 아니므로, if문이 실행되지 않고 그 아래 구문, brute[i]에 255의 값, 즉 FF 문자가 들어가게 된다. 254의 경우 11111110 이며, 비트 반전 시 00000001 이다.
(이것과 1111을 마스크 할 경우 참이 된다.) 맨 마지막 비트와 mask의 1과 비트 연산 시 참이므로, 해당 if문이 실행되고 continue 문을 통해 253의 값으로 재 진행한다. 253 역시 11111101 이므로 00000010이 되고, mask의 00001111 연산 시 참이 되므로 252가 진행된다.


#include <stdio.h>

#include <string.h>


#define NOP 0x90

#define BUFSIZE 5

#define MASK 15


int main()

{

        int i, j, tmp;

        unsigned char brute[2];

        unsigned char buf[BUFSIZE];

        unsigned char comm[200];


        buf[3]= '\xbf';

        buf[0]= '\x64';

        buf[4]= '\x00';


        // 0xbf***f00 brute force

        for(i=255; i>0; i--){

                for(j=255; j>0; j--){

                        brute[0] = i;


                        // bit operate start, only pass brute[1] = *f

                       // *f가 아닌 것들은 모두 걸러낸다. 

if(~j & MASK){

                                //printf("not f is %x\n", j);

                                continue;

                        }

                        brute[1] = j;

                        memcpy(buf+1, brute, 2);

                        printf("%x %x %2x %x\n", buf[0], buf[1], buf[2], buf[3]);

                        printf("---------------------------------\n");

                        sleep(1);

                }

        }


        return 0;

}




먼저 test.py 파일을 만든다.

payload = ["", "", ""]

payload[0] += "A"*40 + L_E(0x0804854a) + "AAAA"
payload[1] += "A"*40 + L_E(0x0804854a) + "AAAA"
payload[2] += "AAAA" + "\x90"*4 + "ABCD"*8

for p in payload:
    print p

그 뒤 python test.py > test 라는 파일을 만들어 주고

gdb 내에서 r 시킬 때 r <test 로 진행 가능하다.

'System hacking > linux exploit 관련' 카테고리의 다른 글

checksec 사용  (0) 2016.05.27
file 디스크립터(다른 프로세스 간 통신)  (0) 2016.03.09
gdb 내 값 전달  (0) 2016.03.08
C언어 주소 값 brute force 방법  (0) 2016.01.05
libc bin/sh 찾기 소스  (0) 2015.12.18
아래의 소스를 이용한다.

#include <stdio.h>

int main()
{
        long shell= 0x40058ae0; //system 함수의 주소

        while(memcmp((void*)shell, "/bin/sh", 8)) //system함수의 주소에서 8바이트씩 /bin/sh를 비교해서 찾는다.
                shell++; //못찾으면 다음 주소로

        printf("/bin/sh = %p\n",shell); //"/bin/sh" 주소 출력

}



+ Recent posts