일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Web Hacking
- hackingcamp ctf writeup
- webhacking
- WEB-hacking
- backdoorctf 2023
- backdoorctf 2023 web Unintelligible
- Web
- hackctf
- 해킹캠프 ctf
- WarGame
- thinkPHP
- 해외 wargame
- CTF
- hacking
- hackingcamp
- wargame.kr
- 해킹캠프
- php
- cve 분석
- backdoorctf writeup
- XSS
- 웹 해킹
- RCE
- 웹해킹
- CVE
- XSS-game
- backdoorctf 2023 web
- writeup
- 해외 워게임
- Hacker.org
- Today
- Total
목록hacking (17)
<OOO>
flag를 입력하라고 하는데, 정직하게(?) 입력할 경우 이렇게 뜬다. replace를 이용해서 우회를 하는 방법인가 싶었지만, 그건 아니었다. 제목 그대로 Input Check를 하는걸로 보아 string 형인지, int 형인지, list형인지 구분하는 것 같다. 일단 flag를 입력해보자. 그러면 No Hack~ 이라는 단어를 볼 수 있는데, 내가 입력한 단어는 string 형인걸로 보인다. 이걸 배열로 바꿔버린다면 이 문제는 풀린다. ?text=flag 부분에 []를 추가하게 된다면 풀리게 된다. strcmp 에서도 이 부분이 먹힌다..! ?text[]=flag를 하면 flag가 나온다.
time 이라는 변수에 최소 5,184,000 초 이상 7,776,000초 미만을 넣으면 넣은 시간만큼 sleep이 작동 한 후 flag를 출력해준다. 여기에서 취약점이 터지는 부분은 sleep((int)$_GET['time']); 부분이다. 정상적인 소스이고, 취약점이 터지는 함수는 안보이는것 같은데... 라고 생각을 할 수 있으나, int형으로 변환을 하는 부분에서 취약점이 발생한다. 이 문제를 해결하는 방법은 5184000초를 지수형태로 입력을 하게 된다면 첫번째 is_numberic 함수에서는 통과가 된다. 그리고 11번째 라인에서 int로 변환할 때, 소수점이 있는 값일 경우 소수점을 버리게 되므로 문제가 짧은 시간 내에 풀리게 된다. 즉, 5184000초를 지수로 변환을 하면 풀린다는 것이다...
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 유명한 짤이 떠오른다. 소스는 위의 사진과 같다. sha1로 input값을 해시화 하는데 md5로 240610708의 값을 해시화 시킨 값과 같다면 풀리게 된다. 여기서 필요한건 sha1의 매직해시 값이다. https://humit.tistory.com/170 여기서 매직해시 값을 알 수 있다. input 값에 10932435112 를 넣게되면 풀린다.
딱 봐도 SQL injection을 해보고 싶은 마음이 든다. View Source 버튼을 누르면 소스가 나온다. GET 방식으로 id 와 pw 를 받고, pw는 sha256으로 해쉬를 돌린 다음 sql 쿼리에 넣는다. mysqli_real_escape_string 이나 preg_match 와 같은 필터링이 없는걸 확인이 가능하다. 자 그러면... SQL injeciton을 해보자. id에 ' or 1=1 # 을 하고 로그인을 시도하면 flag가 나온다.
LFI 취약점인지,,, 아니면 command injection인지 헷갈렸다 ㅋㅋ 아무래도 파라미터가 command라고 되어 있어서 그런것 같다. 파일을 읽어보라고 하는데, 그 파일의 이름은 flag.php 이라고 하는데... command=flag.php 를 하게 된다면 공백만 출력이 된다. 뭔가 필터링을 하는것 같다. 혹시나 싶어서 command=test로 들어가니 위에 있는 사진과 동일한 화면이 떴다. 혹시 싶어서 replace로 잘라내는게 아닌가 싶어 flflagag.php를 했더니 flag가 나왔다.
php로 구성되어 있다. 대충... 해석하면 guess와 secretcode가 일치해야지 flag.txt를 출력해준다. extract 에 취약점이 발생하는 것 같다. extract 함수는 배열속의 키값들을 변수화 해주는 함수이다. 해결 방법은 filename에만 값을 주고, guess에는 값을 주지 않게 된다면 동일하다고 나와서 풀리게 된다. (둘 다 값을 안줘도 풀린다.) flag 획득
page라는 파라미터에 숫자가 들어가는데, 이게 좀 많이 있는것 같다. 노가다로 +1씩 증가시켜서 풀어도 되지만, 너무 오래 걸리므로 파이썬을 이용하여 풀어야 한다. 파이썬의 코드는 다음과 같다. import requests URL = 'http://ctf.j0n9hyun.xyz:2025/?page=' i=1 while 1: URL = 'http://ctf.j0n9hyun.xyz:2025/?page=' req = URL + str(i) get = requests.get(req) if "HackCTF{" in get.text: print(URL+(str(i)),'에 flag 있음') break i=i+1 print(req) 대충 만든거라 코드가 이쁘지 않다... 이 코드를 실행 했을때, 이렇게 나온다.
진짜 힘들었다... 그만큼 아직 내 실력이 많이 부족하다는걸 느끼게 된 시간인것같다. 분석하면, frame 뒤에 있는 #을 기준으로 해서 그 뒤를 읽어서 출력해준다. script태그, javascript 문법을 활용해도 풀리지 않기에 애를 먹었다... (다른 분들의 힘을 빌려 문제를 풀었다...) 힌트에서 google.com/jsapi?callback=foo 로 접속해서 알아보라고 하는데, 접속했을 때, 다른 사이트로 리다이렉션이 되어 확인이 불가능 하였다... 1) Data URL Scheme 방식으로 푸는 방법 2) URL을 입력하여 푸는 방법 1. Data URL Scheme 방식으로 푸는 방법 #뒤에 data:text/javascript,alert(1) 을 입력. #data:text/javascr..