gdb로 디버깅 하니 이상한 문자가

Reper의 이미지

/* prog.c */
 
#include <stdio.h>
#include <string.h>
 
int main(int argc, char *argv[])
{
        char buf[100];
 
        strncpy(buf, argv[1], 100);
        printf(buf);
        printf("hello\n");
 
        return 0;
}

위 프로그램을 gcc로 컴파일 한 후, gdb로 디버깅하며 밑의 문자열을 삽입합니다.

[reper@localhost reper]$ gdb -q prog
(gdb) disas main
Dump of assembler code for function main:
0x0804835c <main+0>:    push   %ebp
0x0804835d <main+1>:    mov    %esp,%ebp
0x0804835f <main+3>:    sub    $0x78,%esp
0x08048362 <main+6>:    and    $0xfffffff0,%esp
0x08048365 <main+9>:    mov    $0x0,%eax
0x0804836a <main+14>:   sub    %eax,%esp
0x0804836c <main+16>:   sub    $0x4,%esp
0x0804836f <main+19>:   push   $0x64
0x08048371 <main+21>:   mov    0xc(%ebp),%eax
0x08048374 <main+24>:   add    $0x4,%eax
0x08048377 <main+27>:   pushl  (%eax)
0x08048379 <main+29>:   lea    0xffffff88(%ebp),%eax
0x0804837c <main+32>:   push   %eax
0x0804837d <main+33>:   call   0x804829c <strncpy>
0x08048382 <main+38>:   add    $0x10,%esp
0x08048385 <main+41>:   sub    $0xc,%esp
0x08048388 <main+44>:   lea    0xffffff88(%ebp),%eax
0x0804838b <main+47>:   push   %eax
0x0804838c <main+48>:   call   0x804828c <printf>
0x08048391 <main+53>:   add    $0x10,%esp
0x08048394 <main+56>:   sub    $0xc,%esp
0x08048397 <main+59>:   push   $0x8048458
---Type <return> to continue, or q <return> to quit---
0x0804839c <main+64>:   call   0x804828c <printf>
0x080483a1 <main+69>:   add    $0x10,%esp
0x080483a4 <main+72>:   mov    $0x0,%eax
0x080483a9 <main+77>:   leave
0x080483aa <main+78>:   ret
0x080483ab <main+79>:   nop
End of assembler dump.
(gdb) break *main+48
Breakpoint 1 at 0x804838c
(gdb) run `perl -e 'print "AAAA\x5c\x95\x04\x08AAAA\x5e\x95\x04\x08"';`
Starting program: /home/reper/prog `perl -e 'print "AAAA\x5c\x95\x04\x08AAAA\x5e\x95\x04\x08"';`
 
Breakpoint 1, 0x0804838c in main ()
(gdb) x/60x $esp
0xbfffe660:     0xbfffe670      0xbffffc3d      0x00000064      0x420069e4
0xbfffe670:     0x41414141      0x0495c25c      0x41414108      0x95c25e41
0xbfffe680:     0x00000804      0x00000000      0x00000000      0x00000000
0xbfffe690:     0x00000000      0x00000000      0x00000000      0x00000000
0xbfffe6a0:     0x00000000      0x00000000      0x00000000      0x00000000
0xbfffe6b0:     0x00000000      0x00000000      0x00000000      0x00000000
0xbfffe6c0:     0x00000000      0x00000000      0x00000000      0x00000000
0xbfffe6d0:     0x00000000      0x4000c660      0xbfffe6e8      0x080483b6
0xbfffe6e0:     0x42130a14      0x40015360      0xbfffe708      0x42015574
0xbfffe6f0:     0x00000002      0xbfffe734      0xbfffe740      0x4001582c
0xbfffe700:     0x00000002      0x080482ac      0x00000000      0x080482cd
0xbfffe710:     0x0804835c      0x00000002      0xbfffe734      0x080483ac
0xbfffe720:     0x080483dc      0x4000c660      0xbfffe72c      0x00000000
0xbfffe730:     0x00000002      0xbffffc2c      0xbffffc3d      0x00000000
0xbfffe740:     0xbffffc50      0xbffffc6f      0xbffffc8d      0xbffffc98
(gdb)

0xbfffe675 주소의 0xc2 라는 바이트는 삽입도 하지 않았는데 어떻게 들어간것인가요 ?
저것때문에 공부가 진행이 안되네요. 환경은 레드햇9 리눅스, 커널 2.4 입니다.

zalhae의 이미지

prog의 파라메터로 입력한 `perl -e 'print "AAAA\x5c\x95\x04\x08AAAA\x5e\x95\x04\x08"';`는
``때문에 perl을 통해서 화면에 출력된 후 계산된 결과가 파라메터로 입력되게 됩니다.
따라서 stty -a로 확인되는 터미널의 속성에 따라 반환되는 결과 값은 다소 차이가 있습니다.
특히 0xc2는 터미널 상태에 따라 출력되는 경우도 있네요. 최신 커널과 터미널 환경에서는 0xc2가 삽입되지 않고 정상적으로 출력됩니다.

그리고 도움이 되실지는 모르겠지만
http://geundi.tistory.com/133
를 참고해 보세요. 혹시 원하시는 것이 해킹 관련된 것 같아서요.

nice0424의 이미지

너무 오랜만이라...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.