出于教育目的(并非任何人都应该关心这种练习背后的动机)我想编写一个可以读/写备用ttys / ptys的程序。我读过papers(从20世纪90年代开始),但不能使用他们在现代Linux / glibc上使用的实现
我希望有人在过去(过去不太远)研究过这个问题,或者至少阅读有关它的文档,他们可以提供,这将进一步启发我。
如果这个练习必须通过可加载的内核模块[lkm]完成,我也想知道(考虑到Linux没有流的事实)。
我有很多问题,可能是对某些允许实现这些目标的基本意识形态的误解,有人可以提供帮助吗? :)
答案 0 :(得分:2)
该Phrack文章中的linspy.c
代码是Linux内核模块。它不会针对现代内核进行编译,因为内部内核接口经常更改。
但是,它使用的基本方法是声音(尽管在SMP环境中完全缺少正确性所需的锁定),并且应用足够的弯头润滑脂,您应该能够将其移植到针对最新内核进行编译。
答案 1 :(得分:2)
function spy() {
ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ;
/usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
| grep -Poi 'write(...\"[[:print:]]{1,2}\"[.][.][.][,]..)' ;
}
[436] klikevil@epiphany ~ $ w
09:36:43 up 12:06, 6 users, load average: 0.46, 0.29, 0.20
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
klikevil pts/0 75.125.126.8 23:05 2:19m 10:33 0.18s cmd
klikevil pts/1 75.125.126.8 00:18 6:50m 0.06s 0.04s sshd: klikevil [priv]
klikevil tty7 :0 09:02 17:07m 2:02 0.32s x-session-manager
klikevil pts/2 :0.0 09:03 3:30 0.08s 0.08s bash
klikevil pts/3 :0.0 09:03 0.00s 0.76s 0.00s w
klikevil pts/4 :0.0 09:06 3:13 0.46s 0.00s /bin/sh /usr/bin/thunder
[437] klikevil@epiphany ~ $ spy 2
write(2, "e"..., 1)
write(2, "c"..., 1)
write(2, "h"..., 1)
write(2, "o"..., 1)
write(2, " "..., 1)
write(2, "s"..., 1)
write(2, "u"..., 1)
write(2, "p"..., 1)
write(2, " "..., 1)
write(2, "d"..., 1)
write(2, "o"..., 1)
write(2, "g"..., 1)
write(2, "\n"..., 1)
^C
如果你不介意排序一堆换行符,似乎工作得很好。至于TTY .. tail -f /dev/vcsa1-6
杰西卡
答案 2 :(得分:0)
我两次进入远程linux盒子,产生/ dev / pts / 0和/ dev / pts / 1。从0开始,我可以打开1进行读取,从而窃取用户输入的所有内容为1.如果我希望他们看到他们的输入,我必须将其写回/ dev / pts / 1。当然,他们的输入永远不会进入他们的shell,所以我必须在我的末尾创建一个shell进程(在0上)并输入它的输入,然后将shell输出回到1。
这一切对我很有用。虽然这一切都在进行,但我可以在任何我喜欢的过程中保存读取和写入的所有数据。
当然,你不能这样做,除非你是root用户或正在窥探你拥有的一个会话,但是你只想将它用于教育目的,对吗?