Recent posts

DEF CON 2016 Quals - feedme

feedme is a baby’s first pwnable task.

The binary is a fork-based server. There is an obvious buffer overflow vulnerability in the child process routine.

int handler()
{
	char buf[32];  // [ebp-0x2c]
	int canary;    // [ebp-0xc]

	printf("FEED ME!\n");
	int size = read_byte();
	readn(buf, size);
	// Shows up to 16 bytes. Cannot leak canary with this.
	printf("ATE %s\n", tohex(buf, size, 16));
	return size;
}

void server()
{
	while (1) {
		int pid = fork();
		if (pid == 0) {
			int n = handler();
			printf("YUM, got %d bytes!", n);
			return;
		}
		else {
			waitpid(pid, &status, 0);
			printf("child exit.\n");
		}
	}
}

So we can exploit this program by brute-forcing stack canary and doing ROP to get a shell. Classic.

Read more


PlaidCTF 2016 - quite quixotic quest writeup

Well yes, it certainly is quite quixotic. (Yes, the flag format is PCTF{} )

It’s a reversing task. We have an x86 ELF binary. I’ve just ran it firsthand.

$ ./qqq
curl: try 'curl --help' or 'curl --manual' for more information
$ ./qqq --version
curl 7.49.0-DEV (i686-pc-linux-gnu) libcurl/7.49.0-DEV
Protocols: dict file ftp gopher http imap pop3 rtsp smtp telnet tftp
Features: IPv6 Largefile UnixSockets

It seems the binary is a modified curl. Since the problem mentioned about the flag format, I naturally searched for “PCTF” string in the binary.

Read more


Building Android App Without an IDE

UPDATE 2018-03-12: “android create project” command is removed from newer sdk tools (since 25.3.0). But you still can download older sdk from these links:

where [rev] is the exact revision number such as 24, 25.2.5. Lookup the revision at this page.


To build an Android app, the recommended tool is Android Studio. But I decided to do it without Android Studio nor Eclipse. I did this, to understand how Android app works and because I prefer command line over heavy IDEs. I have to admit though, that you will need an IDE to build a serious app. In this article, I will walk through how to build a simple Android App from command line. The app will have proguard enabled, and use JNI feature.

This tutorial is tested only in Ubuntu 14.04 LTS x86_64.

Read more


성질 급한 사람을 위한 LaTeX

LaTex 입문서로는 142분 동안 익히는 LaTeX 2e 라는 좋은 한국어 문서가 있으나, 나처럼 성질 급한 사람을 위해 이 글을 쓴다.

1. 설치하기 (Mac OS X)

  1. 권장하는 방법은 MacTex를 설치하는 것이지만 MacTex는 용량이 너무 커서 오래걸리니 BasicTex를 다운받는다. 링크: http://tug.org/cgi-bin/mactex-download/BasicTeX.pkg
  2. 다운받은 pkg파일을 더블클릭하여 설치를 완료한다.

2. 설치하기 (Ubuntu)

sudo apt-get install texlive

3. 사용하기

다음 파일을 hello.tex로 저장한다.

\documentclass{article}
\begin{document}
hello
\end{document}

다음을 실행한다.

pdflatex hello.tex

그려면 hello.pdf가 생성된다.


Holyshield 2016 - Holy Cat writeup

Go가 핫하긴 한가보다. Holy Cat (Reversing, 250)은 이번 Holyshield 2016에 출제된 윈도우용 Go 바이너리 리버싱 문제다. exe파일과 서버 IP를 줬는데, 아마 이 exe파일이 어떤 웹서버인 듯 하다.

1. 일단 실행

일단 윈도우 VM에서 프로그램을 실행해보니, 방화벽 경고가 떴다. 역시 네트워크로 뭔가를 하나보다. netstat으로 확인해 보니 0.0.0.0:9999 LISTEN이 있었다. 브라우저로 localhost:9999에 접속해 보니 404 not found가 나왔다. 이제 코드를 볼 차례다.

제일 먼저 프로그램 내에 있는 string 중에서 /로 시작하는 것들을 찾았다. /login, /login_check, /debug_server_status 세 개가 있었다. 브라우저로 들어가 보니 /login 페이지에는 패스워드 입력창 하나가, /login_check에는 “Access Denied” 메시지, /debug_server_status에는 이런 메시지가 나왔다.

--------------DEBUG INFO--------------
GET
127.0.0.1:49175
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36
1488
1453030681
blukat-PC

세 번째 줄은 브라우저의 IP와 포트인 것 같고 (이 경우엔 IPv6 loopback 주소인 ::1), 그 다음 브라우저의 User-Agent, 알수없는 1488, 현재 타임스탬프, 그리고 컴퓨터 이름이 나왔다. 1488은 이리 저리 생각하다가 작업관리자를 켜서 holycat.exe의 PID라는 것을 알아냈다. 이 값들을 조합하면 맞는 비밀번호가 되는 식인 것 같다.

Read more