일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- node.js
- node
- 그래프
- 웹해킹
- 워게임
- 웹기초
- 뷰
- 자바
- 포렌식워게임
- MongoDB
- NavBar
- wargame.kr
- 자료구조
- materialize
- gitbash
- 웹개발
- 써니나타스
- 자바문제풀이
- bootstrap
- 이진트리
- GIT
- Express
- 웹해킹기초
- mongoose
- 이진탐색트리
- 자바기초
- 포렌식
- CTF
- 워게임추천
- nodeJS
- Today
- Total
보안 전공생의 공부
HackCTF #5 Guess me 본문
플래그를 획득해야한다.
링크에 들어가 문제를 확인해보았다.
GET방식으로 guess 값을 입력해 URL에 넘겨준다.
만약 변수 guess가 존재한다면,
secret.txt를 file_get_contents함수를 통해 문자열로 읽어주어 이를 변수 secretcode로 정의한다.
(trim은 문자열의 앞뒤에 생기는 불필요한 공백을 없애주는 함수이다)
=== 는 처음보는 연산자여서 검색을 해보았더니,
두 변수의 값뿐만 아니라 그 유형까지도 일치하는지 판단하는 것이였다.
(출처 : https://velog.io/@filoscoder/-%EC%99%80-%EC%9D%98-%EC%B0%A8%EC%9D%B4-oak1091tes )
변수 guess와 secrecode(secret.txt를 문자열로 변환한 것)가 일치하면 flag를 얻을 수 있다.
guess와 filename을 조작해 guests === secretcode가 참이 되게 해야한다.
둘 다 문자열이고, 값이 일치하게 하면 되는 것이다.
filename은 이미 첫번째 줄에서 초기화하였는데, 어떻게 변수를 덮어쓸 수 있을까?
이는 extract함수의 취약점을 이용하면 된다.
https://aceatom.tistory.com/164
예를 들어,
처음에 filename이란 변수에 secret.txt를 초기값으로 주었지만
파라미터로 filename=Xx을 리퀘스트하면
filename이라는 변수에 Xx가 들어가는 것이다.
filename의 값을 aaa로 변경해주면, 해당 파일은 없기때문에 file_get_contents에 의해 아무것도 문자열로 변환되지 않은 채 secretcode 변수에 담길 것이다.
그러면 guess도 값이 없도록 하면(입력창에 아무것도 입력 X) , filenmae===guess가 될 것이다.
논리연산자인 && 대신 비트연산자인 &을 이용해
아무값이나 넣은 filename은 결국 false이므로 0
guess = "" 이므로 null이므로 0이 된다.
0 ==0이므로 if문은 참이되어 플래그값을 얻을 수 있다.
(참고 : https://it-jin-developer.tistory.com/9 )
플래그는 HackCTF{3xtr4c7_0v3rr1d3ds_pr3vi0u5_kn0wn_v4r1abl35}
이다.
'Wargame > web' 카테고리의 다른 글
[SuNiNaTaS] #2 (0) | 2021.01.20 |
---|---|
N0Named Wargame [A] 입사테스트[2] | PNG와 APNG 구조 (0) | 2021.01.15 |
Lord of SQL Injection#6 darkelf (0) | 2021.01.15 |
Lord of SQL Injection#5 wolfman | White Space filtering (0) | 2021.01.15 |
Lord of SQL Injection#4 orc | Blind SQL Injection (0) | 2021.01.15 |