[pwnable.xyz] Add(50 pts) :: Write-Up
두비니
·2019. 11. 6. 00:06
We did some subtraction, now let's do some addition.
정직하게 더한다
솔직히 아무것도 상관은 없다. NX때문에 권한제한이 조금 있다.
대충 v4랑 v5를 잘 조작해주면 될듯
win함수 준걸로봐서 ret값을 이걸로 잘 덮으면 되겠쥬?
나는 v7을 이용할 것이다. 일단 result를 이용하고싶었지만 v7자체는 v6을 통해 11이상의 값을 입력하면 stack영역 그 밑까지 값을 입력할 수 있으므로 v7을 이용해 입력할 것이다.(전문용어로는 out of bound라고 하더라.)
v7은 rbp-60h에 있기때문에 v7 + 104가 시작주소(96 + 8)
이때 v7이 배열이라는 점을 잘 생각해보자. v7은 8byte인 __int64를 변수로 두기때문에 v7 + 104에 접근하고 싶다면 v6에 13을 입력하면 될 것이다.
참고로 나는 int64가 그냥 int랑 같은줄알고 4byte로 생각하고 계산하다가 한참을 헤맸다....ㅎ int64는 int와는 다르다는 점 기억하자
그러면 이제 flag함수의 주소만 넣어주면 된다
==final payload==
봐줄 점은 win함수의 주소값을 10진수로 변환하여 넣어줬고(입력받을때는 항상 dec의 형태로 입력받음), 한번 돌린 뒤 다시 a a a를 입력해주는 이유는 6번줄까지 입력한 상황은 ret값은 변조가 완료되었지만, 막상 while문이 종료되어야지 ret값까지 갈 수 있기때문에 scanf의 리턴값을 3이아닌 값을 주게되면 됩니다. 즉 문자열을 넣어주거나 값을 3개를 넣어주지 않으면 되겠죠!
scanf에 리턴값에 대해 잘 모르겠다면 다음 링크 참조
끝!
'War Games > pwnable.xyz' 카테고리의 다른 글
[pwnable.xyz] grownup(50 pts) :: Write-Up (0) | 2020.09.17 |
---|---|
[pwnable.xyz] misalignment(50 pts) :: Write-Up (0) | 2020.09.08 |
[pwnable.xyz] xor(50 pts) :: Write-Up (0) | 2020.08.12 |
[pwnable.xyz] Sub(50 pts) :: Write-Up (0) | 2019.11.05 |
[pwnable.xyz] Welcome(50 pts) :: Write-Up (0) | 2019.11.01 |