05.11.2014 Views

ЛУЧШИХ ВИРУСОВ - Xakep Online

ЛУЧШИХ ВИРУСОВ - Xakep Online

ЛУЧШИХ ВИРУСОВ - Xakep Online

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

>> взлом<br />

int fts_errno; /* èñêëþ÷åíèÿ */<br />

long fts_number; /* íóìåðîâàííîå çíà÷åíèå */<br />

void *fts_pointer; /* ëîêàëüíûé àäðåñ â ïàìÿòè */<br />

struct _ftsent *fts_parent; /* ðîäèòåëüñêàÿ äèðåêòîðèÿ<br />

*/<br />

struct _ftsent *fts_link; /* ñëåäóþùàÿ ôàéëîâàÿ<br />

ñòðóêòóðà */<br />

struct _ftsent *fts_cycle; /* ñòðóêòóðà èåðàðõèè ïî<br />

öèêëó */<br />

struct stat *fts_statp; /* ñòàòèñòèêà ïî ôàéëàì<br />

èåðàðõèè */<br />

} FTSENT;<br />

Заметим, что fts_level имеет тип short. Это наводит на определенные<br />

мысли. При изучении кода взгляд натыкается на комментарий<br />

разработчиков:<br />

- ---line-616-625---<br />

/*<br />

* Figure out the max file name length that can<br />

be stored in the<br />

* current path -- the inner loop allocates<br />

more path as necessary.<br />

* We really wouldn’t have to do the maxlen<br />

calculations here, we<br />

* could do them in fts_read before returning<br />

the path, but it’s a<br />

* lot easier here since the length is part of<br />

the dirent structure.<br />

*<br />

* If not changing directories set a pointer so<br />

that can just append<br />

* each new name into the path.<br />

*/<br />

- ---line-616-625---<br />

«По правде говоря, мы не будем здесь делать какие-либо вычисления<br />

с огромными именами... и здесь должен быть уровень<br />

ограничений или «pathlen»-монитор». Конечно, должен, но где<br />

же он? Безусловно, недоработка, а точнее недоделка.<br />

#define NAPPEND(p)\<br />

(p->fts_path[p->fts_pathlen — 1] == ‘/’ \<br />

? p->fts_pathlen — 1 : p->fts_pathlen)<br />

Естественно, эта функция пойдет в креш, если мы обратимся к неправильному<br />

участку памяти с помощью аномальных параметров.<br />

127# pwd<br />

/home/cxib<br />

# êîëè÷åñòâî ðîäèòåëüñêèõ êàòàëîãîâ î÷åíü âåëèêî<br />

127# du /home/<br />

4 /home/cxib/.ssh<br />

Segmentation fault (core dumped)<br />

127# rm -rf Samotnosc<br />

Segmentation fault (core dumped)<br />

127# chmod -R 000 Samotnosc<br />

Segmentation fault (core dumped)<br />

>> Targets<br />

• OpenBSD 4.4 (/usr/src/lib/libc/gen/fts.c)<br />

• Microsoft Interix 6.0 10.0.6030.0 x86<br />

• Microsft Vista Enterprise (SearchIndexer.exe) z<br />

XÀÊÅÐ 04 /124/ 09<br />

47

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!