본문 바로가기

Wargame123

LOB - 01 gremlin - (3)마무리 # core 파일 생성ulimit -c unlimited # 쉘코드\x31\xc0\x50\xba\x2e\x2e\x72\x67\x81\xc2\x01\x01\x01\x01\x52\xb9\x2e\x62\x69\x6e\x83\xc1\x01\x51\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'LOB - 01 gremlin - (1)스택 구조 파악' 글에 이어 작성하려고 한다.먼저 실행 파일이 gate가 아닌 gremlin의 권한으로 되어 있기 때문에분석을 위해 tmp 디렉토리를 만들고 실행파일을 복사한다. 'LOB - 01 gremlin - (1)스택 구조 파악' 에서는 A로 260개를 채웠지만,이번에는 뒤쪽에 쉘코드를 넣은 뒤, 앞을 \x90으로 채우고 eip 자리를 A.. 2019. 2. 1.
LOB - 01 gremlin - (2.2)쉘코드 수정 이번에 작성할 코드도 'LOB - 01 gremlin - (2.1)쉘코드 작성'과 동일하게 execve('/bin/sh') 이다. 이번에는 data 영역 대신 call 명령어를 이용할 것이다. 설명에 앞서 작성한 코드는 아래와 같다. 이번에는 call 명령어를 이용한다.call은 call하는 주소로 점프하기 전에 call 아래에 있는 명령어의 주소를 스택에 push한다. 따라서 위의 코드의 경우 "/bin/sh" 스트링이 담긴 주소가 스택에 push된다.그리고 main에서 pop을 하면 ebx에 "/bin/sh"의 주소가 담기게 된다.eax, ecx, edx와 관련된 부분은 이전과 동일하다. # objdump 이용 for i in $(objdump -d shell | grep "^ " | cut -f 2.. 2019. 2. 1.
LOB - 01 gremlin - (2.1)쉘코드 작성 vi shell.s # sudo apt-get install nasm nasm -f elf32 shell.s ld -m elf_i386 -o shell shell.o 지금 작성할 코드는 execve(’/bin/sh’)이다.시스템콜의 호출을 위해 int 80을 수행한다. 이 때, linux syscall table을 참고하여 systemcall 번호는 eax에 나머지 인자들은 각각 해당하는 레지스터에 값을 넣어주어야 한다.sys_execve는 11번이므로 eax에 0xb를 넣게 된다. 그리고 execve()의 man page와 table을 참고하여 인자를 넣어준다. ’/bin/sh’ 문자열은 .data 영역에 저장한 뒤 ebx에 넣어주었다. eax는 xor의 결과로 0이 들어 있다.ecx와 edx의 경우 .. 2019. 2. 1.
LOB - 01 gremlin - (1)스택 구조 파악 [simple BOF]먼저 gremlin.c의 코드를 보면 다음과 같다. buffer의 크기가 256인데 strcpy()를 사용하기 때문에 buffer overflow를 발생시킨다. 참고) 이 때 stack 상태는 다음과 같다. 따라서 buffer에 strcpy()하는 것을 이용하여 ret 부분을 덮으면 된다. buffer ~ ret 직전까지 260바이트가 존재하는 것으로 보이지만 실제 size를 알아볼 필요가 있다. 실제로 buffer와 ret가 떨어진 바이트 수를 계산할 때는 (main 진입 직전의 esp) - (strcpy 호출 직전의 esp에 저장된 값) 을 이용한다.main 진입 직전의 esp: push ebp를 하기 이전의 상태로 스택에 ret까지 쌓인 상태 strcpy 호출 직전의 esp에 .. 2019. 2. 1.
webhacking.kr 57번 Webhacking.kr#57[Time-Based SQL Injection] 57번 문제를 열면 아래와 같은 화면을 볼 수 있다. 소스코드를 보면, 필터링 되는 문자열 또한 알 수 있다. 이 때 필터링 대상을 보면 흔히 나타나지 않았던 benchmark가 존재하는 것을 볼 수 있다. Mysql manual 페이지를 보면 benchmark는 expression이나 function의 속도를 측정할 때 이용한다는 것을 알 수 있다. Benchmark는 필터링 되어 사용할 수 없지만, 여기서 Time-Based SQL Injection이 가능하겠다는 추측을 할 수 있다. 출처: https://dev.mysql.com/doc/refman/5.5/en/select-benchmarking.html 예를 들면, pw의.. 2019. 2. 1.
webhacking.kr 55번 Webhacking.kr#55 55번 문제를 열면 아래와 같은 화면을 볼 수 있다. 아래는 rank를 눌렀을 때 볼 수 있는 랭킹 페이지이다. 이 때 score를 누르면?score=2147483647로 요청하기 때문에 뒤에 or 1=1을 붙여보면 아래와 같이id : localhost // 0이 출력된다. 이 때or 1 = 0을 수행하면 아래와 같이 gurwodla // 2147483647 가 출력된다.이를 이용하면 blind sql injection이 가능할 것으로 보인다. 먼저 컬럼의 정보를 알기 위해 procedure analyse()를 하면 아래와 같이 db, 테이블, 컬럼 정보를 얻을 수 있다. 힌트를 보면 password는 3번째이므로 limit을 이용하여 보면 아래와 같이 패스워드의 실제 컬럼.. 2019. 2. 1.
webhacking.kr 45번 [SQL Injection] 45번 문제를 보면 아래와 같은 화면을 볼 수 있다. 아래 코드는 index.phps이다. solve()를 위해서는 쿼리문의 결과가 admin이어야한다.필터링 되는 문자들을 보면 id에서 or과 =을 사용할 수 있기 때문에where id=’’ or id=’admin’ # and pw=md5(‘$_GET[pw]’)과 같은 방식으로 우회할 수 있을 듯하다. admin이라는 문자열은 입력할 수 없기 때문에char(97,100,109,105,110)를 이용하면 된다. ‘를 입력하는 방법에 대해서도 생각해 봐야 하는데,위 코드에서 mb_convert_encoding을 이용하기 때문에 이 취약점을 이용하면 된다. 우선 mb_convert_encoding의 manual을 보면 아래와 같이.. 2019. 2. 1.
webhacking.kr 44번 [Command Injection] 44번 문제를 보면 아래와 같은 화면을 볼 수 있다. 먼저 a를 입력해보면 hello a 가 출력되는 것을 볼 수 있다. 다른 문자열들을 입력해도hello [입력된 문자열]이 출력된다. 이 것을 보면 echo를 이용한 것이 아닌가 하는 추측을 할 수 있다.따라서 ;ls를 입력해보면 아래와 같이 아무 것도 출력되지 않는 것을 볼 수 있다. 아마 Command Injection을 막기 위해 ;나 ls 등에 필터링이 적용되어 있는 듯하다.따라서 ‘’를 이용하여 입력하니 아래와 같이 ls가 입력된 것을 볼 수 있다. 이에 ;을 넣어주기 위해 ‘;l’s로 입력하니 결과를 얻을 수 없어&를 이용하여 ‘&l’s와 같이 입력하였다. ls의 결과를 얻을 수 있었고, 위의 페이지로 이동.. 2019. 2. 1.
webhacking.kr 40번 [Blind SQL Injection] 40번 문제를 열면 아래와 같은 화면을 볼 수 있다. 이 때 no가 1일 때 guest인 것으로 추정된다.따라서 no가 2일 때로 요청해볼 것이다. 원래 guest로 로그인할 경우no=1&id=guest&pw=guest가 된다. 이를 약간 변형하여no=0||no=2&id=guest&pw=guest를 수행할 것이다. 참고로 no=1인 경우 guest에 해당하기 때문에(no=2를 시도하는 이유는 guest가 아닌 유저에 관한 정보를 얻기 위함이다.)no=1||no=2가 아닌 0으로 한 것이다. 0이 실제로 다른 id에 할당된 값인지 먼저 확인하였다. Failure가 출력되는 것을 보면 사용해도 될 것으로 보인다. 그리고 no=2인 경우 admin password를 입력.. 2019. 2. 1.