'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 |
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;
}
checksec 사용 (0) | 2016.05.27 |
---|---|
file 디스크립터(다른 프로세스 간 통신) (0) | 2016.03.09 |
gdb 내 값 전달 (0) | 2016.03.08 |
gdb 내에서 인자 값 전달(fgets 등으로 인해) (0) | 2015.12.18 |
libc bin/sh 찾기 소스 (0) | 2015.12.18 |
먼저 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 로 진행 가능하다.
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 |
checksec 사용 (0) | 2016.05.27 |
---|---|
file 디스크립터(다른 프로세스 간 통신) (0) | 2016.03.09 |
gdb 내 값 전달 (0) | 2016.03.08 |
C언어 주소 값 brute force 방법 (0) | 2016.01.05 |
gdb 내에서 인자 값 전달(fgets 등으로 인해) (0) | 2015.12.18 |