|  |
| |
| Turtle1000 |
1.
1. NOPÀº No OperationÀÇ ¾àÀÚ·Î \x90À» ÀǹÌÇÕ´Ï´Ù. \x41ÀÎ A¿Í´Â ´Ù¸£°í¿ä.
º¸Åë NOPÀ» ³Ö¾îÁÖ´Â ÀÌÀ¯´Â ½©Äڵ尡 µé¾î°£ À§Ä¡¸¦ 'Á¤È®È÷' ¾ËÁö ¸øÇÒ ¶§ ÀÔ´Ï´Ù.
¿¹¸¦ µé¾îµå¸®¸é,
// µð·ºÅ丮 À§Ä¡´Â /home/user/vuln.c
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char str[256]; // dummy = 8;
strcpy(str, argv[1]);
printf("%s\n", str);
return 0;
}
À§¿Í °°Àº Äڵ尡 ÀÖ´Ù°í °¡Á¤Çغ¸°Ú½À´Ï´Ù.(C ¾ð¾î´Â ¾Æ½Å´Ù°í °¡Á¤Çß½À´Ï´Ù.)
gcc vuln.c -o vuln -> À¸·Î ÄÄÆÄÀÏÀ» Çϰí,
gdb·Î ºÐ¼®Çغ¸´Ï /home/user/vuln A*243 + (25¹ÙÀÌÆ® ½©ÄÚµå) + ¸®ÅÏÁÖ¼Ò
ÀÇ ¸®ÅÏÁÖ¼Ò°¡ 0xbffffabc °¡ ³ª¿Ô½À´Ï´Ù.(¿¹¸¦ µé¾î¼¿ä.)
±×·±µ¥ ±×³É ./vuln A*243 ~ À¸·Î ½ÇÇàÀ» Çϸé Segmentation Fault °¡ ¶ß°Ô µË´Ï´Ù.
ÀÚ¼¼È÷ ¼³¸íÀº ¸øÇص帮°ÚÁö¸¸, ÇÁ·Î±×·¥ À̸§ÀÇ ±æÀÌÂ÷ÀÌ¿¡ ÀÇÇØ¼ ±×·±°Ì´Ï´Ù.
±×·¸±â ¶§¹®¿¡ ½ÇÁ¦ ¸®ÅÏÁÖ¼Ò´Â 18 ¹ÙÀÌÆ® Â÷À̰¡ ³ª°ÔµË´Ï´Ù.
ÇÏÁö¸¸, ÀÌ·±°É °è»êÇϱâ´Â ±ÍÂú°ÚÁÒ ? ±×·¸±â ¶§¹®¿¡ NOPÀ» ¾²´Â °Ì´Ï´Ù. À§ÀÇ Äڵ屸¼ºÀ»
./vuln NOP*243 + (25¹ÙÀÌÆ® ½©ÄÚµå) + ¸®ÅÏÁÖ¼Ò -> ·Î ±¸¼ºÇÏ°Ô µÇ¸é,
NOP*243 ¿µ¿ª Áï, 243 ¹ÙÀÌÆ® ¸¸ÅÀÇ ÁÖ¼Ò ¿ÀÂ÷°¡ ÀÖ´õ¶óµµ NOPÀ» Ÿ°í¼ ½©ÄÚµåÀÇ À§Ä¡±îÁö °¡°ÔµÇ´Â °Ì´Ï´Ù.
À̰ÍÀ» NOP Sled ¶ó°í ÇÕ´Ï´Ù.
»ì¦ À߸ø ¾Ë°í °è½Å °Í °°¾Æ¼ Á» ¼³¸íµå·È±¸¿ä. ¾Æ¸¶ `python -c 'print ~'` À¸·Î ±¸¹®À» ³ÖÀ¸½ÇÅÙµ¥,
½©Äڵ尡 ¸Þ¸ð¸®¿¡ ¿Ã¶ó°¡´Â °ÍÀÌ ¸Â½À´Ï´Ù. |
2014/02/09 |
|
| Turtle1000 |
2.
½©ÄÚµå´Â º¸Åë... C¾ð¾î -> strace -> asm -> ... ÀÇ °úÁ¤À» °ÅÃļ ¸¸µé ¼ö Àִµ¥,
¾î´ÀÁ¤µµ ¾î¼ÀÀ» ÇÒ ÁÙ ¾Æ½Å´Ù¸é Á¤¸» ½±°í °£´ÜÇÏ°Ô ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ, ¿î¿µÃ¼Á¦¸¶´Ù ½©ÄÚµå´Â ´Ù¸¨´Ï´Ù. |
2014/02/09 |
|
| Turtle1000 |
3.
½©Äڵ带 ¾î¶²½ÄÀ¸·Î ¿Ã·Á¼ »ç¿ëÇϽôÂÁö ¾È½áÁּż µÎ °¡Áö ¹æ¹ýÀ» ¾Ë·Áµå¸®°Ú½À´Ï´Ù.
1. char str[256]°ú °°Àº º¯¼ö¿¡ ³Ö¾î¼ ÁÖ¼Ò¸¦ ±¸ÇÏ´Â ¹æ¹ý
ASLRÀÌ °É·ÁÀÖÁö ¾ÊÀº ³·Àº ¹öÀüÀÇ ¿î¿µÃ¼Á¦¿¡¼ ±¸ÇÒ ¶§´Â,
gdb¸¦ ÀÌ¿ëÇØ¼ ±¸ÇÒ ¼öµµ ÀÖ°í, ÀÌ°Ô ¾î·Á¿ì½Ã¸é ¼Ò½ºÄڵ带 ±×´ë·Î º¹»çÇØ¼
ÆÄÀÏÀ̸§ÀÇ ±æÀÌ(±æÀ̰¡ °°¾Æ¾ß ÇÕ´Ï´Ù.)¸¦ °°°Ô ÇÑ ÈÄ¿¡
printf("%p\n", &str[242]); -> ½©Äڵ尡 ¿Ã¶ó°¡´Â °÷À» Âï¾îÁÖ¸é µË´Ï´Ù.
2. ȯ°æº¯¼ö¸¦ ÀÌ¿ëÇÒ °æ¿ìÀÇ ¹æ¹ý
º¸Åë export À̸§=`python -c 'print "\x90"*50 + "½©ÄÚµå"'` ¿Í °°Àº ¹æ½ÄÀ¸·Î ¸¹ÀÌ µî·ÏÇÕ´Ï´Ù.
À̸¦ ¾Ë¾Æ³»±â À§Çؼ´Â,
void main(int argc, char *argv[])
{
printf("%p\n", getenv(argv[1]));
}
¿Í °°Àº ¼Ò½ºÄڵ带 ÀÛ¼ºÇϼż ¾Ë¾Æ³»½Ã¸é µË´Ï´Ù.
¸¸¾à Á¤È®ÇÑ À§Ä¡¸¦ ¾Ë°í½Í´Ù¸é,
#include <stdio.h>
int main(int argc, char *argv[])
{
char *ptr = argv[1];
ptr += (strlen(argv[0]) - strlen(argv[2]));
printf("%p\n", ptr);
return 0;
}
./ÇÁ·Î±×·¥¸í ȯ°æº¯¼ö¸í ./°ø°ÝÇÒÇÁ·Î±×·¥¸í -> À» ¼öÇàÇϽøé Á¤È®ÇÑ ½©ÄÚµåÀÇ À§Ä¡°¡ ³ª¿É´Ï´Ù.
(NOPÀÌ ÇÊ¿ä¾ø¾îÁö°Ô µË´Ï´Ù.) |
2014/02/09 |
|
| Turtle1000 |
4.
Ãë¾àÇÑ ÇÔ¼öµéÀº ¹öÆÛÀÇ °æ°è°ªÀ» °Ë»çÇÏÁö ¾Ê½À´Ï´Ù.
Áï, ¸®ÅÏÀ» ³Ñ¾î°¡´õ¶óµµ °ªÀ» ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌÁÒ.
½©Äڵ带 ¿Ã¸®´Â ¹æ¹ýÀº ¸Å¿ì ¸¹½À´Ï´Ù.
ÇÒ´çµÈ ¹öÆÛ(char str[256] °°Àº)¿¡ ¿Ã¸®´Â ¹æ¹ý.
À̶§´Â "\x90"*243 + ½©ÄÚµå + ¸®ÅÏÁÖ¼Ò -> ¿Í °°ÀÌ ±¸¼ºµË´Ï´Ù.
ÇÒ´çµÈ ¹öÆÛ°¡ ³Ê¹« À۾Ƽ(char str[4]) ¸®ÅÏ µÚ¿¡ ½©Äڵ带 ³Ö¾îÁÙ ¶§,
À̶§´Â "A"*8 + ¸®ÅÏÁÖ¼Ò + ½©ÄÚµå -> ¿Í °°ÀÌ ±¸¼ºÇϰí, µÚÀÇ ½©ÄÚµå ÁÖ¼Ò¸¦ ½áÁÖ¸é µË´Ï´Ù.
¸¶Âù°¡Áö·Î NOPÀ» ³Ö´Â ÀÌÀ¯´Â Á¤È®ÇÑ ½©ÄÚµåÀÇ À§Ä¡¸¦ ¾Ë ¼ö ¾øÀ»¶§°ÚÁÒ ? |
2014/02/09 |
|
| Turtle1000 |
¸¶Áö¸·À¸·Î,
Ä«Æä¿¡¼ BOF ±Û ¾²°í ÀÖ½À´Ï´Ù ~ Â÷±ÙÂ÷±Ù º¸½Ã¸é¼ ¸ð¸£´Â °Å ÀÖÀ¸¸é ¹°¾îº¸¼¼¿ä ~
ÀÚ±â¼Ò°³ ºÎºÐ¿¡ ÀÖ¾î¿ä ~ |
2014/02/09 |
|
| APlusHacker |
ÅÍÆ²1000´Ô °¨»çÇÕ´Ï´Ù
Å« µµ¿ò ‰ç½À´Ï´Ù.! |
2014/02/12 |
|