일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- TCP
- 소프트웨어보안
- 해킹
- 모의해킹
- dreamhack
- 순서도
- 웹해킹
- 시스템
- 리버싱
- webhacking
- network
- 드림핵
- 시스템해킹
- Web
- 비박스
- CodeEngn
- XSS
- 웹
- 네트워크보안
- hacking
- 워게임
- bee-box
- reversing
- ftz
- 네트워크
- Webhaking
- WarGame
- System
- 소프트웨어
- Today
- Total
목록Web (59)
Without a Break

포럼 관리자의 이메일을 찾는 문제이다. 힌트 1) testmail 파라미터 확인하기 2) 세번째를 아는 데는 두 사람이 필요하다. (힌트 : plain text) 문제 페이지에 들어가면 위와 같은 화면이 나온다. Online Users 페이지로 들어가면, admin 계정이 존재함을 알 수 있다. Online Users 페이지의 url을 확인하면, php로 작성되었음을 확인할 수 있었다. admin을 누르면 send Email이 뜨고, 주소가 위와 같이 변한다. 이 상태로 개발자 도구를 확인하면 email값이 뜨는데, href가 #인 것을 보아 admin의 email값임을 알 수 있다. 저 이메일을 디코딩하면 플래그가 뜨지 않을까 싶어 이메일 값을 디코딩 해봤다. 디코딩하는 것이 아니었나보다.. 그냥 em..

Alex Hanlon의 useranme을 찾아서 그의 계좌에 저장되어 있는 플래그를 찾는 문제이다. 별도의 취약점 힌트나 문제 코드 없이 문제 사이트 주소만 주어진다. 주어진 사이트에 들어가면 위와 같은 화면이 나온다. 스크립트를 사용해봤지만 통하지 않았다. sql을 사용해 admin 계정으로 로그인을 시도해봤지만 이것 또한 실패했다. 더 시도할 수 있는 게 있을까 고민하다가 버프 스위트를 사용해보기로 했다. 버프 스위트로 패킷을 캡처하여 리피터로 보낸 후 GET 메소드를 HEAD로 수정하고, 드림핵 툴로 username 변수를 출력하도록 요청을 했다. 하지만 400에러가 뜨고 Request Bin에도 아무것도 뜨지 않았다..

사용자가 입력한 값이 필터링 없이 출력된다. 'or 1=1 limit 1#'을 입력했을 때, 이미 존재한다고 뜨는 것을 보아 행의 개수가 1이어야 참, 거짓을 판별할 수 있다는 것을 알 수 있었다. 위의 정보들을 바탕으로 admin 계정의 패스워드들을 추출하기 위한 공격 코드를 작성한다. 공격 코드를 작성하는 순서는 다음과 같다. admin 패스워드 길이 찾기 각 문자 별 비트열 길이 찾기 (패스워드의 각 문자가 한글인지 아스키코드인지 알 수 없기 때문에 이를 판단하기 위해) 각 문자 별 비트열 추출 비트열을 문자로 변환 1. admin 패스워드 길이 찾기 length 함수 사용한다. length 함수는 문자열을 bytes 형태로 표혔하였을 때의 길이를 반환하는 함수이다. 즉, 인코딩에 관계없이 전체 문..

문제 사이트로 들어가보니 Find FLAG 입력창의 위치가 계속 바뀌고 있었다. 틀린 플래그를 입력하니 NOP! 이라는 문구가 나타난다. 개발자 도구를 확인하니 NOP!은 이미지임을 알 수 있었다. => 스크립트 활용 for (var i = 0x0; i < flag[_0x374fd6(0x17c)]; i++) { if (flag[_0x374fd6(0x176)](i) == operator[i % operator[_0x374fd6(0x17c)]](_0x4949[i], _0x42931[i])) {} else { text2img(_0x374fd6(0x185)); return; } } 개발자 도구 Element head 부분의 마지막 for문을 보면, _0x374fd6(0x17c)가 0x17c가 아닐 경우 리턴을 ..

[문제 코드] guest의 userLevel은 0, admin의 userLevel은 1 MAXRESETCOUNT=5이므로, 비밀번호를 5회 잘못된 값 입력 시 로그인을 더 시도할 수 없음 사용자가 새로운 계정을 생성할 때 1~100까지의 숫자 중 랜덤으로 백업 코드를 부여함 사용자로부터 userid와 password,name을 입력받아 새 계정을 만듦 입력 받은 userid가 존재한다면, 'Already Exists userid.'를 출력 resetCount가 MAXRESETCOUNT(=5)라면, 'reset Count Exceed.' 출력 사용자가 입력한 userid와 backupCode가 계정 정보와 일치한다면, 비밀번호를 바꾸고, 바꾼 BackupCode를 출력 => sleep(1)을 걸어서 1초 ..

플래그는 username이 admin일 때 index.html에 나타남 username은 sessionid에 저장되어 있음 sessionid는 4바이트의 랜덤 값을 hex로 변환한 값을 출력함 즉, 이 문제에서는 무차별 대입 공격을 사용하여 sessionid에 저장되어 있는 admin 계정을 찾아 패스워드(플래그)를 찾는다. 먼저, 코드에서 아이디와 패스워드를 알 수 있었던 guest 계정으로 로그인한다. burp suite를 통해 패킷을 캡처하면 guest의 sessionid가 함께 나온다. 무차별 대입 공격을 위해 캡처한 패킷을 send to Intruder로 Intruder로 보내준다. Payload type을 무차별 대입 공격(Brute forcer)으로 바꿔주고, Character set을 16..

문제 사이트에 들어가면 다음과 같이 나온다. 각 페이지에 들어가면 다음과 같은 페이지가 나온다. 각 페이지의 url을 보면 입력한 경로를 그대로 출력하고 있음을 알 수 있었다. 어떤 경로를 입력해도 텍스트로 뜨는 것 외에 다른 동작을 하지 않았다. 어떤 경로를 입력해도 되지 않으니 템플릿 언어를 써보기로 했다. *템플릿 언어 : 파이썬 변수 및 문법을 html 안에서 쓸 수 있도록 제공해주는 언어 템플릿 언어 {{7*7}}을 삽입했더니 결과값이 나타났다. 문제 코드를 확인하면 %(request.path)를 통해 경로를 출력한다는 것을 알 수 있었다. 섹션의 옵션 값이 뜨도록 {{config.items()}}를 입력해주니 플래그를 확인할 수 있었다.

문제 사이트로 들어가면 다음과 같이 나타난다. List 페이지에 들어가니 플래그가 있는 flag.php가 있는 것을 확인할 수 있었다. flag.php 페이지에 들어가니 역시나 플래그는 바로 뜨지 않았다. 문제에서 말했던 /uploads/flag.php 경로가 맞는데 왜 뜨지 않는걸까? view.php 파일을 확인해보니 /flag가 필터링되어 Permission denied가 뜨는 것을 알 수 있었다. index.php를 보면 GET['page']를 통해 입력을 받아서 include로 실행한다. 위와 같이 /var/www/uploads/flag의 경로로 실행해봤더니 can you see $flag?라는 글자가 뜨는 것을 확인할 수 있었다. php에서 flag를 우회하는 방법 중 하나는 flag 필터를 우..