Page tree
Skip to end of metadata
Go to start of metadata


Date: 2017. 11. 25(토). 8:00 ~ 2017. 11. 27(월). 8:00

Site: https://tuctf.asciioverflow.com/

Final Rank: 320, Score: 426 
Pwn: 2, LuciferVM: 1, Web: 3, Reversing: 2, Misc: 1 


문제풀이

MISC

| Misc - I’m playing

  • TUCTF{I’m_Mr_m33seek5_G1V3_M3_th3_fl4g!}

@NoMoreAcl, Welcome to TUCTF! Please read the rules before posting!
If you have a question about a challenge, please use @Challenge: ChallengeName to automatically tag the challenge creator!

And finally, here's your "I'm playing" flag: TUCTF{I’m_Mr_m33seek5_G1V3_M3_th3_fl4g!}

Thank you for playing TUCTF!




WEB

| Web - High Source 25

  • Welcome! Here's the flag: TUCTF{H1gh_S0urc3_3qu4ls_L0ng_F4ll}

  1. highsource.tuctf.com 소스보기

<html>

<head>

<!-- Hi there. Nice to see you in my source.

    But you won't find anything in here ;)   -->

<script type="text/javascript" src="scripts/login.js"></script>

</head>

<body>

<img src="images/high_source.jpg" width=50%/><br/><br/>

<p>You think you can get through my super awesome authentication script, but you can't because I'm a master programmer. ;)</p>

<input name="login" type="button" onclick="showLogin();" value="Login"/>

</body>

</html>

  1. showLogin() 함수 호출이 있는 login.js 내용 살펴봄


// Super secret password for private eyes
// If you're seeing this, plz look away :(
var password = "I4m4M4st3rC0d3rH4x0rsB3w43";

// Super Secure Login Function
function showLogin()
{

var input = prompt("Enter Password", "");

if (input == password)
{

var flagdir = "";
// Many subdirectories for the lulz ;)
for (var i = 0; i < 100; i++)
{

flagdir += "flagdir/";

}
document.write("Welcome! Here's the flag: ");
fetch(flagdir + "flag")
.then(response => response.text())
.then(text => document.write(text));

}
else
{

document.write("<img src=\"images/wrong.gif\" width=50%/>");

}

}

  1. password 변수값 I4m4M4st3rC0d3rH4x0rsB3w43





| Web - Git Gud

Key : TUCTF{D0nt_M4k3_G1t_Publ1c}

문제 내용

Git Gud

1 00

Jimmy has begun learning about Version Control Systems and decided it was a good time to put it into use for his person website. Show him how to Git Gud.

http://gitgud.tuctf.com


문제풀이

  1. Git 이란 문구가 있네? http://gitgud.tuctf.com/.git/ 직접 접근해보다

  2. 블로그 운영자가 git 에 감동 받았다는 걸 보니, 형상 복구 겠네 .

  3. .git 디렉토리 전체를 내려받자. 툴 쓰기 귀찮으니, wget 을 이용해서 쭉 내려 받아버리자


  1. 형상 관리 이력 살펴보자  ( http://gitgud.tuctf.com/.git/logs/HEAD )


  • flag 추가하고 삭제했다는 내용 친절하게 적혀 있네

e. 삭제 이전 시점으로 복구 시켜보자

root@kali:~/git/gitgud.tuctf.com# ls

about.html  blog.html contact.html  gitgud.gif icons index.html

root@kali:~/git/gitgud.tuctf.com# git reflog | grep flag

08cd273 HEAD@{27}: commit: Removed flag

22f63ce HEAD@{40}: commit: Added flag

4fa0acb HEAD@{45}: commit: Added flag

root@kali:~/git/gitgud.tuctf.com#

root@kali:~/git/gitgud.tuctf.com# git reset --hard 4fa0acb

HEAD is now at 4fa0acb Added flag

root@kali:~/git/gitgud.tuctf.com# ls

about.html  blog.html contact.html  flag gitgud.gif icons index.html  README.md

root@kali:~/git/gitgud.tuctf.com# cat flag

TUCTF{D0nt_M4k3_G1t_Publ1c}

root@kali:~/git/gitgud.tuctf.com#




| Web - Cookie Duty 25

  • flag: TUCTF{D0nt_Sk1p_C00k13_Duty}

  1. 최초 화면에서 Name 인풋을 받는 폼이 하나 있다.

  2. 어떠한 이름을 넣어도 아래와 같이

  3. 쿠키 값을 확인해보면 not_admin 플래그가 있는 것을 확인 할 수 있다. 해당 값을 단순히 0으로 변경하면  쉽게 풀린다.



LuciferVM

| Gateway

  1. crypto_LUKS 암호화 된 파티션과, 암호화 되지 않은 ext4 파티션이 존재함

  2. 암호화 되지 않은 ext4 파티션 ( /dev/sda1 ) 에  usefultool.exe 존재함

  3. 확장자가 exe 지만, ELF 임

  4. 돌려보자, ROT13 치환 툴이다

  5. 마지막 줄에 There are no secrets contained within this tool. 라는 구문이 존재해서, 단순히 ROT13 툴로만 취급했다.

  6. 암호화 되지 않은 ext4 파티션에, 힌트가 전혀 없다. 몇시간 눈물흘리다. 설마… usefultool.exe ?!

  7. usefultool.exe strings 살펴봤더니


  1. GHPGS{JrypbzrOnpx,Unpxrezna}  

  2. 해당 값을 ROT 13 치환해봤더니...

    TUCTF{WelcomeBack,Hackerman}

    LUKS 키는 WelcomeBack,Hackerman


Reverse Engineering

| RE - Funmail 25

  • 최초 파일 확인 시 아래와 같이 ELF파일로 확인이 되었으며, 추가적으로 파일에 대한 문자열 조회 시 “printFlag”라는 문자열이 확인 됨. +_+

  • IDA로 해당 파일을 열고 “printFlag” 함수를 볼 경우, strcpy 이후 디코드 루틴이 보여진다.



  • 위에서 보여진 디코드 루틴을 Python으로 작성하여 풀면 아래와 같이 Flag 값이 나온다.

  • Flag is “TUCTF{d0n7_h4rdc0d3_p455w0rd5}



| RE - Funmail2.0 50

  • Funmail2.0도 이전 1버전과 동일하다. flags 문자열만 달라짐.

  • Flag is “TUCTF{l0c4l_<_r3m073_3x3cu710n}




















Pwn

| Pwn - vuln chat 2.0 100

  • 최초 파일  확인 시 아래와 같이 ELF로 확인이 되며, 문자열 조회에서 “printFlag”라는 값이 확인 됨.

  • “printFlag”함수는 아래와 같이 system함수를 이용하여 flag.txt의 내용을 출력해주는 녀석으로 확인이 된다.

  • “printfFlag” 함수를 호출하는 부분은 없으므로, 메인 함수에서 분석을 진행한다.

  • main -> doThings 진입 시 아래와 같이 입력값을 받는 부분이 확인된다.

  • 위에서 할당된 buf의 크기는 39 이지만, read에서는 45크기의 버퍼를 읽게된다. 여기서 취약점이 존재하는것으로 판단 됨.


  • 범준씨가 공유해준 코드를 수정하여 진행해본 결과 아래와 같이 Flag값을 정상적으로 받음.(나...taeho인데…..)

  • Flag is “TUCTF{0n3_by73_15_4ll_y0u_n33d}




  • No labels