---
# System prepended metadata

title: ELF x86 - Stack buffer overflow basic 1 (root-me)
tags: [PWN, root me]

---

# ELF x86 - Stack buffer overflow basic 1 (root-me)

tôi ssh đến và thử xem trong đây có những file nào 
![image](https://hackmd.io/_uploads/BkbRu1cS6.png)

tôi không có quyền mở file .passwd và chỉ có user sở hữu nó là  app-systeme-ch13-cracked mới có quyền đọc
ở đây tôi là user  app-systeme-ch13 được chạy file ch13 và đọc file ch13.c 
![image](https://hackmd.io/_uploads/rklght19r6.png)

ở đây tôi thấy lỗi buffer overflow vì mảng  buf có 40 byte nhưng hàm  fgets(buf,45,stdin); cho nhập đến 45 byte vào mảng buf mà khi đưa vào stack thì biến check được khai báo trước nên được vào stack trước nên nó sẽ bị mảng buf khai báo sau ghi đè 

![image](https://hackmd.io/_uploads/H1ma5yqBT.png)

và tôi thất khi "check == 0xdeadbeef" thì tôi sẽ vào được You win!\nOpening your shell...\n và chiếm được shell

![image](https://hackmd.io/_uploads/HJAToJ9ST.png)
ở đây tôi ghi tối đa 40 byte vào mảng buf và phần 4 bute dư ra sẽ vào biến check và có giá trị là 0xdeadbeef
nhưng tôi không chiếm được shell 

<() để tạo một tiến trình phụ và sử dụng output của tiến trình đó làm input cho "cat".

dấu - được sử dụng để chỉ định việc sử dụng dữ liệu từ input chuẩn (stdin). Khi sử dụng trong ngữ cảnh của một lệnh như cat, dấu - có thể được sử dụng để cho biết lệnh đó sẽ đọc dữ liệu từ input chuẩn thay vì từ một tập tin cụ thể.

tôi dùng lệnh ``` cat <(python -c "print('a'*40+'\xef\xbe\xad\xde')") - | ./ch13```

và tương tác được với shell
![image](https://hackmd.io/_uploads/H1S6p19Ba.png)

và tôi được đáp án là ```"1w4ntm0r3pr0np1s"```

