linux version information

MEMO 2016. 7. 24. 21:24

2.6.x 버전은 어떻게 되는데

2.4.ㅌ 버전은 귀찮네... 참나~~~


(참조)

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EC%BB%A4%EB%84%90


리눅스 커널

위키백과, 우리 모두의 백과사전.



'MEMO' 카테고리의 다른 글

맥에서 안드로이드 usb 테더링 할 때  (0) 2018.12.09
ubuntu KVM 가상화 설치  (0) 2016.07.25
arm, mips 2.6에 gcc 설치하기  (0) 2016.07.24
strace 4.12 arm cross compile min version 2.6.32  (0) 2016.07.19
FATAL: kernel too old 문제  (0) 2016.07.19
Posted by goldpapa
,

arm 이나 mips테스트 할 때 가까 가용하는 qemu 이미지 사이트

3.2 는 apt-get 이 되는데 2.6은 apt-get 이 되지 않는다

메인 사이트가 더이상 서비스 되지 않기 때문이다.


$ sudo apt-get install build-essential


그래서 gcc를 설치하려면 위 명령어 한개만 치면 되는데

여러개 막 설치해 주어야 하고 귀찮은 일들이 많이 일어난다

이때 아카이빙을 source.lists에 넣으면 apt-get 을 사용할 수 있게 된다.

 

(참고)

데비안 아카이빙 사이트

http://archive.debian.org/debian-archive/


(참고)

qemu download

All images are 25GiB images in QCOW2 format on which a Debian Squeeze or Wheezy system has been installed. The standard images correspond to a "Standard system" installation, while the desktop images correspond to a "Standard system" + "Desktop environment" with Gnome, KDE and Xfce environments. On Wheezy the original default desktop environment is Gnome and the default display manager is GDM. These can not work in QEMU, as Gnome needs an accelerated graphics card, which is not provided by QEMU. Moreover both Gnome and GDM need more than the default 128MiB memory provided on QEMU. They have therefore been replaced respectively by Xfce and LightDM on the Wheezy desktop image. Both Gnome and GDM are still installed on the image, and the original default can be restored using the following commands: - update-alternatives --auto x-session-manager - echo /usr/sbin/gdm3 > /etc/X11/default-display-manager The other installation options are the following: - Keyboard: US - Locale: en_US - Mirror: ftp.debian.org - Hostname: debian-armel - Root password: root - User account: user - User password: user To use these images, you need to install QEMU 1.1.0 (or later). Start QEMU with the following arguments: - qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile -hda debian_squeeze_armel_standard.qcow2 -append "root=/dev/sda1" - qemu-system-arm -M versatilepb -kernel vmlinuz-2.6.32-5-versatile -initrd initrd.img-2.6.32-5-versatile -hda debian_squeeze_armel_desktop.qcow2 -append "root=/dev/sda1" - qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.img-3.2.0-4-versatile -hda debian_wheezy_armel_standard.qcow2 -append "root=/dev/sda1" - qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.img-3.2.0-4-versatile -hda debian_wheezy_armel_desktop.qcow2 -append "root=/dev/sda1" By default QEMU emulates a machine with 128MiB of RAM. The -m option increases or decreases the size of the RAM. It is however limited to 256MiB. If you don't want to start QEMU in graphic mode, you can use the -nographic option. The image is configured to display a login prompt on the first serial port (ttyAMA0). If you want to switch the boot messages to the serial port, you need to add "console=ttyAMA0" after "root=/dev

(참고)

https://people.debian.org/~aurel32/qemu/armel/


'MEMO' 카테고리의 다른 글

ubuntu KVM 가상화 설치  (0) 2016.07.25
linux version information  (0) 2016.07.24
strace 4.12 arm cross compile min version 2.6.32  (0) 2016.07.19
FATAL: kernel too old 문제  (0) 2016.07.19
arm gdb cross-comile  (0) 2016.06.27
Posted by goldpapa
,

크로스 컴파일 환경을 구축한다 (인터넷 참조)


Next we'll build the strace itself:


1. 최신 소스 다운로드 https://sourceforge.net/projects/strace

2. 적당히 압축을 푼다

3. cd ./strace-4.12

4. Set the necessary global variables 

export export CC=arm-linux-gnueabi-gcc

(Replace with path to your cross compiler)

5. ./configure --host=arm-linux-gnueabi --prefix='/home/w00t/strace' 

6. make 


w00t@ubuntu64svr14:~/strace-4.12$ ls strace

strace


w00t@ubuntu64svr14:~/strace-4.12$ file strace

strace: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=91104ca9b9d0ba127993601d3a9cea104b72269d, not stripped




'MEMO' 카테고리의 다른 글

linux version information  (0) 2016.07.24
arm, mips 2.6에 gcc 설치하기  (0) 2016.07.24
FATAL: kernel too old 문제  (0) 2016.07.19
arm gdb cross-comile  (0) 2016.06.27
strace 바이너리 모음  (0) 2016.06.25
Posted by goldpapa
,

FATAL: kernel too old 문제

MEMO 2016. 7. 19. 22:43

요거 해보고 되면 올리자


핵심은 문의한 분이 올린 맨 마지막 줄...


Thank you to the above poster ecatmur -- it does indeed work to reconfigure/rebuild glibc with the configure option --enable-kernel=version

I would add the following -- you can use gcc -static -L/path/to/local/lib (big L option to the directory) and it seems to work just as well as linking to the library file itself. When I linked in the latter fashion (to /path/to/local/lib/libc.a), it created an unecessarily large executable.


[참조]

http://stackoverflow.com/questions/11206243/how-to-build-a-static-binary-for-gnu-linux-installations-with-old-kernel

'MEMO' 카테고리의 다른 글

arm, mips 2.6에 gcc 설치하기  (0) 2016.07.24
strace 4.12 arm cross compile min version 2.6.32  (0) 2016.07.19
arm gdb cross-comile  (0) 2016.06.27
strace 바이너리 모음  (0) 2016.06.25
ARM gdb-peda 설치  (0) 2016.04.01
Posted by goldpapa
,

arm gdb cross-comile

MEMO 2016. 6. 27. 21:56

가끔 필요한테 찾으려면 취찮아지는 것


Install Arm cross-compiler (14-04, 16-04)


sudo apt-get install emdebian-archive-keyring

sudo apt-get install libc6-armel-cross libc6-dev-armel-cross

sudo apt-get install binutils-arm-linux-gnueabi

sudo apt-get install gcc-arm-linux-gnueabi

sudo apt-get install g++-arm-linux-gnueabi

sudo apt-get install u-boot-tools

sudo apt-get install libncurses5-dev


출처) http://noplanlife.com/?p=1293



At first we need to build the termcap library:

1. wget ftp://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz

2. tar xvzf termcap-1.3.1.tar.gz

3. cd ./termcap-1.3.1

4. export CC=arm-linux-gnueabi-gcc

5. ./configure --host=arm-linux-gnueabi --prefix=/home/w00t/termcap

6. make

7. make install (불필요)


Next we'll build the gdb itself:

1. wget http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.gz

2. tar xvzf gdb-7.10.tar.gz

3. cd ./gdb-7.10

4. Set the necessary global variables 

export export CC=arm-linux-gnueabi-gcc

(Replace with path to your cross compiler)


export LDFLAGS="-static -L/home/w00t/termcap/lib"

Replace the path to your TermCap library


export CFLAGS="-g -O2 -I/home/w00t/termcap/include"

Replace the path to your TermCap library


5. ./configure --host=arm-linux-gnueabi --prefix='/home/w00t/gdb' --disable-werror

6. make 

7. make install (불필요)


출처) http://tigertop.blogspot.kr/2011/03/building-gdb-72-for-arm-architecture-on.html


ubuntu64svr14:~/gdb-7.10$ file ./gdb/gdbserver/gdbserver

./gdb/gdbserver/gdbserver: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=d0e0fb8a014279d9029472ca2523739925ac9d6d, not stripped

gdbserver7.10


ubuntu64svr14:~/gdb-7.10$ file ./gdb/gdb

./gdb/gdb: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=5ee712c726e880631e060d899e88c93fd8661c82, not stripped


'MEMO' 카테고리의 다른 글

strace 4.12 arm cross compile min version 2.6.32  (0) 2016.07.19
FATAL: kernel too old 문제  (0) 2016.07.19
strace 바이너리 모음  (0) 2016.06.25
ARM gdb-peda 설치  (0) 2016.04.01
ROPgadget Tool  (0) 2016.03.31
Posted by goldpapa
,

[pwnable.kr]elf-99pt

2016. 6. 25. 23:04

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

strace 바이너리 모음

MEMO 2016. 6. 25. 22:36

strace 가 좋아서 자주 사용하는 데

컴파일하는 것이 좀 그지 같다.

그래서 암이 필요할 때


https://github.com/andrew-d/static-binaries


여기에서 받았는데 

잘 안될 때가 있다


그래서


https://landley.net/aboriginal/downloads/old/binaries/


여기에서 받으면 잘 될때가 있는데 문제는

여기 링크를 자꾸 까먹는다.


그리고 없어질 수도 있고 그래서...

strace 만 몇개 가져왔음


strace_landley.net.zip

근데 우끼게 시리 7z 은 링크 안거리고 zip만 걸리네... 참나...

'MEMO' 카테고리의 다른 글

FATAL: kernel too old 문제  (0) 2016.07.19
arm gdb cross-comile  (0) 2016.06.27
ARM gdb-peda 설치  (0) 2016.04.01
ROPgadget Tool  (0) 2016.03.31
hping3  (0) 2016.03.26
Posted by goldpapa
,


첫번째 관문

문제가 어떻게 구성되어 있는지 분석하는데 1~2시간 정도 걸린다. 왜 로그인이 안되는지 어떻게 파일을 설정해야 로그인이 되는지 확인함. 여기에서는 strace 가 요긴하게 쓰임

두번째 관문

로그인을 해야 하는데 어떻게 하는지 모르겠음. 구성을 다 하고 계정의 유무에 따라서 0,1 리텃하는 값이 달랐음 그래서 admin을 입력해 보니 admin 계정이 있었음

세번째 관문

어드민 계정의 패스워드를 맞추어야 함. 브포를 해 보려고 했으나 패스워드가 8자리가 되어서 브포가 어려움 그리고 내 계정은 23초마다 리셋됨. 그러다 보니 패스워드가 크면 1, 작으면 -1을 리턴한다는 것을 알게됨, 그래서 패스워드를 맞출 수 있겠구나 함. 로컬에서 해보니 200번 정도면 맞춤. 알고리즘없이 순차적으로 계속 대입하는 문제임. 문제는 세션이 다시 시작되면 패스워드가 다시 리셋됨. 패스워드는 랜덤 영소문자대문자숫자 8자리임. 그러나 서버에서는 40번정도 하면 자름. 나중에 보니까 23초 되면 자르는 거 였음. 여기까지가 첫날임. 그래도 또 못푸는 구나 하고 자첵하다가 잠.

네번째 관문

아침에 일어나서 바이러니 서치 를 추가함. 그리고 recvuntil 이 불필요하다는 것을 알게됨 recv는 필요한 경우 한번에 몰아서 해주면 되고 시간을 줄이기 위하여 필요한 것을 모두 보내고 recv는 한번만 함. 참고로 로직을 바꾸었는데 35번에서 자꾸만 잘림 중요한 것은 36~40번 사이에 답을 찾음. 한참을 고민하다가 불필요한 recv문장을 다 빼버림. 그랬더니. 40번 정도 돌아감. 참고로 버그가 있는데 패스워드가 0이나 z가 들어 있으면 못찾음. ㅋㅋㅋ. 이런 결과로 5번 돌리면 2번 정도는 답을 찾음.

다섯번째 관문

여기까지 오면 로그인이 된다고 가정하고 릭과 ret를 변경할 수 있는 부분을 계속해서 찾음. 대상프로그램이 다소 코드가 많아서 내가 풀 수 있겠다고 생각함. 결과는 풀었음. 릭은 못참음. 그러나 프로그램을 분석하다가 패스워드가 길어지면 다시 받아야 하는데 이상하게 사용자를 입력한다는 것을 알게됨. 패스워드는 원래 9자리 이하로 입력하게 되어 있는데 256자가 입력되어도 그냥 방치함 - 올케

여섯번째 관문

여기서는 분석보다는 패스워드 길이를 변경하면 프로그램이 eip가 AAAA 되는 것을 찾음 패스워드가 66자를 입력하면 그 뒤가 eip가 된다는 것을 알게됨. 또한 그 다음은 stack 에 올라감 - 올케2

일곱번째 관문

rop는 할 수 없음, stack 인데 이상하게 컴파일해놔서 친숙하지 않음. 그러다가 cd 80이 들어가 함수를 보게되는 여기서 read, open, write, mprotect 시스템 콜을 발견함.

여덟번째 관문

여기서 부터는 그냥 rop함 여거 저거 해보다가 bss 에 쉘코드를 write 하고 mprotect 함수를 이용하여 실행권한을 부여함. 그리고 그리로. 점프함 - 끝

첨부:1 , 반 브포, admin 함수를 바이너리 서치로 구함

첨부:2, 파일명을 쓰고 오픈하고 읽고 출력하는 방법으로 flag를 구함

첨부:3, sh 코드를 bss 에 복사하고 실행권한을 부여함, 쉘코드는 ./etc/passwd 를 읽는 쉘코드를 조금 수정해서 현재 디렉토리의 flag를 읽도록 변경함 - 로컬에서는 100% 실해되며, 서버에서는 3번 트라이 끝에 답을 구함

 a1.py

 a2.py

 a3.py


Posted by goldpapa
,

* 요약

https://tssurya.wordpress.com/2014/08/19/adding-a-hello-world-system-call-to-linux-kernel-3-16-0/에 저장된 Adding a Hello World System Call to Linux kernel 3.16.0 내용을 마음대로 해석해서 pwnable.kr 의 sys_upper()를 등록함


* 결론

커널 컴파일시에 주소를 잘 설정해야 한다. 만약 시스템콜주소를 잘못 설정하면 어떠한 일이 발생하느냐? 본인의 경우는 잘못설정해서 꾸웩 하고 시스템이 죽었다.

만약, 컴파일을 다시 한다면 https://memset.wordpress.com/2011/01/20/syscall-hijacking-dynamically-obtain-syscall-table-address-kernel-2-6-x/ 에 나오는 내용을 참조하여

w00t@ubuntu32svr:~$ grep sys_call_table /boot/System.map-$(uname -r) |awk '{print $1}'

c1691100

시스템 콜 테이블 주소를 c1691100으로 다시 컴파일 한다. 으~~~ 2시간을 기다려야 한다. 우선 오늘은 패쑤~~~


계정은 sudo su 명령어로 루트의 권한으로 실행함 아무래도 커널 작업이다 보니 루트로 작업하는 것이 편리함


* 커널 소스 다운로드

https://www.kernel.org/ 여기에서 다운로드. uname -a 해보니 3.16커널 이었음 그래서 아래만 올려져 있는 커널 소스로 다운로드함

 wget  https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.16.35.tar.xz


* 커널 소스 압축 해제

압축해제는 /usr/src/ 디렉토리에 함. 다운로드한 폴더에 가서 다음 명령어를 이용하여 압축을 해제함

 sudo tar -xvf linux-3.16.35.tar.xz -C/usr/src/

sudo 는 루트권한으로 실행하라는 명령어. 귀찮으면 sudo su 하고 그냥 작업하면 됨. 다음 작업을 위하여 디렉토리를 이동함

 cd /usr/src/linux-3.16.35 


* 시스템 콜 sys_upper() 정의

커널소스 디렉토에서 upper 디렉토리를 생성하고 디렉토리를 변경함

 mkdir upper ; cd upper


1. "upper.c" 파일을 만든다.

중요한 것이 있다. 각자 환경에 맞도록 SYS_CALL_TABLE의 주소를 수정해야 한다. 만약 수정하지 않으면, 본인의 경우처럼 커널이 사망할 수 있다. 꿱!!!!

root@ubuntu32svr:/usr/src/linux-3.16.35/upper# cat upper.c

// adding a new system call : sys_upper

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/slab.h>

#include <linux/vmalloc.h>

#include <linux/mm.h>

#include <asm/unistd.h>

#include <asm/page.h>

#include <linux/syscalls.h>


#define SYS_CALL_TABLE 0x8000e348 // manually configure this address!!

#define NR_SYS_UNUSED 223


//Pointers to re-mapped writable pages

unsigned int** sct;


asmlinkage long sys_upper(char *in, char* out){

int len = strlen(in);

int i;

for(i=0; i<len; i++){

if(in[i]>=0x61 && in[i]<=0x7a){

out[i] = in[i] - 0x20;

}

else{

out[i] = in[i];

}

}

return 0;

}

static int __init initmodule(void ){

sct = (unsigned int**)SYS_CALL_TABLE;

sct[NR_SYS_UNUSED] = sys_upper;

printk("sys_upper(number : 223) is added\n");

return 0;

}

static void __exit exitmodule(void ){

return;

}

module_init( initmodule );

module_exit( exitmodule ); 


2. "Makefile"을 만든다.

root@ubuntu32svr:/usr/src/linux-3.16.35/upper# cat Makefile 

obj-y := upper.o


* upper 디렉토리를 커널 Makefile에 추가

변경 전

 core-y          += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ 

변경 후 

 core-y          += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ upper/

여기까지의 과정은 컴파일러에게 upper 디렉토리에 새로운 시스템콜 sys_upper()이 있다는 것을 알려주는 과정이다.


* 새로운 시스템 콜( sys_upper() )을  시스템 콜 테이블(syscall_32.tbl 파일)에 추가

 64비트를 사용하는 경우는 syscall_64.tbl파일을 변경해야 한다.

 cd arch/x86/syscalls

 vi syscall_32.tbl 

223번 라인을 찾아서 변경한다.

 223    i386    upper    sys_upper

223번은 시스템콜의 번호임. 맨 마지막에 추가하는 경우는 맨 마지막 번호에 1을 더해서 사용해야 한다. 이 번호는 나중에 사용자 프로그램에서 사용된다.


* 새로운 시스템 콜( sys_upper() )을 시스템 콜 헤더 파일에 추가

 cd include/linux/

 vi syscalls.h 

맨 아래쪽에 있는 #endof 앞에 다음 라인을 추가한다.

 asmlinkage long sys_upper(char *in, char* out);


* 커널 컴파일에 필요한 주요 파일을 설치

gcc 최신버전, ncurses dev 패키지, 시스템 패키지

 sudo apt-get install libncurses5-dev


* 커널 컴파일

필요한 환경 구성 후 환경파일(.config) 저장

 sudo make menuconfig

만약 기존 컴파일 환경파일 (.config) 이 있는 경우

 sudo make oldconfig 

커널 컴파일

 cd /usr/src/linux-3.16.35 

 make

시스템 환경에 따라서 수시간이 걸림. PC가 좋은 환경이고 virtualbox 에서 컴파일 하는 경우는 본인의 환경에서는 1시간 40분 정도 걸렸다, 일반적으로는 2~3시간 걸린다고 한다.


* 커널 설치 및 업데이트

수정된 커널을 반영하기 위하여 다음의 명령을 실행한다.

 sudo make modules_install install 

커널 설치 명령을 입력하면 모듈이 마구 마구 설치된다. 이것도 수분이 걸린다. 설치 후에 리부팅한다.

 sudo shutdown -r now

 uname -r


* 허거덕 커널 패닉으로 사망

 


* 시스템 콜 테스트

아래 소스를 수정해서 컴파일 후 실행한다.

#include <stdio.h>

#include <linux/kernel.h>

#include <sys/syscall.h>

#include <unistd.h>

int main()

{

         long int amma = syscall(354);

         printf(“System call sys_hello returned %ld\n”, amma);

         return 0;

}

dmesg 명령어로 시스템콜이 호출된 것을 확인한다.

  dmesg

 - 실행결과 -


'module' 카테고리의 다른 글

리눅스 모듈 따로 컴파일 1 - 따라하기  (0) 2016.05.15
Posted by goldpapa
,

리눅스 모듈 따로 컴파일 - 따라하기

(인터넷을 보고 따라해 봄)

환경

w00t@ubuntu32svr:~/module/hello-1$ uname -a

Linux ubuntu32svr 3.16.35 #1 SMP Tue May 3 14:21:22 KST 2016 i686 i686 i686 GNU/Linux


우분투 모듈 컴파일 환경 구축

인터넷 참조 


소스코드

- init_hello 함수는 모듈이 시스템에 로드될때 동작
- exit_hello 함수는 모듈이 시스템에서 제거될때 동작

- printk() : dmesg 명령어로 확인 가능

w00t@ubuntu32svr:~/module/hello-1$ cat hello-1.c

#include <linux/module.h>

#include <linux/kernel.h>

int init_module(void) {

    printk(KERN_INFO "Hello, World 1\n");

    return 0;

}

void cleanup_module(void) {

    printk(KERN_INFO "Good bye world 1.\n");

}


Makefile (인터넷 참조)

- make -C 앞에 탭이 중요함

w00t@ubuntu32svr:~/module/hello-1$ cat Makefile

obj-m += hello-1.o

all:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD)  modules

clean:

make -C /lib/modules/$(shell uname -r)/build M=$(PWD)  clean


모듈 등록 및 삭제

 sudo ismod hello-1.ko

 sudo rmmod hello-1.ko


결과 확인 : 명령어 (dmesg)

[125734.809084] Hello, World 1

[125813.587657] Good bye world 1.

[125834.278316] Hello, World 1


참조

1. http://funnyksoo.blogspot.kr/2014/11/linux-kernel-module-programing-1.html

'module' 카테고리의 다른 글

리눅스 커널 3.16에 sys_upper() 등록하기  (1) 2016.05.16
Posted by goldpapa
,