TL; DR: เชนเซเช เชเชฐเซเชจเชฒ เชฎเซเชกเซเชฏเซเชฒ เชฒเชเซ เชฐเชนเซเชฏเซ เชเซเช เชเซ ICMP เชชเซเชฒเซเชกเชฎเชพเชเชฅเซ เชเชฆเซเชถเซ เชตเชพเชเชเชถเซ เช
เชจเซ เชคเชฎเชพเชฐเซ SSH เชเซเชฐเซเชถ เชฅเชพเชฏ เชคเซ เชชเชฃ เชคเซเชจเซ เชธเชฐเซเชตเชฐ เชชเชฐ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชถเซ. เชธเซเชฅเซ เช
เชงเซเชฐเชพ เชฎเชพเชเซ, เชฌเชงเชพ เชเซเชก เชเซ
เชธเชพเชตเชงเชพเชจ! เช เชจเซเชญเชตเซ เชธเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฐเซ เชฒเซเชนเซเชจเชพ เชเชเชธเซเชฎเชพเช เชซเซเชเชตเชพเชจเซเช เชเซเชเชฎ เชฒเซ เชเซ! เชชเชฐเชฟเชญเชพเชทเชพเชฎเชพเช เชนเซเช เชเซเชเซ เชชเชฃ เชนเซเช เชถเชเซเช, เชชเชฐเชเชคเซ เชเซเชเชชเชฃ เชเซเชเชพ เชเชตเชเชพเชฐเซเชฏ เชเซ. เช เชชเซเชธเซเช เชเชตเชพ เชฒเซเชเซ เชฎเชพเชเซ เชฌเชจเชพเชตเชพเชฏเซเชฒ เชเซ เชเซเชฎเชจเซ C เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเชเชจเซ เชเซเชฌ เช เชฐเชซ เชเชเชกเชฟเชฏเชพ เชเซ เช เชจเซ เชเซเช Linux เชจเซ เช เชเชฆเชฐเชจเซ เชคเชฐเชซ เชเซเชตเชพ เชฎเชพเชเซ เชเซ.
เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เชเชฟเชชเซเชชเชฃเซเชเชฎเชพเช
เชนเชพ, 2020 เชฎเชพเช เชฎเซเช เชถเซเชเซเชฏเชพ เชเซ เชคเชฎเซ ICMP เชชเซเชเซเชเซเชธเชฎเชพเช เชฎเชจเชธเซเชตเซ เชชเซเชฒเซเชก เชฆเชพเชเชฒ เชเชฐเซ เชถเชเซ เชเซ. เชชเชฐเชเชคเซ เชเซเชฏเชพเชฐเซเชฏ เชเชฐเชคเชพเช เชฎเซเชกเซเช เชธเชพเชฐเซเช! เช
เชจเซ เชเชพเชฐเชฃ เชเซ เชคเซเชจเชพ เชตเชฟเชถเซ เชเชเชเช เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชคเซ เชคเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชฎเชพเชฐเชพ เชฐเซเชเชฟเชเชฆเชพ เชเซเชตเชจเชฎเชพเช เชนเซเช เชฎเซเชเชพเชญเชพเชเซ เชเชฎเชพเชจเซเชก เชฒเชพเชเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช, เชเซเชฎเชพเช SSH เชฆเซเชตเชพเชฐเชพ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ, ICMP เชถเซเชฒเชจเซ เชตเชฟเชเชพเชฐ เชชเซเชฐเชฅเชฎ เชฎเชพเชฐเชพ เชฎเชเชเชฎเชพเช เชเชตเซเชฏเซ. เช
เชจเซ เชธเชเชชเซเชฐเซเชฃ เชฌเซเชฒเชถเชฟเชฒเซเชก เชฌเชฟเชจเซเชเซ เชเชธเซเชฎเซเชฌเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเซเช เชคเซเชจเซ เชเช เชเชตเซ เชญเชพเชทเชพเชฎเชพเช เชฒเชฟเชจเชเซเชธ เชฎเซเชกเซเชฏเซเชฒ เชคเชฐเซเชเซ เชฒเชเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช เชเซ เชเซเชจเซ เชฎเชจเซ เชฎเชพเชคเซเชฐ เช
เชเชฆเชพเช เชเซ. เชเชตเชพ เชถเซเชฒ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชเชจเซ เชธเซเชเชฟเชฎเชพเช เชฆเซเชเชพเชถเซ เชจเชนเซเช, เชคเชฎเซ เชคเซเชจเซ เชเชฐเซเชจเชฒเชฎเชพเช เชฒเซเชก เชเชฐเซ เชถเชเซ เชเซ เช
เชจเซ เชคเซ เชซเชพเชเชฒ เชธเชฟเชธเซเชเชฎ เชชเชฐ เชจเชนเซเช เชนเซเชฏ, เชธเชพเชเชญเชณเชตเชพเชจเชพ เชชเซเชฐเซเชเซเชธเชจเซ เชธเซเชเชฟเชฎเชพเช เชคเชฎเชจเซ เชถเชเชเชพเชธเซเชชเชฆ เชเชเชเชชเชฃ เชฆเซเชเชพเชถเซ เชจเชนเซเช. เชคเซเชจเซ เชเซเชทเชฎเชคเชพเชเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช, เช เชเช เชธเชเชชเซเชฐเซเชฃ เชธเซเชตเชฟเชงเชพเชฏเซเชเซเชค เชฐเซเชเชเชฟเช เชเซ, เชชเชฐเชเชคเซ เชนเซเช เชคเซเชจเซ เชธเซเชงเชพเชฐเชตเชพเชจเซ เชเชถเชพ เชฐเชพเชเซเช เชเซเช เช
เชจเซ SSH เชฆเซเชตเชพเชฐเชพ เชฒเซเช เชเชจ เชเชฐเชตเชพ เช
เชจเซ เชเชเชพเชฎเชพเช เชเชเชพ เชเชเซเชเชฟเชเซเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชฒเซเชก เชเชตเชฐเซเช เชเซเชฌ เชตเชงเชพเชฐเซ เชนเซเชฏ เชคเซเชฏเชพเชฐเซ เชเซเชฒเซเชฒเชพ เชเชชเชพเชฏเชจเชพ เชถเซเชฒ เชคเชฐเซเชเซ เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซ เชเชถเชพ เชฐเชพเชเซเช เชเซเช. echo i > /proc/sysrq-trigger
เชฐเซเชฌเซเช เชเชฐเซเชฏเชพ เชตเชฟเชจเชพ เชเชเซเชธเซเชธ เชชเซเชจเชเชธเซเชฅเชพเชชเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเซ.
เช
เชฎเซ เชเช เชเซเชเซเชธเซเช เชเชกเชฟเชเชฐ เชฒเชเช เชเซเช, Python เช
เชจเซ C, Google เช
เชจเซ เชฎเชพเช เชฎเซเชณเชญเซเชค เชชเซเชฐเซเชเซเชฐเชพเชฎเชฟเชเช เชเซเชถเชณเชคเชพ
เชเซเชฐเชพเชนเช เชฌเชพเชเซ
เชฎเชจเซ เชเชตเซเช เชฒเชพเชเชคเซเช เชนเชคเซเช เชเซ เชเซเชฒเชพเชฏเชเชเชจเชพ เชญเชพเช เชฎเชพเชเซ เชฎเชพเชฐเซ เชฒเชเชญเช 80 เชฒเซเชเซเช เชธเชพเชฅเซ เชธเซเชเซเชฐเชฟเชชเซเช เชฒเชเชตเซ เชชเชกเชถเซ, เชชเชฐเชเชคเซ เชเชตเชพ เชฆเชฏเชพเชณเซ เชฒเซเชเซ เชนเชคเชพ เชเซเชฎเชฃเซ เชฎเชพเชฐเชพ เชฎเชพเชเซ เชคเซ เชเชฐเซเชฏเซเช
import sys
from scapy.all import sr1, IP, ICMP
if len(sys.argv) < 3:
print('Usage: {} IP "command"'.format(sys.argv[0]))
exit(0)
p = sr1(IP(dst=sys.argv[1])/ICMP()/"run:{}".format(sys.argv[2]))
if p:
p.show()
เชธเซเชเซเชฐเชฟเชชเซเช เชฌเซ เชฆเชฒเซเชฒเซ เชฒเซ เชเซ, เชเช เชธเชฐเชจเชพเชฎเซเช เช
เชจเซ เชชเซเชฒเซเชก. เชฎเซเชเชฒเชคเชพ เชชเชนเซเชฒเชพ, เชชเซเชฒเซเชกเชจเซ เชเชเชณ เชเซ เชนเซเชฏ เชเซ run:
, เชฐเซเชจเซเชกเชฎ เชชเซเชฒเซเชกเซเชธ เชธเชพเชฅเซเชจเชพ เชชเซเชเซเชเซเชจเซ เชฌเชพเชเชพเชค เชฐเชพเชเชตเชพ เชฎเชพเชเซ เช
เชฎเชจเซ เชคเซเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ.
เชเชฐเซเชจเชฒเชจเซ เชชเซเชเซเชเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชตเชฟเชถเซเชทเชพเชงเชฟเชเชพเชฐเซเชจเซ เชเชฐเซเชฐ เชเซ, เชคเซเชฅเซ เชธเซเชเซเชฐเชฟเชชเซเชเชจเซ เชธเซเชชเชฐเชฏเซเชเชฐ เชคเชฐเซเชเซ เชเชฒเชพเชตเชตเชพเชจเซ เชฐเชนเซเชถเซ. เชเชเซเชเซเชเซเชฏเซเชถเชจ เชชเชฐเชฎเชฟเชถเชจ เชเชชเชตเชพเชจเซเช เช
เชจเซ เชธเซเชเซเชชเซเชจเซ เช เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช. เชกเซเชฌเชฟเชฏเชจ เชจเชพเชฎเชจเซเช เชชเซเชเซเช เชงเชฐเชพเชตเซ เชเซ python3-scapy
. เชนเชตเซ เชคเชฎเซ เชเชเชพเชธเซ เชถเชเซ เชเซ เชเซ เชคเซ เชฌเชงเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ.
เชเชฆเซเชถ เชเชฒเชพเชตเซ เชฐเชนเซเชฏเชพ เชเซเช เช
เชจเซ เชเชเชเชชเซเช เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
morq@laptop:~/icmpshell$ sudo ./send.py 45.11.26.232 "Hello, world!"
Begin emission:
.Finished sending 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 45
id = 17218
flags =
frag = 0
ttl = 58
proto = icmp
chksum = 0x3403
src = 45.11.26.232
dst = 192.168.0.240
options
###[ ICMP ]###
type = echo-reply
code = 0
chksum = 0xde03
id = 0x0
seq = 0x0
###[ Raw ]###
load = 'run:Hello, world!
เชธเซเชจเชฟเชซเชฐเชฎเชพเช เช เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ
morq@laptop:~/icmpshell$ sudo tshark -i wlp1s0 -O icmp -f "icmp and host 45.11.26.232"
Running as user "root" and group "root". This could be dangerous.
Capturing on 'wlp1s0'
Frame 1: 59 bytes on wire (472 bits), 59 bytes captured (472 bits) on interface wlp1s0, id 0
Internet Protocol Version 4, Src: 192.168.0.240, Dst: 45.11.26.232
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xd603 [correct]
[Checksum Status: Good]
Identifier (BE): 0 (0x0000)
Identifier (LE): 0 (0x0000)
Sequence number (BE): 0 (0x0000)
Sequence number (LE): 0 (0x0000)
Data (17 bytes)
0000 72 75 6e 3a 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 run:Hello, world
0010 21 !
Data: 72756e3a48656c6c6f2c20776f726c6421
[Length: 17]
Frame 2: 59 bytes on wire (472 bits), 59 bytes captured (472 bits) on interface wlp1s0, id 0
Internet Protocol Version 4, Src: 45.11.26.232, Dst: 192.168.0.240
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Code: 0
Checksum: 0xde03 [correct]
[Checksum Status: Good]
Identifier (BE): 0 (0x0000)
Identifier (LE): 0 (0x0000)
Sequence number (BE): 0 (0x0000)
Sequence number (LE): 0 (0x0000)
[Request frame: 1]
[Response time: 19.094 ms]
Data (17 bytes)
0000 72 75 6e 3a 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 run:Hello, world
0010 21 !
Data: 72756e3a48656c6c6f2c20776f726c6421
[Length: 17]
^C2 packets captured
เชชเซเชฐเชคเชฟเชญเชพเชต เชชเซเชเซเชเชฎเชพเช เชชเซเชฒเซเชก เชฌเชฆเชฒเชพเชคเซ เชจเชฅเซ.
เชเชฐเซเชจเชฒ เชฎเซเชกเซเชฏเซเชฒ
เชกเซเชฌเชฟเชฏเชจ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชเชเชพเชฎเชพเช เชเชเซ เชเชฐเซเชฐ เชชเชกเชถเซ make
ะธ linux-headers-amd64
, เชฌเชพเชเซเชจเชพ เชจเชฟเชฐเซเชญเชฐเชคเชพเชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชเชตเชถเซ. เชนเซเช เชฒเซเชเชฎเชพเช เชธเชเชชเซเชฐเซเชฃ เชเซเชก เชชเซเชฐเชฆเชพเชจ เชเชฐเซเชถ เชจเชนเซเช; เชคเชฎเซ เชคเซเชจเซ เชเซเชฅเชฌ เชชเชฐ เชเซเชฒเซเชจ เชเชฐเซ เชถเชเซ เชเซ.
เชนเซเช เชธเซเชเช เชช
เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เช
เชฎเชจเซ เชฎเซเชกเซเชฏเซเชฒ เชฒเซเชก เชเชฐเชตเชพ เช
เชจเซ เชคเซเชจเซ เช
เชจเชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเซ เชเชพเชฐเซเชฏเซเชจเซ เชเชฐเซเชฐ เชเซ. เช
เชจเชฒเซเชกเชฟเชเช เชฎเชพเชเซ เชเชพเชฐเซเชฏ เชเชฐเซเชฐเซ เชจเชฅเซ, เชชเชฐเชเชคเซ เชชเชเซ rmmod
เชคเซ เชเชพเชฎ เชเชฐเชถเซ เชจเชนเซเช; เชเซเชฏเชพเชฐเซ เชฌเชเชง เชนเซเชฏ เชคเซเชฏเชพเชฐเซ เช เชฎเซเชกเซเชฏเซเชฒ เช
เชจเชฒเซเชก เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
#include <linux/module.h>
#include <linux/netfilter_ipv4.h>
static struct nf_hook_ops nfho;
static int __init startup(void)
{
nfho.hook = icmp_cmd_executor;
nfho.hooknum = NF_INET_PRE_ROUTING;
nfho.pf = PF_INET;
nfho.priority = NF_IP_PRI_FIRST;
nf_register_net_hook(&init_net, &nfho);
return 0;
}
static void __exit cleanup(void)
{
nf_unregister_net_hook(&init_net, &nfho);
}
MODULE_LICENSE("GPL");
module_init(startup);
module_exit(cleanup);
เช เชนเชฟเชฏเชพเช เชถเซเช เชฅเช เชฐเชนเซเชฏเซเช เชเซ:
- เชฎเซเชกเซเชฏเซเชฒ เช เชจเซ เชจเซเชเชซเชฟเชฒเซเชเชฐเชจเซ เชเชพเชฒเชพเชเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเซ เชนเซเชกเชฐ เชซเชพเชเชฒเซ เชเซเชเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
- เชฌเชงเซ เชเชพเชฎเชเซเชฐเซ เชจเซเชเชซเชฟเชฒเซเชเชฐ เชฆเซเชตเชพเชฐเชพ เชฅเชพเชฏ เชเซ, เชคเชฎเซ เชคเซเชฎเชพเช เชนเซเชเซเชธ เชธเซเช เชเชฐเซ เชถเชเซ เชเซ. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชคเซ เชฎเชพเชณเชเซเช เชเชพเชนเซเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซเชฎเชพเช เชนเซเช เชเซเช เชตเชตเชพเชฎเชพเช เชเชตเชถเซ. เชธเซเชฅเซ เชฎเชนเชคเซเชตเชจเซ เชฌเชพเชฌเชค เช เชเซ เชเซ เชซเชเชเซเชถเชจเชจเซ เชธเซเชชเชทเซเช เชเชฐเชตเซเช เชเซ เชนเซเช เชคเชฐเซเชเซ เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ:
nfho.hook = icmp_cmd_executor;
เชนเซเช เชชเชเซเชฅเซ เชซเชเชเซเชถเชจ เชชเชฐ เชเชเชถ.
เชชเชเซ เชฎเซเช เชชเซเชเซเช เชฎเชพเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชธเชฎเชฏ เชธเซเช เชเชฐเซเชฏเซ:NF_INET_PRE_ROUTING
เชเซเชฏเชพเชฐเซ เชคเซ เชชเซเชฐเชฅเชฎ เชเชฐเซเชจเชฒเชฎเชพเช เชฆเซเชเชพเชฏ เชคเซเชฏเชพเชฐเซ เชชเซเชเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชธเซเชชเชทเซเช เชเชฐเซ เชเซ. เชเชชเชฏเซเช เชเชฐเซ เชถเชเชพเชฏ เชเซNF_INET_POST_ROUTING
เชชเซเชเซเช เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชพเชฐเชฃ เชเซ เชคเซ เชเชฐเซเชจเชฒเชฎเชพเชเชฅเซ เชฌเชนเชพเชฐ เชจเซเชเชณเซ เชเซ.
เชฎเซเช เชซเชฟเชฒเซเชเชฐเชจเซ IPv4 เชชเชฐ เชธเซเช เชเชฐเซเชฏเซเช เชเซ:nfho.pf = PF_INET;
.
เชนเซเช เชฎเชพเชฐเชพ เชนเซเชเชจเซ เชธเซเชฅเซ เชตเชงเซ เชชเซเชฐเชพเชงเชพเชจเซเชฏ เชเชชเซเช เชเซเช:nfho.priority = NF_IP_PRI_FIRST;
เช เชจเซ เชนเซเช เชกเซเชเชพ เชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชตเชพเชธเซเชคเชตเชฟเช เชนเซเช เชคเชฐเซเชเซ เชฐเชเซเชธเซเชเชฐ เชเชฐเซเช เชเซเช:nf_register_net_hook(&init_net, &nfho);
- เช เชเชคเชฟเชฎ เชเชพเชฐเซเชฏ เชนเซเชเชจเซ เชฆเซเชฐ เชเชฐเซ เชเซ.
- เชฒเชพเชเชธเชจเซเชธ เชธเซเชชเชทเซเช เชฐเซเชคเซ เชธเซเชเชตเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ เชเซเชฅเซ เชเชฎเซเชชเชพเชเชฒเชฐ เชซเชฐเชฟเชฏเชพเชฆ เชจ เชเชฐเซ.
- เชเชพเชฐเซเชฏเซ
module_init()
ะธmodule_exit()
เชฎเซเชกเซเชฏเซเชฒ เชถเชฐเซ เชเชฐเชตเชพ เช เชจเซ เชธเชฎเชพเชชเซเชค เชเชฐเชตเชพ เชฎเชพเชเซ เช เชจเซเชฏ เชเชพเชฐเซเชฏเซเชจเซ เชธเซเช เชเชฐเซ.
เชชเซเชฒเซเชก เชชเซเชจเชเชชเซเชฐเชพเชชเซเชค เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ
เชนเชตเซ เชเชชเชฃเซ เชชเซเชฒเซเชก เชเชพเชขเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เช เชธเซเชฅเซ เชฎเซเชถเซเชเซเชฒ เชเชพเชฐเซเชฏ เชฌเชจเซเชฏเซเช. เชชเซเชฒเซเชกเซเชธ เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฐเซเชจเชฒเชฎเชพเช เชฌเชฟเชฒเซเช-เชเชจ เชซเชเชเซเชถเชจเซเชธ เชจเชฅเซ; เชคเชฎเซ เชฎเชพเชคเซเชฐ เชเชเซเช-เชธเซเชคเชฐเชจเชพ เชชเซเชฐเซเชเซเชเซเชฒเชจเชพ เชนเซเชกเชฐเซเชจเซ เชชเชพเชฐเซเชธ เชเชฐเซ เชถเชเซ เชเซ.
#include <linux/ip.h>
#include <linux/icmp.h>
#define MAX_CMD_LEN 1976
char cmd_string[MAX_CMD_LEN];
struct work_struct my_work;
DECLARE_WORK(my_work, work_handler);
static unsigned int icmp_cmd_executor(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)
{
struct iphdr *iph;
struct icmphdr *icmph;
unsigned char *user_data;
unsigned char *tail;
unsigned char *i;
int j = 0;
iph = ip_hdr(skb);
icmph = icmp_hdr(skb);
if (iph->protocol != IPPROTO_ICMP) {
return NF_ACCEPT;
}
if (icmph->type != ICMP_ECHO) {
return NF_ACCEPT;
}
user_data = (unsigned char *)((unsigned char *)icmph + (sizeof(icmph)));
tail = skb_tail_pointer(skb);
j = 0;
for (i = user_data; i != tail; ++i) {
char c = *(char *)i;
cmd_string[j] = c;
j++;
if (c == '')
break;
if (j == MAX_CMD_LEN) {
cmd_string[j] = '';
break;
}
}
if (strncmp(cmd_string, "run:", 4) != 0) {
return NF_ACCEPT;
} else {
for (j = 0; j <= sizeof(cmd_string)/sizeof(cmd_string[0])-4; j++) {
cmd_string[j] = cmd_string[j+4];
if (cmd_string[j] == '')
break;
}
}
schedule_work(&my_work);
return NF_ACCEPT;
}
เชถเซเช เชฅเช เชฐเชนเซเชฏเซเช เชเซ:
- เชเชเชชเซ เช เชจเซ เชเชเชธเซเชเชฎเชชเซ เชนเซเชกเชฐเซเชจเซ เชนเซเชฐเชซเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เช เชตเชเชคเซ เชฎเชพเชฐเซ เชตเชงเชพเชฐเชพเชจเซ เชนเซเชกเชฐ เชซเชพเชเชฒเซ เชธเชพเชฎเซเชฒ เชเชฐเชตเซ เชชเชกเซ เชนเชคเซ.
- เชฎเซเช เชฎเชนเชคเซเชคเชฎ เชฐเซเชเชพ เชฒเชเชฌเชพเช เชธเซเช เชเชฐเซ เชเซ:
#define MAX_CMD_LEN 1976
. เช เชฌเชฐเชพเชฌเชฐ เชถเชพ เชฎเชพเชเซ? เชเชพเชฐเชฃ เชเซ เชเชฎเซเชชเชพเชเชฒเชฐ เชคเซเชจเชพ เชตเชฟเชถเซ เชซเชฐเชฟเชฏเชพเชฆ เชเชฐเซ เชเซ! เชคเซเชเช เชฎเชจเซ เชชเชนเซเชฒเซเชฅเซ เช เชธเซเชเชตเซเชฏเซเช เชเซ เชเซ เชฎเชพเชฐเซ เชธเซเชเซเช เช เชจเซ เชขเชเชฒเชพเชจเซ เชธเชฎเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชเซเช เชฆเชฟเชตเชธ เชนเซเช เชเซเชเซเชเชธเชชเชฃเซ เช เชเชฐเซเชถ เช เชจเซ เชเชฆเชพเช เชเซเชก เชชเชฃ เชธเซเชงเชพเชฐเซเชถ. เชฎเซเช เชคเชฐเชค เช เชฒเชพเชเชจ เชธเซเช เชเชฐเซ เชเซ เชเซเชฎเชพเช เชเชฆเซเชถ เชนเชถเซ:char cmd_string[MAX_CMD_LEN];
. เชคเซ เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏเซเชฎเชพเช เชฆเซเชถเซเชฏเชฎเชพเชจ เชนเซเชตเซเช เชเซเชเช; เชนเซเช เชซเชเชฐเชพ 9 เชฎเชพเช เช เชตเชฟเชถเซ เชตเชงเซ เชตเชฟเชเชคเชตเชพเชฐ เชตเชพเชค เชเชฐเซเชถ. - เชนเชตเซ เชเชชเชฃเซ เชชเซเชฐเชพเชฐเชเชญ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ (
struct work_struct my_work;
) เชธเซเชเซเชฐเชเซเชเชฐ เช เชจเซ เชคเซเชจเซ เชฌเซเชเชพ เชซเชเชเซเชถเชจ เชธเชพเชฅเซ เชเชจเซเชเซเช เชเชฐเซ (DECLARE_WORK(my_work, work_handler);
). เชนเซเช เชจเชตเชฎเชพ เชซเชเชฐเชพเชฎเชพเช เช เชถเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเซ เชคเซ เชตเชฟเชถเซ เชชเชฃ เชตเชพเชค เชเชฐเซเชถ. - เชนเชตเซ เชนเซเช เชเช เชเชพเชฐเซเชฏ เชเชพเชนเซเชฐ เชเชฐเซเช เชเซเช, เชเซ เชนเซเช เชนเชถเซ. เชชเซเชฐเชเชพเชฐ เช
เชจเซ เชธเซเชตเซเชเซเชค เชฆเชฒเซเชฒเซ เชจเซเชเชซเชฟเชฒเซเชเชฐ เชฆเซเชตเชพเชฐเชพ เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช
เชฎเชจเซ เชซเชเซเชค เชฐเชธ เชเซ
skb
. เช เชเช เชธเซเชเซเช เชฌเชซเชฐ เชเซ, เชเช เชฎเซเชณเชญเซเชค เชกเซเชเชพ เชฎเชพเชณเชเซเช เชเซเชฎเชพเช เชชเซเชเซเช เชตเชฟเชถเซเชจเซ เชคเชฎเชพเชฎ เชเชชเชฒเชฌเซเชง เชฎเชพเชนเชฟเชคเซ เชนเซเชฏ เชเซ. - เชซเชเชเซเชถเชจ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชฌเซ เชธเซเชเซเชฐเชเซเชเชฐเซเชธ เช
เชจเซ เชเชฃเชพ เชเชฒเซเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ, เชเซเชฎเชพเช เชฌเซ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชเซเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ.
struct iphdr *iph; struct icmphdr *icmph; unsigned char *user_data; unsigned char *tail; unsigned char *i; int j = 0;
- เชเชชเชฃเซ เชคเชฐเซเชเชฅเซ เชถเชฐเซเชเชค เชเชฐเซ เชถเชเซเช เชเซเช. เชฎเซเชกเซเชฏเซเชฒ เชเชพเชฎ เชเชฐเซ เชคเซ เชฎเชพเชเซ, ICMP เชเชเซ เชธเชฟเชตเชพเชฏเชจเชพ เชเซเช เชชเซเชเซเชเชจเซ เชเชฐเซเชฐ เชจเชฅเซ, เชคเซเชฅเซ เช
เชฎเซ เชฌเชฟเชฒเซเช-เชเชจ เชซเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฌเชซเชฐเชจเซ เชชเชพเชฐเซเชธ เชเชฐเซเช เชเซเช เช
เชจเซ เชคเชฎเชพเชฎ เชฌเชฟเชจ-ICMP เช
เชจเซ เชจเซเชจ-เชเชเซ เชชเซเชเซเชเซ เชฌเชนเชพเชฐ เชเชพเชขเซเช เชเซเช. เชชเชฐเชค
NF_ACCEPT
เชเชเชฒเซ เชชเซเชเซเชเชจเซ เชธเซเชตเซเชเซเชคเชฟ, เชชเชฐเชเชคเซ เชคเชฎเซ เชชเชฐเชค เชเชฐเซเชจเซ เชชเชฃ เชชเซเชเซเช เชเซเชกเซ เชถเชเซ เชเซNF_DROP
.iph = ip_hdr(skb); icmph = icmp_hdr(skb); if (iph->protocol != IPPROTO_ICMP) { return NF_ACCEPT; } if (icmph->type != ICMP_ECHO) { return NF_ACCEPT; }
IP เชนเซเชกเชฐเซเชจเซ เชคเชชเชพเชธเซเชฏเชพ เชตเชฟเชจเชพ เชถเซเช เชฅเชถเซ เชคเซ เชฎเซเช เชชเชฐเซเชเซเชทเชฃ เชเชฐเซเชฏเซเช เชจเชฅเซ. เชธเซ เชตเชฟเชถเซเชจเซเช เชฎเชพเชฐเซเช เชจเซเชฏเซเชจเชคเชฎ เชเซเชเชพเชจ เชฎเชจเซ เชเชนเซ เชเซ เชเซ เชตเชงเชพเชฐเชพเชจเซ เชคเชชเชพเชธ เชตเชฟเชจเชพ, เชเชเชเช เชญเชฏเชเชเชฐ เชฌเชจเชตเชพเชจเซเช เชเซ. เชเซ เชคเชฎเซ เชฎเชจเซ เชเชจเชพเชฅเซ เชจเชพ เชชเชพเชกเชถเซ เชคเซ เชฎเชจเซ เชเชจเชเชฆ เชฅเชถเซ!
- เชนเชตเซ เชเซเชฏเชพเชฐเซ เชชเซเชเซเช เชคเชฎเชจเซ เชเชฐเซเชฐ เชเซ เชคเซ เชเซเชเซเชเชธ เชชเซเชฐเชเชพเชฐเชจเซเช เชเซ, เชคเชฎเซ เชกเซเชเชพ เชเชพเชขเซ เชถเชเซ เชเซ. เชฌเชฟเชฒเซเช-เชเชจ เชซเชเชเซเชถเชจ เชตเชฟเชจเชพ, เชคเชฎเชพเชฐเซ เชชเชนเซเชฒเชพ เชชเซเชฒเซเชกเชจเซ เชถเชฐเซเชเชคเชฎเชพเช เชเช เชชเซเชเชจเซเชเชฐ เชฎเซเชณเชตเชตเซเช เชชเชกเชถเซ. เช เชเช เชเชเซเชฏเชพเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เชคเชฎเชพเชฐเซ เชชเซเชเชจเซเชเชฐเชจเซ ICMP เชนเซเชกเชฐเชจเซ เชถเชฐเซเชเชคเชฎเชพเช เชฒเช เชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช
เชจเซ เชคเซเชจเซ เช เชนเซเชกเชฐเชจเชพ เชเชฆเชฎเชพเช เชเชธเซเชกเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชฌเชงเซเช เชฎเชพเชณเชเซเช เชตเชพเชชเชฐเซ เชเซ
icmph
:user_data = (unsigned char *)((unsigned char *)icmph + (sizeof(icmph)));
เชนเซเชกเชฐเชจเซ เช เชเชค เชชเซเชฒเซเชกเชจเชพ เช เชเชค เชธเชพเชฅเซ เชฎเซเชณ เชเชพเชคเซ เชนเซเชตเซ เชเซเชเชskb
, เชคเซเชฅเซ เช เชฎเซ เชคเซเชจเซ เช เชจเซเชฐเซเชช เชฎเชพเชณเชเชพเชฎเชพเชเชฅเซ เชชเชฐเชฎเชพเชฃเซ เชฎเชพเชงเซเชฏเชฎเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฎเซเชณเชตเซเช เชเซเช:tail = skb_tail_pointer(skb);
.
เชเชฟเชคเซเชฐ เชเซเชฐเชพเช เชเชฏเซเช เชนเชคเซเชเช เชนเซเชเชฅเซ , เชคเชฎเซ เชธเซเชเซเช เชฌเชซเชฐ เชตเชฟเชถเซ เชตเชงเซ เชตเชพเชเชเซ เชถเชเซ เชเซ. - เชเชเชตเชพเชฐ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชถเชฐเซเชเชค เช
เชจเซ เช
เชเชคเชจเชพ เชจเชฟเชฐเซเชฆเซเชถเชเซ เชนเซเชฏ, เชคเซ เชคเชฎเซ เชกเซเชเชพเชจเซ เชธเซเชเซเชฐเชฟเชเชเชฎเชพเช เชเซเชชเชฟ เชเชฐเซ เชถเชเซ เชเซ
cmd_string
, เชเชชเชธเชฐเซเชเชจเซ เชนเชพเชเชฐเซ เชฎเชพเชเซ เชคเซเชจเซ เชคเชชเชพเชธเซrun:
เช เชจเซ, เชเซเชฏเชพเช เชคเซ เชชเซเชเซเช เชเซเชฎ เชฅเชฏเซเชฒ เชนเซเชฏ เชคเซ เชคเซเชจเซ เชเชพเชขเซ เชจเชพเชเซ, เช เชฅเชตเชพ เช เชเชชเชธเชฐเซเชเชจเซ เชฆเซเชฐ เชเชฐเซเชจเซ เชฒเซเชเซเชจเซ เชซเชฐเซเชฅเซ เชฒเชเซ. - เชฌเชธ, เชนเชตเซ เชคเชฎเซ เชฌเซเชเชพ เชนเซเชจเซเชกเชฒเชฐเชจเซ เชเซเชฒ เชเชฐเซ เชถเชเซ เชเซ:
schedule_work(&my_work);
. เชเชตเชพ เชเซเชฒเชฎเชพเช เชชเชฐเชฟเชฎเชพเชฃ เชชเชธเชพเชฐ เชเชฐเชตเซเช เชถเชเซเชฏ เชจ เชนเซเชตเชพเชฅเซ, เชเชฆเซเชถ เชธเชพเชฅเซเชจเซ เชฒเชพเชเชจ เชตเซเชถเซเชตเชฟเช เชนเซเชตเซ เชเชตเชถเซเชฏเช เชเซ.schedule_work()
เชชเชพเชธ เชเชฐเซเชฒ เชธเซเชเซเชฐเชเซเชเชฐ เชธเชพเชฅเซ เชธเชเชเชณเชพเชฏเซเชฒ เชซเชเชเซเชถเชจเชจเซ เชเชพเชธเซเช เชถเซเชกเซเชฏเซเชฒเชฐเชจเซ เชธเชพเชฎเชพเชจเซเชฏ เชเชคเชพเชฐเชฎเชพเช เชฎเซเชเชถเซ เช เชจเซ เชชเซเชฐเซเชฃ เชเชฐเชถเซ, เชคเชฎเชจเซ เชเชฆเซเชถ เชชเซเชฐเซเชฃ เชฅเชตเชพเชจเซ เชฐเชพเชน เชเซเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเชถเซ เชจเชนเซเช. เช เชเชฐเซเชฐเซ เชเซ เชเชพเชฐเชฃ เชเซ เชนเซเช เชเซเชฌ เช เชเชกเชชเซ เชนเซเชตเซ เชเซเชเช. เชจเชนเชฟเชเชคเชฐ, เชคเชฎเชพเชฐเซ เชชเชธเชเชฆเชเซ เช เชเซ เชเซ เชเชเชเชชเชฃ เชถเชฐเซ เชฅเชถเซ เชจเชนเซเช เช เชฅเชตเชพ เชคเชฎเชจเซ เชเชฐเซเชจเชฒ เชเชญเชฐเชพเช เชฎเชณเชถเซ. เชตเชฟเชฒเชเชฌ เช เชฎเซเชคเซเชฏเซ เชธเชฎเชพเชจ เชเซ! - เชฌเชธ, เชคเชฎเซ เช เชจเซเชฐเซเชช เชตเชณเชคเชฐ เชธเชพเชฅเซ เชชเซเชเซเช เชธเซเชตเซเชเชพเชฐเซ เชถเชเซ เชเซ.
เชฏเซเชเชฐเชธเซเชชเซเชธเชฎเชพเช เชชเซเชฐเซเชเซเชฐเชพเชฎเชจเซ เชเซเชฒ เชเชฐเชตเซ
เช เชเชพเชฐเซเชฏ เชธเซเชฅเซ เชธเชฎเชเซ เชถเชเชพเชฏ เชคเซเชตเซเช เชเซ. เชฎเชพเช เชคเซเชจเซเช เชจเชพเชฎ เชเชชเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช DECLARE_WORK()
, เชชเซเชฐเชเชพเชฐ เช
เชจเซ เชธเซเชตเซเชเซเชค เชฆเชฒเซเชฒเซ เชฐเชธเชชเซเชฐเชฆ เชจเชฅเซ. เช
เชฎเซ เชเชฆเซเชถ เชธเชพเชฅเซ เชฒเซเชเซ เชฒเชเช เชเซเช เช
เชจเซ เชคเซเชจเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชถเซเชฒเชฎเชพเช เชชเชธเชพเชฐ เชเชฐเซเช เชเซเช. เชคเซเชจเซ เชชเชฆเชเซเชเซเชฆเชจ, เชฆเซเชตเชฟเชธเชเชเซเชเชจเซ เชถเซเชง เช
เชจเซ เชฌเซเชเซเช เชฌเชงเซเช เชธเชพเชฅเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชฐเชตเชพ เชฆเซ.
static void work_handler(struct work_struct * work)
{
static char *argv[] = {"/bin/sh", "-c", cmd_string, NULL};
static char *envp[] = {"PATH=/bin:/sbin", NULL};
call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
}
- เชฆเชฒเซเชฒเซเชจเซ เชถเชฌเซเชฆเชฎเชพเชณเชพเชเชจเซ เชถเซเชฐเซเชฃเซเชฎเชพเช เชธเซเช เชเชฐเซ
argv[]
. เชนเซเช เชฎเชพเชจเซเชถ เชเซ เชฆเชฐเซเช เชตเซเชฏเชเซเชคเชฟ เชเชพเชฃเซ เชเซ เชเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชเชฐเซเชเชฐ เช เชฐเซเชคเซ เชเชเซเชเชฟเชเซเชฏเซเช เชฅเชพเชฏ เชเซ, เช เชจเซ เชธเซเชชเซเชธ เชธเชพเชฅเซ เชธเชคเชค เชฒเชพเชเชจ เชคเชฐเซเชเซ เชจเชนเซเช. - เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒเซ เชธเซเช เชเชฐเซ. เชฎเซเช เชชเชพเชฅเชจเชพ เชจเซเชฏเซเชจเชคเชฎ เชธเซเช เชธเชพเชฅเซ เชฎเชพเชคเซเชฐ PATH เชฆเชพเชเชฒ เชเชฐเซเชฏเซ เชเซ, เชเชถเชพ เชฐเชพเชเซเชจเซ เชเซ เชคเซ เชฌเชงเชพ เชชเชนเซเชฒเชพเชฅเซ เช เชเซเชกเชพเชฏเซเชฒเชพ เชนเชคเชพ
/bin
ั/usr/bin
ะธ/sbin
ั/usr/sbin
. เชตเซเชฏเชตเชนเชพเชฐเชฎเชพเช เช เชจเซเชฏ เชฎเชพเชฐเซเชเซ เชญเชพเชเซเชฏเซ เช เชฎเชนเชคเซเชตเชจเชพ เชนเซเชฏ เชเซ. - เชฅเช เชเชฏเซเช, เชเชพเชฒเซ เชเชฐเซเช! เชเชฐเซเชจเชฒ เชเชพเชฐเซเชฏ
call_usermodehelper()
เชชเซเชฐเชตเซเชถ เชธเซเชตเซเชเชพเชฐเซ เชเซ. เชฆเซเชตเชฟเชธเชเชเซเชจเซ เชฎเชพเชฐเซเช, เชฆเชฒเซเชฒเซเชจเซ เชถเซเชฐเซเชฃเซ, เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒเซเชจเซ เชถเซเชฐเซเชฃเซ. เช เชนเซเช เชนเซเช เชเชฎ เชชเชฃ เชงเชพเชฐเซเช เชเซเช เชเซ เชฆเชฐเซเช เชตเซเชฏเชเซเชคเชฟ เชเชเซเชเซเชเซเชฏเซเชเซเชฌเชฒ เชซเชพเชเชฒเชจเชพ เชชเชพเชฅเชจเซ เช เชฒเช เชฆเชฒเซเชฒ เชคเชฐเซเชเซ เชชเชธเชพเชฐ เชเชฐเชตเชพเชจเซ เช เชฐเซเชฅ เชธเชฎเชเซ เชเซ, เชชเชฐเชเชคเซ เชคเชฎเซ เชชเซเชเซ เชถเชเซ เชเซ. เชเซเชฒเซเชฒเซ เชฆเชฒเซเชฒ เชธเซเชชเชทเซเช เชเชฐเซ เชเซ เชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชชเซเชฐเซเชฃ เชฅเชตเชพเชจเซ เชฐเชพเชน เชเซเชตเซ เชเซ เชเซเชฎ (UMH_WAIT_PROC
), เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชถเชฐเซ (UMH_WAIT_EXEC
) เช เชฅเชตเชพ เชฌเชฟเชฒเชเซเชฒ เชฐเชพเชน เชจ เชเซเช (UMH_NO_WAIT
). เชคเซเชฏเชพเช เชเซเชเชฒเชพเช เชตเชงเซ เชเซUMH_KILLABLE
, เชฎเซเช เชคเซเชฎเชพเช เชงเซเชฏเชพเชจ เชเชชเซเชฏเซเช เชจเชฅเซ.
เชตเชฟเชงเชพเชจเชธเชญเชพ
เชเชฐเซเชจเชฒ เชฎเซเชกเซเชฏเซเชฒเซเชจเซ เชเชธเซเชฎเซเชฌเชฒเซ เชเชฐเซเชจเชฒ เชฎเซเช-เชซเซเชฐเซเชฎเชตเชฐเซเช เชฆเซเชตเชพเชฐเชพ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเชนเซเชตเชพเชฏ เชเซ make
เชเชฐเซเชจเชฒ เชธเชเชธเซเชเชฐเชฃ เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒ เชตเชฟเชถเชฟเชทเซเช เชกเชฟเชฐเซเชเซเชเชฐเซเชจเซ เช
เชเชฆเชฐ (เช
เชนเซเช เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเซเชฒ เชเซ: KERNELDIR:=/lib/modules/$(shell uname -r)/build
), เช
เชจเซ เชฎเซเชกเซเชฏเซเชฒเชจเซเช เชธเซเชฅเชพเชจ เชเชฒเชจเซ เชชเชธเชพเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ M
เชฆเชฒเซเชฒเซเชฎเชพเช. icmpshell.ko เช
เชจเซ เชธเซเชตเชเซเช เชฒเชเซเชทเซเชฏเซ เช เชซเซเชฐเซเชฎเชตเชฐเซเชเชจเซ เชธเชเชชเซเชฐเซเชฃ เชเชชเชฏเซเช เชเชฐเซ เชเซ. IN obj-m
เชเชฌเซเชเซเชเซเช เชซเชพเชเชฒ เชธเซเชเชตเซ เชเซ เชเซ เชฎเซเชกเซเชฏเซเชฒเชฎเชพเช เชฐเซเชชเชพเชเชคเชฐเชฟเชค เชฅเชถเซ. เชธเชฟเชจเซเชเซเชเซเชธ เชเซ เชฐเชฟเชฎเซเช เชเชฐเซ เชเซ main.o
ะฒ icmpshell.o
(icmpshell-objs = main.o
) เชฎเชจเซ เชฌเชนเซ เชคเชพเชฐเซเชเชฟเช เชฒเชพเชเชคเซเช เชจเชฅเซ, เชชเชฃ เชเชตเซเช เช เชนเซเชฏ.
KERNELDIR:=/lib/modules/$(shell uname -r)/build
obj-m = icmpshell.o
icmpshell-objs = main.o
all: icmpshell.ko
icmpshell.ko: main.c
make -C $(KERNELDIR) M=$(PWD) modules
clean:
make -C $(KERNELDIR) M=$(PWD) clean
เช
เชฎเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเซเช เชเซเช: make
. เชฒเซเชก เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ: insmod icmpshell.ko
. เชฅเช เชเชฏเซเช, เชคเชฎเซ เชเชเชพเชธเซ เชถเชเซ เชเซ: sudo ./send.py 45.11.26.232 "date > /tmp/test"
. เชเซ เชคเชฎเชพเชฐเซ เชชเชพเชธเซ เชคเชฎเชพเชฐเชพ เชฎเชถเซเชจ เชชเชฐ เชซเชพเชเชฒ เชเซ /tmp/test
เช
เชจเซ เชคเซเชฎเชพเช เชตเชฟเชจเชเชคเซ เชฎเซเชเชฒเชตเชพเชฎเชพเช เชเชตเซเชฒเซ เชคเชพเชฐเซเชเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ, เชเซเชจเซ เช
เชฐเซเชฅ เชเซ เชเซ เชคเชฎเซ เชฌเชงเซเช เชฌเชฐเชพเชฌเชฐ เชเชฐเซเชฏเซเช เช
เชจเซ เชฎเซเช เชฌเชงเซเช เชฌเชฐเชพเชฌเชฐ เชเชฐเซเชฏเซเช.
เชจเชฟเชทเซเชเชฐเซเชท
เชชเชฐเชฎเชพเชฃเซ เชตเชฟเชเชพเชธ เชธเชพเชฅเซเชจเซ เชฎเชพเชฐเซ เชชเซเชฐเชฅเชฎ เช
เชจเซเชญเชต เชฎเชพเชฐเซ เช
เชชเซเชเซเชทเชพ เชเชฐเชคเชพเช เชเชฃเซ เชธเชฐเชณ เชนเชคเซ. เชเชฎเซเชชเชพเชเชฒเชฐ เชธเชเชเซเชคเซ เช
เชจเซ Google เชชเชฐเชฟเชฃเชพเชฎเซ เชชเชฐ เชงเซเชฏเชพเชจ เชเซเชจเซเชฆเซเชฐเชฟเชค เชเชฐเซเชจเซ, C เชฎเชพเช เชตเชฟเชเชพเชธ เชเชฐเซเชฏเชพเชจเชพ เช
เชจเซเชญเชต เชตเชฟเชจเชพ เชชเชฃ, เชนเซเช เชเช เชตเชฐเซเชเชฟเชเช เชฎเซเชกเซเชฏเซเชฒ เชฒเชเซ เชถเชเซเชฏเซ เช
เชจเซ เชเชฐเซเชจเชฒ เชนเซเชเชฐ เชเซเชตเซ เช
เชจเซเชญเชต เชเชฐเซ เชถเชเซเชฏเซ, เช
เชจเซ เชคเซ เช เชธเชฎเชฏเซ เชธเซเชเซเชฐเชฟเชชเซเช เชเชฟเชกเซ. เชตเชงเซเชฎเชพเช, เชนเซเช เชเชฐเซเชจเชฒ เชจเซเชฏเซเชฌเซเช เชเซเชจเชฒ เชชเชฐ เชเชฏเซ, เชเซเชฏเชพเช เชฎเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพเชจเซเช เชเชนเซเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช schedule_work()
เชเซเชฒ เชเชฐเชตเชพเชจเซ เชฌเชฆเชฒเซ call_usermodehelper()
เชนเซเชเชจเซ เช
เชเชฆเชฐ เช เช
เชจเซ เชคเซเชจเซ เชถเชฐเชฎเชเชจเช, เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเซเชญเชพเชเชกเชจเซ เชถเชเชเชพ. เชเซเชกเชจเซ เชธเซ เชฒเซเชเซเช เชฎเชพเชฐเชพ เชซเซเชฐเซ เชเชพเชเชฎเชฎเชพเช เชตเชฟเชเชพเชธเชจเชพ เชเช เช
เช เชตเชพเชกเชฟเชฏเชพ เชตเชฟเชถเซ เชเชฐเซเช เชเชฐเซ เชเซ. เชเช เชธเชซเชณ เช
เชจเซเชญเชต เชเซเชฃเซ เชธเชฟเชธเซเชเชฎเชจเชพ เชตเชฟเชเชพเชธเชจเซ เชเชฌเชฐเชเชธเซเชค เชเชเชฟเชฒเชคเชพ เชตเชฟเชถเซเชจเซ เชฎเชพเชฐเซ เช
เชเชเชค เชฎเชพเชจเซเชฏเชคเชพเชจเซ เชจเชพเชถ เชเชฐเซเชฏเซ.
เชเซ เชเซเช เชเซเชฅเชฌ เชชเชฐ เชเซเชก เชธเชฎเซเชเซเชทเชพ เชเชฐเชตเชพ เชฎเชพเชเซ เชธเชเชฎเชค เชฅเชพเชฏ, เชคเซ เชนเซเช เชเชญเชพเชฐเซ เชฐเชนเซเชถ. เชฎเชจเซ เชเชพเชคเชฐเซ เชเซ เชเซ เชฎเซเช เชเชฃเซ เชฎเซเชฐเซเช เชญเซเชฒเซ เชเชฐเซ เชเซ, เชเชพเชธ เชเชฐเซเชจเซ เชเซเชฏเชพเชฐเซ เชถเชฌเซเชฆเชฎเชพเชณเชพเช เชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชคเซ เชตเชเชคเซ.
เชธเซเชฐเซเชธ: www.habr.com