from pwn import *
s = ssh(user="random", host="pwnable.kr", port=2222, password="guest")
p = s.process(executable="/home/random/random")
key = 0xdeadbeef ^ 0x6b8b4567 # rand() 하면 첫 숫자로 항상 0x6b8b4567나옴
p.sendline(str(int(key)))
p.interactive()
<코드>
#include <stdio.h>
int main(){
unsigned int random;
random = rand(); // random value!
unsigned int key=0;
scanf("%d", &key);
if( (key ^ random) == 0xdeadbeef ){
printf("Good!\n");
system("/bin/cat flag");
return 0;
}
printf("Wrong, maybe you should try 2^32 cases.\n");
return 0;
}
// rand() 함수는 seed 정해져있으므로 프로그램 생성될 때 내부적으로 난수 생성 패턴(나오는 순서) 정해짐 - 매번 실행할때마다 동일한 값 나옴
// online c compiler에 rand() 돌려보면 됨
// 정석적인 방법은 gdb 분석 후 rand 함수 다음에 bp 걸고 r 한다음 x/gx $eax 해서 들어가있는 값 파악하면 됩니다 = 0x6b8b4567
// key = 0xdeadbeef ^ (rand()시 처음 나오는 숫자) 를 주면 된다
// 주의할 점은 파이썬 파일 제목이 random이면 안된다(이미 예약된 단어)
// from pwn import * 여기서 걸림
'security > 포너블 - pwnable.kr' 카테고리의 다른 글
pwnable.kr - [Toddler's Bottle] uaf (0) | 2023.02.06 |
---|---|
pwnable.kr - [Toddler's Bottle] shellshock (0) | 2023.02.06 |
pwnable.kr - [Toddler's Bottle] passcode (0) | 2023.02.06 |
pwnable.kr - [Toddler's Bottle] mistake (0) | 2023.02.05 |
pwnable.kr - [Toddler's Bottle] memcpy (0) | 2023.02.05 |