일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- useMutation error
- 잠실새내
- 도그존
- graphql mutation error
- 홍대 예술
- 예쁜술집 예술
- 홍대 토라비
- 토라비
- 신촌 소문난집
- graphql react native
- 지보싶 신촌점
- 고르드
- 화이트 해커를 위한 웹 해킹의 기술
- typescript
- 잠실새내 도그존
- graphql
- 금별맥주
- 비동기배열
- 비동기배열처리방법
- graphql 400
- 홍대 카페 장쌤
- graphql with RN
- 운정 소바동
- 앙버터마카롱
- promise메서드
- apolloclient
- promise처리
- graphql with reactnative
- apollo react native
- 화이트해커를 위한 웹 해킹의 기술
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
HackCTF [Web] / 풀이, Login 풀이 본문
/ 풀이
문제를 클릭하면 해당 페이지가 출력된다. 그리고 Hidden Flag라고 적혀있다.
페이지 자체에 뭔가 숨겨져있을까 싶어서 페이지 코드와 쿠키도 확인했지만 특별히 찾을 수 있는건 없었다.
그러다 생각난 것이 robots.txt 였다.
robots.txt
정보 수집을 위해 사용하는 웹 로봇에 정보 수집을 허용하거나 불허하는 명령을 내리는 파일
robots.txt 파일 내의 User-agent 키워드를 이용하여 지정된 User-agent 요청 헤더를 전송하는 특정 로봇에게 명령을 내릴 수 있다.
설정된 경로 정보 수집을 차단, 허용할 수 있다.
robots.txt가 존재하는 사이트의 경우 디렉터리 경로 정보가 노출될 수 있다.
disallow로 차단하더라도 robots.txt를 출력하면 어떤 디렉토리가 차단되었는지 알 수 있기 때문.
또한 악의적인 robot들은 robots.txt를 내용을 준수하지 않을 수 있다.
해당 URL 뒤에 robots.txt를 입력하자 robots.txt 내용이 출력되었다.
그리고 모든 로봇에 대하여 /robot_flag/ 디렉토리 접근은 불허되어 있다.
접근이 불허된 디렉토리로 이동해보자!
이동하자 답을 얻을 수 있었다.
Login 풀이
문제를 클릭하니 로그인 페이지가 출력되었다.
이제 로그인페이지를 보면 SQL injection이 가장 먼저 떠오른다.
source 코드를 볼 수 있는 버튼도 있다. 코드를 확인해보자
<?php
highlight_FILE(__FILE__);
require_once("dbcon.php");
$id = $_GET['id'];
$pw = $_GET['pw'];
$pw = hash('sha256',$pw);
$sql = "select * from jhyeonuser where binary id='$id' and pw='$pw'";
$result = mysqli_fetch_array(mysqli_query($db,$sql));
if($result['id']){
$_SESSION['id'] = $result['id'];
mysqli_close($db);
header("Location:welcome.php");
}
?>
예상대로 SQL injection을 이용해야 할 것 같다.
SQL injection은 아래 글에서 더 자세하게 다루고 있다.
2020/09/11 - [웹/웹 해킹] - SQL injection
2020/09/29 - [웹/웹 해킹] - SQL injection 실습1 (WHERE 구문 우회)
문제에서는 해당 쿼리문을 만족하는 데이터가 하나라도 존재하면 해결될 것 같다.
특정 아이디를 가져오지 않아도 문제가 해결될 것 같으니 우리는 id를 항상 참으로 만들고 pw는 주석처리 해주자
URL에 /?id=' or 1=1 %23 을 입력해주자
id='' or 1=1 #pw=
그러면 쿼리문은 위와 같은 상태가 된다.
id가 참이 되기 때문에 데이터 베이스에 있는 모든 값을 가져올 수 있다.
따라서 if 조건문을 만족하게 된다.
답이 출력되었다!
더 자세한 풀이는 아래 링크 참조
2020/10/04 - [wargame 풀이/LOS] - LOS 1~3번 풀이 (gremlin, cobolt, goblin)
+Login 문제 꼼수
코드에서 header("Location:welcome.php"); 부분을 보고 welcome.php를 URL에 바로 입력해줘도 flag를 얻을 수 있을지 궁금해져서 한번 입력해보았다.
똑같이 flag가 출력되었다.ㅋㅋㅋㅋ
'wargame 풀이 > HackCTF' 카테고리의 다른 글
HackCTF [Web] LOL 풀이 (0) | 2021.02.07 |
---|---|
HackCTF [Web] Read File 풀이 (0) | 2021.01.27 |