일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- XSS
- webhacking
- 시스템
- WarGame
- 드림핵
- 모의해킹
- Web
- 순서도
- Webhaking
- 네트워크보안
- ftz
- hacking
- bee-box
- 비박스
- 워게임
- 웹해킹
- 웹
- 소프트웨어보안
- network
- System
- TCP
- 시스템해킹
- 리버싱
- 알고리즘
- dreamhack
- 소프트웨어
- reversing
- 해킹
- CodeEngn
- 네트워크
- Today
- Total
목록웹해킹 (17)
Without a Break

문제 사이트에 들어가면 다음과 같은 화면이 나온다. socket 페이지의 모습이다. 문제 코드를 보면 admin으로 POST 메소드를 통해 접속한 후 if문을 통과하면 플래그가 반환되는 것을 알 수 있다. if문을 통과하는 조건은 다음과 같다. 클라이언트의 ip가 127.0.0.1인지 User-Agent의 헤더 값이 Admin Browser인지 DreamhackUser가 admin인지 admin 쿠키 값이 true인지 userid가 admin인지 현재 host의 ip는 0.0.0.0이고, 포트 번호는 8000이다. host : 127.0.0.1 port : 8000 data: POST /admin HTTP/1.1 Host:host1.dreamhack.games User-Agent:Admin Browser..

문제 사이트에 접속하면 다음과 같은 화면이 나온다. command 문제라서 주소창에 명령어를 입력해봤지만 실행되지 않는다. 문제 코드를 확인하니 GET 메소드일 때는 실행이 안되고, GET 이외의 메소드일 때만 명령어가 실행된다는 것을 알 수 있었다. 버프 스위트를 사용해 문제 사이트의 패킷을 가로채서 리피터로 보낸다. 리피터로 보낸 후 GET 메소드를 HEAD 메소드로 바꿔주고, flag.py의 내용을 request bin으로 생성한 링크로 전송하는 코드를 작성한다. 요청을 수정하고 send 버튼을 눌러줬다. 전송 버튼을 누르면 요청에 대한 응답이 잘 이루어졌다는 200 OK가 나타난다. request bin을 확인하면 요청한 응답이 제대로 와서 플래그를 확인할 수 있다.

플래그는 /app/flag.txt에 있다는 것을 알 수 있다. image viewer로 들어가면 url을 입력할 수 있다. 입력되어있는 url을 그대로 두고 view를 하면 이미지경로에 있는 dream.png를 보여준다. 사용자가 빈칸에 입력한 url이 "localhost"이거나 "127.0.0.1"일 경우, error.png를 화면에 띄운다. 즉, localhost, 127.0.0.1을 우회해서 url을 입력해야 함 => 0x7f000001 혹은 Localhost 사용 입력창에 localhost를 입력하니 error.png가 뜬 것을 확인할 수 있었다. error.png가 뜬 상태에서 개발자 도구로 들어가면 error.png의 current source를 알아낼 수 있었다. 포트 번호는 1500~180..

문제를 보면 flag.py 안에 플래그가 있음을 확인할 수 있다. 제공해주는 URL로 들어가면 인덱스 페이지가 가장 먼저 뜬다. 메모 작성 페이지에서 일단 메모를 여러가지 입력해보았다. 메모를 입력한 후 개발자도구의 소스코드를 확인하면 /read?name=FILENAME 형태로 file의 내용을 확인할 수 있음을 알 수 있다. 문제에서 flag.py 안에 플래그가 있다고 했으므로 ../flag.py로 파일 이름을 지정해주면 다음과 같이 플래그를 얻을 수 있다.

php 파일을 사용해 플래그를 획득하는 문제이다. 플래그는 /flag.txt에 있음을 알 수 있다. 제공된 URL로 들어가면 인덱스 페이지가 뜬다. 파일 업로드 취약점을 활용할 것이므로 먼저 업로드 페이지를 사용할 것이다. 파일 업로드 취약점을 통해서 플래그를 찾아볼 것이므로 메모장에 flag.txt의 내용을 확인하는 코드를 작성한 후 php 파일로 저장해준다. 작성한 php 파일을 업로드한 뒤 리스트 페이지에서 업로드한 flag.php 파일을 열어보면 다음과 같이 플래그를 얻을 수 있다.

[풀이] 개발자 도구의 Element에서 script 코드를 보면 jack-target(호박)을 클릭 시 counter가 증가하는 함수가 있다. 이 코드를 활용하여 console창에 호박을 10000번 클릭하는 코드를 작성해 플래그를 얻을 것이다. 다음과 같이 호박을 10000번 클릭하는 코드를 Console창에 작성 후 엔터를 누르면 플래그가 출력된다. 답 : DH{I_like3_pumpk1n_pi3}

[문제 파일] def ping(): if request.method == 'POST': host = request.form.get('host') cmd = f'ping -c 3 "{host}"' try: output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5) return render_template('ping_result.html', data=output.decode('utf-8')) except subprocess.TimeoutExpired: return render_template('ping_result.html', data='Timeout !') except subprocess.CalledProcessError: return rend..

[문제 파일] const BAN = ['admin', 'dh', 'admi']; filter = function(data){ const dump = JSON.stringify(data).toLowerCase(); var flag = false; BAN.forEach(function(word){ if(dump.indexOf(word)!=-1) flag = true; }); return flag; } 배열 BAN에 있는 문자열을 필터링한다. (admin을 쳤을 때 플래그가 바로 뜨지 않도록 한 코드) app.get('/login', function(req, res) { if(filter(req.query)){ res.send('filter'); return; } const {uid, upw} = req.qu..