일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- system hacking
- 웹해킹
- LOB
- webhacking
- 해킹
- 운영체제
- Pwnable.kr
- webhacking.kr
- Spring Framework
- 정보보안기사 실기
- SQL
- PWN
- 정보보안기사
- Lord of BOF
- System
- Spring MVC
- Buffer Overflow
- Shell code
- 워게임
- Spring
- hacking
- 네트워크
- 정보처리기사 실기
- Payload
- Operating System
- OS
- wargame
- BOF
- pwnable
- stack overflow
- Today
- Total
DongDD's IT
[2018 Pragyan CTF] Write-up & 후기 본문
[2018 Pragyan CTF] Write-up & 후기
1. Authenticate your way to admin (web, 150p)
Point : 150 point
Category : Web
Problem :
Owen had created an authentication system which lets users login with their email-id or their team name. But that’s not fun is it? Logging in as the admin beats it all, so there’s your challenge.
The portal is running at 128.199.224.175:23000
Note: Use your Pragyan CTF credentials to login to the web portal.
이것 외에 login.php와 homepage.php 두 가지 소스 코드 파일이 주어졌다.
login.php
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 32 33 34 35 36 37 | <?php session_start(); require "helpers.php"; $type = $_POST['id_type']; $identifier = $_POST['identifier']; $password = $_POST['password']; $_SESSION['id'] = $identifier; if($type === 'team_name') { $team_name = $identifier; $_SESSION['id_type'] = 'team_name'; if(verify_teamname_password($team_name, $password) === true) { $_SESSION['logged_in'] = true; redirect('/homepage.php'); } else { die("Invalid Team Name-Password combination !!"); } } else if ($type === 'email') { $email = $identifier; $_SESSION['id_type'] = 'email'; if(verify_email_password($email, $password) === true) { $_SESSION['logged_in'] = true; redirect('/homepage.php'); } else { die("Invalid Email-Password combination !!"); } } ?> | cs |
homepage.php
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <?php session_start(); require "helpers.php"; if(! check_login()) redirect($LOGIN_URL); $id_type = $_SESSION['id_type']; $id = $_SESSION['id']; ?> <!DOCTYPE html> <html> <head> <title>Homepage</title> </head> <body style='background-color: #d6eaf8'> <p style="float: right"> <a href='/logout.php'> Logout </a> </p> <p style="clear: both"></p> <p style='height:30px; width:100%;'> </p> <center> <h2> Welcome User !! </h2> <br><br> <h3> <?php if($id_type === 'email') { echo "Email :- ".$id; } elseif ($id_type === 'team_name') { echo "Team Name :- ".$id ; } ?> </h3> <br><br> <h4> Here's a random funny saying for you :) <br> </h4> <br><br> <?php require "sayings.php"; printf(get_random_saying()); echo "<br><br>"; if($id === 'admin' && $id_type === 'team_name') printf(output_flag()); ?> </center> </body> </html> | cs |
login.php는 위와 같이 되어있었고 POST방식을 통해 SESSION을 설정해 입력한 값들이 올바른 값이라면 homepage.php로 redirect시킨다.
homepage.php에서는 처음에 login_check함수를 통해 login시 설정되는 세션 "logged_in"을 검사한다. 이 후에 로그인이 되어 있는 상태로 (id==admin && id_type == "team_name")이면 flag를 보여주는 형식으로 되어있다.
이 ctf를 참가할 때 생성한 아이디와 Team_name으로 설정해 Login하면 다음과 같은 page가 나온다. 이 상태에서 $_SESSION["logged_in"]이 true가 되어있지만 id가 admin이 아니기 때문에 flag가 출력되지 않는다.
이 상태에서 url을 통해 login.php로 넘어가 admin을 입력해 login하고 homepage.php로 다시 넘어오게 되면 admin인 상태로 로그인된 것처럼 되어 flag를 볼 수 있다.
Answer & Flag
Flag : pctf{4u1h3ntic4Ti0n.4nd~4u1horiz4ti0n_diff3r}
2. Quick Response
Point : 100 point
Category : forensics
Problem :
Tony had created a QR code for a specific purpose, and sent to his friend Rhody for deployment but when deployed, the QR code wasn’t working as it was supposed to. Figure out what’s wrong and help fix the problem.
문제에 첨부된 qr코드 파일이다. qr코드 스캔 사이트를 통해 스캔해보니 아무 값도 없다고 한다.
qr코드에 대해 잘 몰랐어서 찾아보니 11시,1시,7시에 있는 네모 모양이 항상 고정되어있는 것을 알 수 있었다.
이 부분을 덧붙혀서 수정해서 qr코드 스캔을 해보니 flag를 알 수 있었다.
Answer & Flag
ref) QR code Scan : http://www.onlinebarcodereader.com/
Flag : pctf{r3p4ir1nG~Qr_1s-my_h0bBy}
Point : 50 point
Category : Reversing
Problem :
My friend was trying out assembly for the first time, he has no clue what he's doing, help him out and procure your reward in the form of a flag :)
Flag : pctf{l3geNds_c0d3_1n_4Ss3mb1y}
Point : 150p
Category : Stego
Problem :
Mary, a data scientist, specializing in CNN, has been working on a problem, she has recorded her observations in a table. Have a look at the data and deduce the flag.
observations.xlsx 엑셀 파일이 주어져있었다.
이것을 축소시켜서 확인해보니 빈칸들이 글자를 이루는 것을 볼 수 있었고 이 것이 flag라는 것을 알 수 있었다.
Answer & Flag
Flag : pctf{ord3r_out_of=ch4os+this_world}
후기
Crypto와 binary 두가지 카테고리가 더있었는데 두 개는 아예 풀지 못했다. binary는 풀 수 있었던 것 같은데 너무 쉽게 포기했던 것 같고 crypto는 아예 손을 대지 못했다. crypto 문제에 대해서 좀 더 풀어봐야겠다는 생각이 들었다.
1일 좀 넘게있는 대회 시간이 주어졌는데 이번 ctf는 시간 투자를 많이 안한 것 같다.
쉬운 문제들이 많아 몇개를 풀 수 있었던 것 같다.
'CTF > Write-up' 카테고리의 다른 글
[2018 Angstrom CTF] Write-up(Web, Reversing, Binary) (0) | 2018.03.19 |
---|---|
[2018 Angstrom CTF] Write-up(MISC,Crypto) (0) | 2018.03.19 |
[2017 SECCON CTF Quals] Write-up & 후기 (0) | 2017.12.10 |
[2017 Oman CTF Quals] Join Team(Web, Medium, 100 point) (0) | 2017.11.08 |
[2017 Oman CTF Quals] Cool Name Effect(Web, Easy, 50 point) (0) | 2017.11.07 |