-
sub write upSystem hacking training/pwnable.xyz 2019. 12. 31. 13:31
Welcome보다 쉽게 풀었다.
거두절미하고 디컴파일해보면 답이 나온다.
main()함수를 디컴파일 해본 결과인데,
v5와 v6에 사용자에 대해 입력을 받고, 두 수가 4918보다 작거나 같으면서 두 수의 차가 4919일 때 flag를 출력해준다.
따라서 위 두 조건을 만족시키며 flag를 출력할 수 있는데,
v5에는 0, v6에는 -4919를 입력하면 뚝-딱 풀린다.
⚡ root@ubuntu /mnt/hgfs/vm_shared/pwnable.xyz nc svc.pwnable.xyz 30001 1337 input: 0 -4919 FLAG{--------------------}
의문이 들었던 부분은 scanf()함수를 호출할 때 format string으로 %u(unsigned int)를 지정했는데, 음수 입력이 가능할까..? 하는 부분이다.
C99표준에 따르면 scanf()함수의 %u format string은 "-" 기호가 입력되었을 때 에러를 뿜지 않고, 2의 보수를 취한뒤 저장한다고 한다.
따라서 입력이 가능했고, 0 - (-4919)로 if문 조건을 만족할 수 있었던 것이다.
(Ref : https://stackoverflow.com/questions/38684386/scanf-u-negative-number)
반응형'System hacking training > pwnable.xyz' 카테고리의 다른 글
note write up (1) 2020.01.10 GrownUp write up (0) 2020.01.02 misalignment write up (0) 2020.01.01 add write up (0) 2020.01.01 Welcome write up (0) 2019.12.22