반응형

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
반응형


SQL Injection 문제를 풀어보도록 하겠습니다. 관리자 권한을 획득하면 되는 문제인데요, GBK를 이용하라고 하네요.


그래서 일단 GBK를 찾아보았습니다.


GBK는 중국어 간체를 위한 문자 세트로, 2006년 mysql-real-escape-string을 우회하는 방법으로 소개되었습니다.

\xBF' (=URL 인코딩 시 %bf%27) 문자열을 사용하여 싱글쿼터를 우회하는 방식으로 사용됩니다.


출처 : https://pentesterlab.com/exercises/web_for_pentester_II/course



문제로 들어가보면 로그인 창과 위에 멤버 리스트를 보여주는 버튼이 하나 있어서 눌러보았습니다.



멤버 리스트를 보니 "admin"이라는 유저가 존재한다는 것을 명확히 알 수 있었습니다.



SQL Injection 공격을 시도해보았습니다.


많은 시행착오를 겪었는데요, 공격 쿼리나 공격 방법은 상단에 써진 출처를 참고하였습니다.


Query : %bf%27 or 1=1--

          %bf' or 1=1--

          %bf%27 or %bf%271%bf%27=%bf%271

          %bf%27 and 1=1-- 


등... 많은 쿼리로 테스트를 해보았는데, FLAG가 나오지 않았어요.. 구글링해도 문제가 잘못되었다는 둥 Burp로 안된다는 둥...



하지만! 문제를 해결했습니당!!!


login=admin%bf%27 or 1=1-- &password=1 << 주석과 &사이에 공백을 주고, Follow Redirection 버튼을 클릭해야 합니다.


왜 공백을 주어야 하는지는 잘 모르겠습니다만,,, 그래야 follow redirection 버튼이 나오더라고요ㅠ(알려주시면 감사하겠습니다^^)



follow redirection 버튼을 클릭하면 FLAG 값이 노출되는 곳으로 리다이렉트되어 플래그를 획득할 수 있습니다.

반응형

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

[root-me] HTML - disabled buttons  (0) 2019.04.15
[root-me] Path Truncation  (0) 2019.02.26
[root-me] Server-side Template Injection  (0) 2019.02.08
[root-me] SQL injection - string  (0) 2019.02.07
[root-me] LFI - Double Encoding  (1) 2019.01.17
반응형

Server-side Template Injection 문제입니다. 처음에 접했을 때는 생소한 공격방법이라 당황했었는데요,

구글 검색 시 많은 정보가 나오더라고요.. (공부 안한거 들통ㅠ)


이 문제를 풀 때 개념을 https://www.netsparker.com/blog/web-security/server-side-template-injection/ 이 곳에서 파악했구요,

상세 공격 방법들은 https://portswigger.net/blog/server-side-template-injection 이 곳을 참고했습니다.

요약하면, Server Side Template는 동적 HTML을 생성할 수 있다는 큰 장점때문에 사용되고 있는데, 템플릿 문자열 내에 사용자가 입력을 제어하는 부분을 이용하여 사용자가 템플릿 표현식을 실행할 수 있을 경우 원격 코드 실행까지 이어질 수 있다는 것입니다.

 

문제를 풀어보도록 하겠습니다.


문제에 들어가보면, 닉네임을 입력하라는 입력창과 check 버튼이 있습니다.

임의의 문자열을 삽입한 후 버튼을 클릭하면 아랫 줄에 echo 명령어처럼 사용자가 입력한 값을 그대로 뿌려줍니다.


이번에는 공격 가능성이 존재하는지 알아보도록 하겠습니다.


${7*7} 을 입력할 경우, 공격이 불가능한 경우라면 "${7*7}" 전문이 나오는 것이 정상이지만, 문제에서는 계산이 되어 나옵니다.

때문에, 원하는 명령어를 실행할 경우 서버에서 실행되어 결과 값을 얻을 수 있을 것 같습니다..


우선, 간단한 명령어부터 실행해보도록 하겠습니다.


<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("실행할 명령어") } << 명령 코드를 입력하면 위와 같이 명령어 결과 값을 확인할 수 있습니다. (공격코드는 상위 링크에서 확인하였습니다.)


whoami 명령어 역시 정상 동작하여 결과를 확인 할 수 있었습니다.


이번에는 문제에서 요구한 파일을 읽어보겠습니다. 간단한 cat 명령어로 flag를 획득할 수 있습니다.

반응형

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

[root-me] Path Truncation  (0) 2019.02.26
[root-me] SQL Injection - GBK  (0) 2019.02.21
[root-me] SQL injection - string  (0) 2019.02.07
[root-me] LFI - Double Encoding  (1) 2019.01.17
[root-me] PHP filters  (0) 2019.01.16
반응형

SQL injection string형 문제를 풀어보았습니다. 역시 관리자의 패스워드를 알아내야 합니다.


문제에 들어가시면 홈/검색/로그인 탭이 있습니다.

이 메뉴들 중에서 SQL Injection이 가능한 포인트를 찾는 것이 관건이었습니다.

news_id 파라미터, 로그인 메뉴의 login, password 파라미터 등 여러 곳에서 SQL Injection을 시도해보았으나,

유일하게 SQL Injection이 가능한 포인트는 검색 메뉴의 recherche 파라미터 였습니다.


검색어에 a를 삽입하면 정상 값으로 5개의 결과 값을 출력하였고요,

a'를 삽입하니 syntax Error가 출력되어서 a%'를 삽입 해보았습니다.


no such column 이라는 에러가 떠서 저는 이곳이 SQL Injection에 취약한 포인트라 판단하였습니다.


이번에는 필드 갯수를 구하기 위해 order by 구문을 삽입했는데요, 아래 구문을 순차적으로 삽입하여 필드 갯수 가 2개인 것을 파악하였습니다.

a%' order by 1--

a%' order by 2--

a%' order by 3-- << 에러 출력 


sql 쿼리문을 삽입하여 스키마 정보를 파악해보았습니다.

a%' union select 1, sql from sqlite_master-- 구문을 삽입하여 news 테이블과, users 테이블이 존재하고 있음을 알 수 있습니다.


마지막으로, 관리자 패스워드가 존재할 것 같은 users 테이블에서 username과 password 값을 출력하면 됩니다.

a%' union select username, password from users-- 해당 구문을 삽입하면, 관리자의 패스워드를 획득할 수 있습니다.

반응형

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

[root-me] SQL Injection - GBK  (0) 2019.02.21
[root-me] Server-side Template Injection  (0) 2019.02.08
[root-me] LFI - Double Encoding  (1) 2019.01.17
[root-me] PHP filters  (0) 2019.01.16
root-me >> SQL injection - blind  (0) 2018.06.08
반응형

오랜만에 root-me 문제를 풀어보았습니다.ㅠㅠ

PHP filter 문제이고, 어드민 패스워드를 찾으면 된다고 하네요.


우선, 문제를 들어가보면, home과 login 버튼이 활성화 되어있습니다. 클릭해봅니다..


[home] 버튼을 클릭하면 URL 상에 inc 파라미터로 해당 php파일이 들어가있습니다. 

LFI 문제가 아닌가 의심해봅니다.


상위폴더로 이동하는 특수문자 "../"을 삽입해보았더니 경고 문구가 뜨면서 LFI 가능성을 높여줍니다.


inc 파라미터에 php파일 경로를 쓰면, php 파일 소스를 볼 수 있는게 아니라 실행이 되어버립니다.

저는 방법을 찾다가 LFI-cheat-sheet에서 PHP Wrapper 방법을 찾았습니다. 자세한 정보는 아래의 링크를 참고하세요.


>> https://highon.coffee/blog/lfi-cheat-sheet/


따라서, inc 파라미터에 php wrapper를 이용해 [php://filter/convert.base64-encode/resource=파일경로]를 삽입하면 인코딩된 문자열이 보입니다.

디코딩ㄱㄱ


BASE64 디코더 >> http://www.convertstring.com/ko/EncodeDecode/Base64Decode


해당 문자열을 디코딩 하니까 ch12.php의 소스코드가 보입니다! 해당 소스에서 config.php라는 의심스러운 php 코드를 찾았고,


다시 php wrapper를 이용해 config.php경로를 삽입하니 인코딩된 문자열이 나오구요


디코딩해보니!! 어드민 패스워드를 찾을 수 있었습니다%^^%


반응형

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

[root-me] SQL injection - string  (0) 2019.02.07
[root-me] LFI - Double Encoding  (1) 2019.01.17
root-me >> SQL injection - blind  (0) 2018.06.08
root-me>>SQL injection - numeric  (0) 2018.05.01
root-me >> Command injection  (0) 2018.04.24

+ Recent posts

반응형
반응형