HackCTF Web의 첫번째 문제인 / 문제를 들어가보면 깜찍한 로봇 하나가 나온다.
이 로봇이 힌트!🤖
이 문제는 robots.txt 를 활용하여 푸는 문제입니다.
robots.txt란, 검색엔진의 접근을 설정하기 위한 파일입니다.
링크에 /robots.txt를 입력해주면 다음과 같은 창이 나오는 것을 볼수있다.
링크에 /robots.txt 대신 /robot_flag/를 입력하면 flag를 얻을수있다.
HackCTF{w3lcome_to_s1mple_web_h3cking!}
다음 문제는 Hidden이라는 문제입니다
문제를 들어가보면 5번 파일에 플래그가 있다악!!!!!!!!!!이라는 글과 함께 버튼 4개가 나옵니다.
육안으로는 5번 버튼을 확인 할수없는 상태입니다.
4번 버튼을 눌러보겠습니다.
버튼을 누르면 get방식으로 전송되는 것을 확인 할수있습니다.
?id=4 이 부분을 ?id=5로 수정을하면 메시지창에 Nop이라는 글 대신 flag가 뜨는 것을 확인할수있습니다.
HackCTF{idx_is_so_s1m3le_ctf}
세번째 문제는 Button이라는 문제입니다.
문제에 들어가면 아래의 버튼으로 하여금 플래그를 출력하게 해줘!라는 문장이나오고 버튼 하나가 나옵니다.
버튼을 눌러도 아무런 변화가 없는 것을 확인 할수있을 것입니다.
개발자 도구를 이용해 코드를 확인하면 button이라는 value가 post형식으로 전송된다는 정보를 얻을 수 있다.
value를 flag로 바꿔보자!
그럼 버튼을 눌렀을때 아래와 같은 flag가 나오는 것을 확인 할수있다.
HackCTF{0k4y...php_c4nn0t_cr34t3_4_butt0n}
다음은 보물이라는 문제입니다.
문제를 들어가 보면 다음과 같은 화면이 나옵니다.
page 1버튼을 눌러보면 해시값이 출력됩니다.
Hash Analyzer 로 분석해본결과 SHA 512이라는 결과가 나왔습니다.
page라는 파라미터에 숫자가 들어가는데 페이지 변수 값이 달라지면서 해시 값이 달라지는 것을 보아 flag가 있는 페이지를 찾는 문제이고 페이지의 경우의 수가 많이 있는 것 같습니다.
BurpSuite의 Intruder 도구를 통해 URL의 파라미터 변조를 자동화하여 문제를 풀수도 있지만 BurpSuite가 설치되있지 않은 관계로 파이썬 코드를 짜 문제를 풀었습니다.
import requests
url = "http://ctf.j0n9hyun.xyz:2025/?page="
for i in range(1, 5000):
ans = requests.get(url+str(i))
if "HackCTF" in ans.text:
print(i)
break
print("/page=", i, "에 Flag 없음")
스크립트 결과
코드를 실행시키면 1225에서 멈추는 것을 확인할수있습니다.
/?page=1225를 입력하면 아래와 같이 flag가 출력되는 것을 확인할수있습니다.
HackCTF{0hhhhh_5o_g0od_try!}
다음 문제는 Guess me라는 문제입니다.
문제를 들어가보면 비밀 코드를 맞춰보세요. 성공하면 플래그를 뱉어낼 겁니다.라고 되어있고, 밑에 php코드가 적혀있습니다.
이 문제는 php의 extract취약점을 알고있는지 묻는 문제입니다.
extract함수는 배열속의 키값을 변수화 해주는 함수다.
php코드를 해석하면 guess와 secretcode가 일치해야 flag.txt를 출력해준다.
php에서 $_GET 변수는 ?secretcode= 이런식으로 전달이 가능하다.
하지만 이런식으로 한다고해도 또 변수가 선언되기 때문에 의미가 없다.
filename에 해당하는 파일을 찾고, 그 파일의 콘텐츠를 확인하는데 서버 내 파일이 없기에 null값을 리턴하는데, guess도 null 값이 들어가면 된다.따라서 filename=아무문자&guess=를 입력하면 flag를 찾을 수 있게 된다.
filename에 아무값이나 대입해도 되는 이유는 extract()가 filename변수를 선언한뒤에 나타나기 때문이다.
참고로 secret.txt와 flag.txt에 접속을 하면 이미 막혀있는 상태다.
HackCTF{3xtr4c7_0v3rr1d3ds_pr3vi0u5_kn0wn_v4r1abl35}
Read File이라는 문제입니다.
문제를 들어갔지만 Read File과 File is flag.php라는 글 외에 다른 글은 딱히 없었다.
url을 살펴보니 command라는 인자에 구글주소 값이 전달되있었다.
file이 flag.php라고 되어있으니 파라미터 값으로 flag.php를 전달해보았다.
에러페이지가 나온다.
flag.php값을 필터링하는 것으로 예상이된다.
이어서 파라미터 값으로 flag를 전달해보았다.
맨처음과 같은 페이지가 나오는 것을 확인할수있다.
이를 통해 flag라는 단어를 필터링 하는 것을 알수있다.
이를 우회하기 위해 flflagag.php라는 값을 전달해보았다.
flag값이 나오는 것을 확인 할수있다.
HackCTF{w3lcome_to_vu1n_web?}
Login이라는 문제입니다.
sql injection을 사용하여 푸는 문제로 추측할수있습니다.
이번문제는 맥북을 사용하는 저를 위해 친절히 코드를 볼수있는 버튼이 마련되어있습니다😊👏
코드를 보니 역시나 sql에서 취약점을 보이고 있다.
id를 admin'#으로 입력을 하면 '로 sql이 닫히고, #이 뒷부분을 주석처리를 하여 비밀번호를 입력하지 않아도 로그인이 되는 것을 볼수있습니다.
로그인 버튼을 누르면 flag를 확인 할수있습니다.
HackCTF{s1mple_sq1_1njecti0n_web_hack!!}
마법봉이라는 문제입니다.
View Source를 통해 소스코드를 확인해보면 Magic Hash를 알고있는지 묻는 문제라는 것을 알수있다.
md5(240610708) 값을 Magic Hash 사이트를 통해 확인을 하면 0e462097431906509019562988736854라는 값을 확인할수있습니다.
0e로 시작하기 때문에 이값은 int==int비교를 할때 0으로 인식이 됩니다.
sha1를 암호화할때 0e인 값을 찾아보면 0e07766915004133176347055865026311692244, 즉, 10932435112라는 값을 얻을 수 있습니다.
얻은 값을 입력창에 넣고 제출하면 flag가 나오는 것을 확인 할수있습니다.
HackCTF{magic_makes_everything_possible}