반응형

SQL Truncation 문제를 풀어보도록 하겠습니다. SQL 절단?? 

 

문제에 들어가면 3개의 탭이 보이네요. 

HOME은 빈 화면이고, Register에선 사용자 등록, Administration은 관리자 로그인 기능이 존재하고 있습니다.

 

우선, Register 탭에서 관리자 USER 등록/생성을 시도해봅니다..

 

User already in DB라는 에러가 출력되며, admin 계정이 이미 존재함을 알 수 있습니다.

그래서, 등록이 불가능하죠.. 

 

SQL Truncation을 구글에 검색해보았더니, SQL Truncation Attack 이라는 공격기법이 존재하였습니다.

https://resources.infosecinstitute.com/sql-truncation-attack/#gref

 

SQL Truncation Attack

The SQL Truncation vulnerability is a very interesting flaw in the database. The successful exploitation of this issue leads to user account compromise,

resources.infosecinstitute.com

 

위의 링크에서 공격 원인과 기법을 파악해서 시도해보았습니다.

 

MySQL 데이터베이스가 기본 모드에서 실행 중이라면, Administrator 계정이 admin으로, 최대 문자열 길이는 20자로 제한된다고 합니다.

또한, MySQL 에서는 정의된 최대 문자열 길이보다 긴 경우엔 이후 문자열을 자르고 앞의 문자열만 받아들입니다.

따라서, 사용자 이름 길이가 20자로 제한된 상태에서 공격자가 20자 이상을 입력할 경우 새 사용자 이름을 승인하고 데이터베이스에 삽입하는 거죠. 

 

사용자 이름을 admin+(공백 15자)+임의 문자열을 입력하고, 원하는 패스워드 입력 후 등록 버튼을 클릭하면,

 

20자 이후의 문자열은 자르고, 새로운 유저로 받아들여 데이터베이스에 저장되었습니다.

즉, 이 테이블에는 'admin'과 'admin' 두 개의 관리자가 존재하는 거죠.

 

Administration 탭에서 본인이 입력한 패스워드를 입력하여 로그인 시도해봅니다.

 

정상적으로 관리자 권한 획득이 가능하고, Flag 값도 출력되었습니다.^^

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] JSON Web Token (JWT) - Introduction  (0) 2019.12.20
[root-me] XPath injection - authentication  (0) 2019.07.25
[root-me] CRLF  (0) 2019.07.18
[root-me] Javascript - Obfuscation1  (0) 2019.04.15
[root-me] Javascript - Authentication2  (0) 2019.04.15
반응형

Root me - CRLF 문제를 풀어보았습니다. 왠지 쉬운 것 같으면서도 안풀려서 오랫동안 방치해 놓았는데,

이번에 결국 풀었습니다..ㅜㅜ(별거 아니더라구요,, 반성,,)

 

우선, 문제에 들어가면 로그인 인증을 위해 ID와 PW를 받는 입력창이 보입니다.

그리고 그 하단에는 인증 로그가 출력되어 있죠.

이 로그를 통해 admin 계정은 존재한다...를 알 수 있겠죠?

 

그래서 ID와 PW에 admin / admin 을 입력하고 로그인 시도 해봤더니, 역시 failed to authenticate 가 뜨네요.

 

원래는 문제가 CRLF 내용이라서 CRLF Injection을 검색해서 시도해보았는데요, 

이 문제의 핵심은 CRLF Injection이 아니라 Log Injection이었습니다...ㅜㅜ

 

CRLF(Carriage Return Line Feed) 란?

 

-줄 바꿈(개행)을 의미하는 컨트롤 캐릭터

-CR은 0x0D LF는 0x0A

-윈도우에선 CRLF(\r\n), UNIX에선 LF(\n) 사용

 

CRLF에 대해 간단하게 알아보았고, 문제를 풀어보겠습니다.

https://medium.com/@shatabda/security-log-injection-what-how-a510cfc0f73b

 

링크의 자료를 이용하여 문제를 풀었습니다.

가짜 레코드, 즉 성공적인 로그인 이벤트를 삽입하여 로그를 위조할 수 있다는 내용이었습니다.

 

그래서 성공적인 로그인 이벤트(admin authenticated.) 문자열과 개행(CRLF)를 이용하여

정상적인 로그 이벤트와 위조한 로그인 이벤트, 2가지가 출력되는 것이죠.

 

결과는 이렇게 출력됩니다. 아래에 Flag 값까지 출력되었군요ㅋㅋ 문제해결!

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] XPath injection - authentication  (0) 2019.07.25
[root-me] SQL Truncation  (0) 2019.07.18
[root-me] Javascript - Obfuscation1  (0) 2019.04.15
[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15

반응형

Javascript Obfuscation 문제입니다. 원래 Obfuscation 뜻을 몰랐는데 이번에 찾아보고 알았습니다.

난독화라는 뜻이더군여..ㅋㅋㅋ 즉, 자바스크립트 난독화 문제입니다.

 

자바스크립트는 소스보기를 통해 쉽게 유출되기 때문에 난독화 적용을 주로 하고 있는데, 요즘에는 워낙 알려진 난독화방법이 많아 그만큼 쉽게 복호화되기도 합니다.

 

문제를 풀어보겠습니다. 역시나 밑도 끝도 없이 비밀번호를 입력하라는 창이 뜨네요.

 

소스를 보면 패스워드가 요상한 문자로 되어있는 것을 볼 수 있습니다. 

하지만 URL Encoding으로 단순 인코딩되어있다는 느낌이 오네요.

 

URL 디코더로 해당 문자열을 복호화 시키면 평문으로 Flag값을 획득할 수 있습니다.

 

URL 디코더는 Burp Tool을 써도되고 online tool을 써도 무방합니다.

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] SQL Truncation  (0) 2019.07.18
[root-me] CRLF  (0) 2019.07.18
[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
반응형

역시 Javascript 문제입니다.

 

문제 들어가보니 그냥 달랑 로그인 버튼밖에 없네요. 일단 소스보기를 해봅니다.

 

이 곳에도 login.js 파일을 참조하고 있습니다. 해당 파일을 열어봅니다.

 

username이 TheUsername이고, password가 ThePassword일 때, 로그인 인증이 가능한데

 

위에서 TheUsername과 ThePassword를 TheSplit 배열에서 가져오고 있습니다.

 

근데 또 TheSplit 배열은 TheLists 리스트를 문자열로 자른거네요. 그러니까 GOD이 아이디, HIDDEN이 패스워드가 되는 거죠.

 

어차피 패스워드를 인증값으로 받고 있어서 로그인 해보지는 않았습니닿ㅎㅎ

 

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] CRLF  (0) 2019.07.18
[root-me] Javascript - Obfuscation1  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
[root-me] HTML - disabled buttons  (0) 2019.04.15
반응형

Javascript 소스 문제입니다.

 

문제에 들어가니 패스워드 입력 창밖에 나오지 않네요.

 

문제도 그렇고... 우선 소스 보기를 해봅니다.

그냥...패스워드가 나와있군여. 저걸로 인증하면 패스!

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Javascript - Obfuscation1  (0) 2019.04.15
[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
[root-me] HTML - disabled buttons  (0) 2019.04.15
[root-me] Path Truncation  (0) 2019.02.26
반응형

자바 스크립트 문제이다.

 

문제에 들어가보니, 로그인 폼이 있어서 그냥 아무 값이나 넣어서 로그인 시도를 해보았다.

 

음... 당연히 로그인이 안되네요..ㅎ

 

우클릭해서 소스보기를 해보았습니다!! 그랬더니 소스 상에 login.js 파일을 참조한다고 나오는군요.

 

login.js 파일 분석을 해봅니다. id가 4dm1n이고 password가 sh.org일 경우 정상적으로 로그인이 된다는 로직입니다.

 

로그인을 시도해보면,

 

패스워드가 Flag 값이라는 소리군요. 대충.. 사실 이 과정 필요없이 바로 login.js에서 패스워드 확인 후 Flag 인증을 해도 아무 상관 없습니다!ㅎㅎ 

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15
[root-me] HTML - disabled buttons  (0) 2019.04.15
[root-me] Path Truncation  (0) 2019.02.26
[root-me] SQL Injection - GBK  (0) 2019.02.21
반응형

아직 웹 서버 문제도 못 풀었지만, 클라이언트 문제라도 빨리 풀어버리고 싶어서... 시작해보았다.

 

첫번째 문제는 HTML 문제이다.

 

문제에 들어가보면 비활성화된 입력 폼과 버튼이 있는 화면이 뜨는데, 아마 이걸 활성화해서 보내면 되는 거겠지?

 

웹 프록시 도구에서 전송된 응답 값에서 입력 폼과 버튼 부분을 찾아, 그 곳에 "disabled" 속성이 있길래 이걸 그냥 삭제해보았다.

 

그랬더니, 정상적으로 입력 창과 버튼이 활성화 되었다. 그냥 임의의 값을 써서 보내보니,

 

Flag 값이 나왔다!

 

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Javascript - Source  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
[root-me] Path Truncation  (0) 2019.02.26
[root-me] SQL Injection - GBK  (0) 2019.02.21
[root-me] Server-side Template Injection  (0) 2019.02.08
반응형

우선, 엔디언이란  컴퓨터 메모리 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법이다.(출처-위키백과)

 

그 중에서 바이트 순서(바이트 오더)를 설명하는 용어를 "빅엔디언", "리틀엔디언"으로 나눌 수 있다.

 

엔디언(Big-Endian)은 바이트 열에서 가장 값이 먼저 저장되고,

리틀엔디언(Little-Endian)은 바이트 열에서 가장 작은 값이 먼저 저장된다.

 

위의 그림과 같이 빅엔디언 형식은 상위 바이트의 값(바이트 열에서 가장 큰 값)이 메모리의 시작주소에 먼저 저장되고,

리틀엔디언 형식은 하위 바이트의 값(바이트 열에서 가장 작은 값)이 메모리의 시작주소에 먼저 저장된다.

 

우리가 자주 사용하는 인텔(Intel)계열 프로세스는 리틀엔디언 형식으로 데이터를 저장하고 있으나, CPU간 데이터 전송을 위해 데이터를 전송할 경우에는 빅엔디언 형식으로 변환하여 전송한다.

 


01111011 10010101

 

예를 들어 위와 같이 2Byte, 즉 16bit의 값이 있다고 가정했을 때,

 

빅엔디안 순서로 읽으면 0x7B95 이고, 리틀엔디안 순서로 읽으면 0x957B가 되는 거죠.

반응형

+ Recent posts

반응형
반응형