Profile

머리정리하는곳

c2w2m2

[Pwnium] pwn200

문제이름이 저거인지는 몰라도 일단은 pwn200입니다


아마 200점 이겠죠...?


pwn200        <== 문제


문제 일단 실행해보면 이름이랑 나이 입력받아여


바로 ida ㄱㄱ



쉬우니까 hex-ray 안쓰고 할게여


read_user 라는 함수 호출하고 연속으로 atExit 함수 호출하는데

아마


v1 = read_user()

atExit(v1)


식으로 인자구성 되서 가는거 같아여 차례로 하나하나 까보죠



read_user 함수 보면 Name 받고, Age 받네요.


Age 랑 Name 랑 주소 차이는 4 밖에 안나여


고로 Name 크기 [48 byte] + Age [4 byte] 하면 Age를 덮어쓸수 있어요.


그럼 위에서 했던것처럼 atExit 인자로 덮어쓴 Age가 들어갈 수 있겠네요 atExit 를 이제 봅시다




대충 핸드레이 해보면


if (Age <= 19h)

{

if(Age <= 12h){

if( Age >0)     ftn = kid;

}else

{

ftn = adult;

}

}else

{

ftn = man;

}

ftn( );

return 0;


정도 되나요


저희가 Overwrite 시킨 Age 가 If 에 들어갔다간 바뀌어 버리네요;;


고로 If 문을 우회할 수 있는 값을 찾아보니 음수를 넣으면 If가 우회되는,,,!


그럼 Name 에는 48byte + 4byte[EIP]

넣고 Age 에는 -1 넣으면 제가 원하는 함수를 실행 시킬수 있겠네요


뭐로 바꿀까 고민했는데 



이런 히든함수가...?!?!


고로 이걸로 바꾸죠 뭐 



(python -c 'print "A"*48 + "\x74\x86\x04\x08" + "\n" + "-1"';cat)




흠 푼거겠죠 eip 바꿨으니

'Pwnable' 카테고리의 다른 글

[Toddler's Bottle] UAF  (0) 2017.07.04
[Pico] ROP 1, 2, 3  (0) 2017.06.29
[Plaid] Ropasaurusrex  (0) 2017.06.28
[Toddler's Bottle] cmd1 , cmd2  (0) 2017.05.30
[Toddler's Bottle] flag  (0) 2017.05.30