적고 보니 두서 없이, 자세하지 않게 정리가 된 것 같다. 요즘은 일도 바쁘고 이것저것 벌여 놓은 일이 많아서 정돈된 글을 적기가 참 힘들다. 추후 여유가 생기면 해당 포스팅을 다시 다듬어야겠다.
/etc/init.d/rcS
스크립트가 실행된다.upnp, httpd, /sbin/dhcpd
.../var/boa_vh.conf
cgi
등은 백도어로 쓰일 수 있다.index.html
boa
웹서버 설정 내용을 보면 Alias
가 존재하기도 한다.CGI는 실행 파일
CGI
는 C
로 만든 애플리케이션이라고 생각하면 된다!CGI
개발을 잘 안 하고, Python
이나 Go
등 사용하기 쉽고 개발 생태계가 활성화 되어있는 것들을 사용한다.스크립트
도 가끔 쓰인다.CGI
를 가지고 취약점 탐색strcpy, sprintf, system, strcat, execl, getenv
CGI
를 실행하면서 어떤 함수들이 호출되는지를 쉽게 파악할 수 있는 도구들을 이용ltrace
: 라이브러리 호출 보여줌strace
: 시스템 호출 보여줌gdb
: 디버깅필요한 도구 : gdb, strace, ltrace
static
으로 빌드한 경우 바로 실행을 할 수 있다.qemu
이미지로 만들어서 돌려볼 수 있긴 한데 실제로 이렇게까지 할 필요는 없다.static
으로 빌드해서 올려놓은 것들이 종종 있다. 그걸 이용하거나 직접 빌드를 해야 한다.strace -i -f -p PID -e trace=execve
임베디드 쪽을 한다고 하면 꼭 필요한 지식
strace
, ltrace
는 없어도 되지만 gdb
없이는 동적으로 분석할 수 없다.gdbserver
를 보통 타겟에다가 넣고, gdb
는 크로스 컴파일을 한다.gdbserver
를 쓰면 네트워크나 시리얼 포트를 이용해서 데스크탑 gdb
와 연결을 해야 한다.gdbserver를 왜 쓰느냐?
gdb
를 빌드해서 올리기 어려운 환경일 수도 있다.gdb
자체가 사이즈가 꽤 크다.gdb
를 타겟용으로 빌드하는데 문제가 생길 수도 있다.buildroot
를 이용하는 것을 권장buildroot
를 이용하면 ltrace
, strace
다 쉽게 얻을 수 있다.yocto : 요즘 많이 쓰는 임베디드쪽 빌드 시스템
Makefile
은 일종의 스크립트 처럼 빌드 절차를 나열해 놓고, 미리 정의된 내용이 실행되어 결과물을 쉽게 얻을 수 있는 아주 기본적인 빌드 시스템이다.yocto
도 비슷하다.yocto
에서의 Makefile 같은 것을 레시피
라고 한다.레시피
에 나와 있는 것을 그대로 쓰면 똑같은 결과물이 나온다.yocto
에서 빌드를 하면 부트로더, 커널, 파일시스템 등을 정해진 설정대로 쉽게 만들 수 있다.장점 : 어떤 환경에서든 똑같은 결과물을 낼 수 있다!
yocto
가 나오기 전에 썼던 빌드 시스템이 Buildroot
이다.yocto
는 방대한 시스템을 전체적으로 다 빌드해주는 대신, 설정을 임의로 할 수 있는 부분이 별로 없다.buildroot
는 거대한 시스템 보다는 작은 시스템에 맞춰진 툴이다.어떤 툴들이 존재하는지 확인을 해야 함
wget, nc, scp, ftp, rz
/sbin/http
/sbin/http get http://IP/gdb > gdb
http
프로토콜을 사용해서 웹페이지나 파일을 다운로드 받을 수 있다.RAMFS
)을 사용해서 파일을 다운로드 받아서 실행할 수 있다.16MB~32MB
정도?netdetect.cgi
의 원격 bof 취약점smtp command injection
httpd
apcpd
관련 슬라이드는 해커스쿨 Home Router Hacking 자료를 참고
Key
) - 리버싱을 통해 알아낼 수 있다.strings
로 봤을 때 안 나오게 하려고 쪼개 놓은 경우도 있지만 리버싱 하면 다 나온다.system
으로 실행되게끔 해준다./etc/iconfig.cfg
remote_support=1
로 활성화cgi
호출하면서 리버싱으로 알아낸 키 값을 넣어주면 커맨드가 실행된다.관련 슬라이드는 해커스쿨 Home Router Hacking 자료를 참고
Timepro.cgi == Netdetect.cgi
심볼릭Netdetecgt.cgi
로 접근을 하면 관리자 암호 없이도 접속이 가능strcpy
를 사용해서 복사한다.strace
로 보면 SIGSEGV
가 발생해 있을 것이다.ASLR
: 메모리 주소 값 랜덤화DEP
: 스택 힙 실행 권한 제거ASLR
, DEP
가 둘 다 없는 경우 스택에 쉘코드 주입cgi
실행시 스택 덤프를 해보면, 스택에 어떤 데이터가 저장되는지 확인할 수 있다.User-Agent
값이 존재 → 여기에 값을 넣자User-Agent
User-Agent
변수에 쉘코드를 넣음