TL; เจกเจพ: เจฎเฉเจ เจเฉฑเจ เจเจฐเจจเจฒ เจฎเฉเจกเฉเจเจฒ เจฒเจฟเจ เจฐเจฟเจนเจพ เจนเจพเจ เจเฉ ICMP เจชเฉเจฒเฉเจก เจคเฉเจ เจเจฎเจพเจเจกเจพเจ เจจเฉเฉฐ เจชเฉเฉเจนเฉเจเจพ เจ
เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจธเจฐเจตเจฐ 'เจคเฉ เจเจฒเจพเจเจเจพ เจญเจพเจตเฉเจ เจคเฉเจนเจพเจกเจพ SSH เจเจฐเฉเจธเจผ เจนเฉ เจเจพเจตเฉเฅค เจธเจญ เจคเฉเจ เจฌเฉเจธเจฌเจฐ เจฒเจ, เจธเจญ เจเฉเจก เจนเฉ
เจธเจพเจตเจงเจพเจจ เจคเจเจฐเจฌเฉเจเจพเจฐ C เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐ เจเฉเจจ เจฆเฉ เจนเฉฐเจเฉเจเจ เจตเจฟเฉฑเจ เจซเฉเฉฑเจเจฃ เจฆเจพ เจเฉเจเจฎ เจฒเฉเจเจฆเฉ เจนเจจ! เจฎเฉเจ เจธเจผเจฌเจฆเจพเจตเจฒเฉ เจตเจฟเฉฑเจ เจเจฒเจค เจตเฉ เจนเฉ เจธเจเจฆเจพ เจนเจพเจ, เจชเจฐ เจเจฟเจธเฉ เจตเฉ เจเจฒเฉเจเจจเจพ เจฆเจพ เจธเจตเจพเจเจค เจนเฉ. เจชเฉเจธเจ เจเจนเจจเจพเจ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจ เจนเฉ เจเจฟเจจเฉเจนเจพเจ เจจเฉเฉฐ เจธเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ เจฆเจพ เจฌเจนเฉเจค เจฎเจพเฉเจพ เจตเจฟเจเจพเจฐ เจนเฉ เจ เจคเฉ เจเจน เจฒเฉเจจเจเจธ เจฆเฉ เจ เฉฐเจฆเจฐเจฒเฉ เจนเจฟเฉฑเจธเฉ เจจเฉเฉฐ เจตเฉเจเจฃเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจจ.
เจฎเฉเจฐเฉ เจชเจนเจฟเจฒเฉ เจเจฐเจจ เจฒเจ เจเจฟเฉฑเจชเจฃเฉ เจตเจฟเฉฑเจ
เจนเจพเจ, 2020 เจตเจฟเฉฑเจ เจฎเฉเจ เจธเจฟเฉฑเจเจฟเจ เจเจฟ เจคเฉเจธเฉเจ ICMP เจชเฉเจเฉเจเจพเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจเจฐเจฌเจฟเจเจฐเจฐเฉ เจชเฉเจฒเฉเจก เจชเจพ เจธเจเจฆเฉ เจนเฉเฅค เจชเจฐ เจเจฆเฉ เจจเจพเจฒเฉเจ เจฆเฉเจฐ เจจเจพเจฒเฉเจ เจฌเจฟเจนเจคเจฐ! เจ
เจคเฉ เจเจฟเจเจเจเจฟ เจเจธ เจฌเจพเจฐเฉ เจเฉเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจเจธ เจฒเจ เจเจน เจเจฐเจจ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ. เจเจฟเจเจเจเจฟ เจฎเฉเจฐเฉ เจฐเฉเจเจผเจพเจจเจพ เจเฉเจตเจจ เจตเจฟเฉฑเจ เจฎเฉเจ เจ
เจเจธเจฐ เจเจฎเจพเจเจก เจฒเจพเจเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเจพเจ, เจเจฟเจธ เจตเจฟเฉฑเจ SSH เจฆเฉเจเจฐเจพ เจธเจผเจพเจฎเจฒ เจนเฉ, เจเฉฑเจ ICMP เจธเจผเฉเฉฑเจฒ เจฆเจพ เจตเจฟเจเจพเจฐ เจชเจนเจฟเจฒเจพเจ เจฎเฉเจฐเฉ เจฆเจฟเจฎเจพเจ เจตเจฟเฉฑเจ เจเจเจเฅค เจ
เจคเฉ เจเฉฑเจ เจชเฉเจฐเจจ เจฌเฉเฉฑเจฒเจธเจผเฉเจฒเจก เจฌเจฟเฉฐเจเฉ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจจ เจฒเจ, เจฎเฉเจ เจเจธเจจเฉเฉฐ เจเฉฑเจ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ เจเฉฑเจ เจฒเฉเจจเจเจธ เจฎเฉเจกเฉเจเจฒ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจฒเจฟเจเจฃ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจนเฉ เจเจฟเจธเจฆเจพ เจฎเฉเจจเฉเฉฐ เจธเจฟเจฐเจซ เจเฉฑเจ เจฎเฉเจเจพ เจตเจฟเจเจพเจฐ เจนเฉเฅค เจ
เจเจฟเจนเจพ เจธเจผเฉเฉฑเจฒ เจชเฉเจฐเจเจฟเจฐเจฟเจเจตเจพเจ เจฆเฉ เจธเฉเจเฉ เจตเจฟเฉฑเจ เจฆเจฟเจเจพเจ เจจเจนเฉเจ เจฆเฉเจตเฉเจเจพ, เจคเฉเจธเฉเจ เจเจธเจจเฉเฉฐ เจเจฐเจจเจฒ เจตเจฟเฉฑเจ เจฒเฉเจก เจเจฐ เจธเจเจฆเฉ เจนเฉ เจ
เจคเฉ เจเจน เจซเจพเจเจฒ เจธเจฟเจธเจเจฎ 'เจคเฉ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพ, เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉเจฃเจจ เจตเจพเจฒเฉเจเจ เจชเฉเจฐเจเจพเจ เจฆเฉ เจธเฉเจเฉ เจตเจฟเฉฑเจ เจเฉเจ เจตเฉ เจธเจผเฉฑเจเฉ เจจเจนเฉเจ เจฆเจฟเจเจพเจ เจฆเฉเจตเฉเจเจพเฅค เจเจธ เจฆเฉเจเจ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ เจฆเฉ เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจ, เจเจน เจเฉฑเจ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจฆเฉ เจฐเฉเจเจเจฟเฉฑเจ เจนเฉ, เจชเจฐ เจฎเฉเจ เจเจธ เจตเจฟเฉฑเจ เจธเฉเจงเจพเจฐ เจเจฐเจจ เจฆเฉ เจเจฎเฉเจฆ เจเจฐเจฆเจพ เจนเจพเจ เจ
เจคเฉ เจเจธ เจจเฉเฉฐ เจเจเจฐเฉ เจเจชเจพเจ
เจฆเฉ เจธเจผเฉเฉฑเจฒ เจตเจเฉเจ เจตเจฐเจคเจฃ เจฆเฉ เจเจฎเฉเจฆ เจเจฐเจฆเจพ เจนเจพเจ เจเจฆเฉเจ SSH เจฆเฉเจเจฐเจพ เจฒเฉเจเจเจจ เจเจฐเจจ เจ
เจคเฉ เจเฉฑเจเฉ-เจเฉฑเจ เจเจฒเจพเจเจฃ เจฒเจ เจฒเฉเจก เจเจธเจค เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจนเฉ echo i > /proc/sysrq-trigger
เจฐเฉเจฌเฉเจ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ เจชเจนเฉเฉฐเจ เจจเฉเฉฐ เจฌเจนเจพเจฒ เจเจฐเจจ เจฒเจ.
เจ
เจธเฉเจ เจเฉฑเจ เจเฉเจเจธเจ เจเจกเฉเจเจฐ เจฒเฉเจเจฆเฉ เจนเจพเจ, เจชเจพเจเจฅเจจ เจ
เจคเฉ เจธเฉ, เจเฉเจเจฒ เจ
เจคเฉ เจตเจฟเฉฑเจ เจฌเฉเจจเจฟเจเจฆเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฟเฉฐเจ เจนเฉเจจเจฐ
เจเจพเจนเจ เจชเจพเจธเฉ
เจเจน เจฎเฉเจจเฉเฉฐ เจเจพเจชเจฆเจพ เจธเฉ เจเจฟ เจเจฒเจพเจเฉฐเจ เจฆเฉ เจนเจฟเฉฑเจธเฉ เจฒเจ เจฎเฉเจจเฉเฉฐ เจฒเจเจญเจ 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;
}
เจเฉ เจนเฉ เจฐเจฟเจนเจพ เจนเฉ:
- เจฎเฉเจจเฉเฉฐ เจตเจพเจงเฉ เจธเจฟเจฐเจฒเฉเจ เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจธเจผเจพเจฎเจฒ เจเจฐเจจเจพ เจชเจฟเจ, เจเจธ เจตเจพเจฐ IP เจ เจคเฉ ICMP เจธเจฟเจฐเจฒเฉเจเจพเจ เจจเฉเฉฐ เจนเฉเจฐเจพเจซเฉเจฐเฉ เจเจฐเจจ เจฒเจ.
- เจฎเฉเจ เจ
เจงเจฟเจเจคเจฎ เจฒเจพเจเจจ เจฆเฉ เจฒเฉฐเจฌเจพเจ เจธเฉเจ เจเจฐเจฆเจพ เจนเจพเจ:
#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 เจธเจฟเจฐเจฒเฉเจเจพเจ เจฆเฉ เจเจพเจเจ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ เจเฉ เจนเฉเจตเฉเจเจพ. C เจฌเจพเจฐเฉ เจฎเฉเจฐเจพ เจเฉฑเจเฉ-เจเฉฑเจ เจเจฟเจเจจ เจฎเฉเจจเฉเฉฐ เจฆเฉฑเจธเจฆเจพ เจนเฉ เจเจฟ เจฌเจฟเจจเจพเจ เจเจฟเจธเฉ เจตเจพเจงเฉ เจเจพเจเจ เจฆเฉ, เจเฉเจ เจญเจฟเจเจจเจ เจตเจพเจชเจฐเจจเจพ เจฒเจพเจเจผเจฎเฉ เจนเฉเฅค เจฎเฉเจจเฉเฉฐ เจเฉเจธเจผเฉ เจนเฉเจตเฉเจเฉ เจเฉเจเจฐ เจคเฉเจธเฉเจ เจฎเฉเจจเฉเฉฐ เจเจธ เจคเฉเจ เจฐเฉเจเจฆเฉ เจนเฉ!
- เจนเฉเจฃ เจเจฆเฉเจ เจชเฉเจเฉเจ เจธเจนเฉ เจเจฟเจธเจฎ เจฆเจพ เจนเฉ เจเจฟเจธเจฆเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจฒเฉเฉ เจนเฉ, เจคเฉเจธเฉเจ เจกเฉเจเจพ เจจเฉเฉฐ เจเจเจธเจเจฐเฉเจเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเฉฑเจ เจฌเจฟเจฒเจ-เจเจจ เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจฌเจฟเจจเจพเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจชเจนเจฟเจฒเจพเจ เจชเฉเจฒเฉเจก เจฆเฉ เจธเจผเฉเจฐเฉเจเจค เจฒเจ เจเฉฑเจ เจชเฉเจเจเฉฐเจเจฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ เจนเฉเจตเฉเจเจพเฅค เจเจน เจเฉฑเจ เจฅเจพเจ เจคเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจคเฉเจนเจพเจจเฉเฉฐ เจชเฉเจเจเฉฐเจเจฐ เจจเฉเฉฐ 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
เจ
เจคเฉ เจเจธ เจตเจฟเฉฑเจ เจฌเฉเจจเจคเฉ เจญเฉเจเฉ เจเจ เจฎเจฟเจคเฉ เจนเฉ, เจเจฟเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจคเฉเจธเฉเจ เจธเจญ เจเฉเจ เจ เฉเจ เจเฉเจคเจพ เจ
เจคเฉ เจฎเฉเจ เจธเจญ เจเฉเจ เจ เฉเจ เจเฉเจคเจพเฅค
เจธเจฟเฉฑเจเจพ
เจชเจฐเจฎเจพเจฃเฉ เจตเจฟเจเจพเจธ เจฆเฉ เจจเจพเจฒ เจฎเฉเจฐเจพ เจชเจนเจฟเจฒเจพ เจ
เจจเฉเจญเจต เจฎเฉเจฐเฉ เจเจฎเฉเจฆ เจจเจพเจฒเฉเจ เจฌเจนเฉเจค เจธเฉเจเจพ เจธเฉเฅค เจเฉฑเจฅเฉเจ เจคเฉฑเจ เจเจฟ เจธเฉ เจตเจฟเฉฑเจ เจตเจฟเจเจธเจค เจนเฉเจฃ เจฆเฉ เจคเจเจผเจฐเจฌเฉ เจคเฉเจ เจฌเจฟเจจเจพเจ, เจเฉฐเจชเจพเจเจฒเจฐ เจธเฉฐเจเฉเจคเจพเจ เจ
เจคเฉ เจเฉเจเจฒ เจจเจคเฉเจเจฟเจเจ 'เจคเฉ เจงเจฟเจเจจ เจเฉเจเจฆเจฐเจค เจเจฐเจฆเฉ เจนเฉเจ, เจฎเฉเจ เจเฉฑเจ เจเฉฐเจฎ เจเจฐเจจ เจตเจพเจฒเฉ เจฎเฉเจกเฉเจเจฒ เจจเฉเฉฐ เจฒเจฟเจเจฃ เจ
เจคเฉ เจเฉฑเจ เจเจฐเจจเจฒ เจนเฉเจเจฐ เจตเจพเจเจ เจฎเจนเจฟเจธเฉเจธ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจธเฉ, เจ
เจคเฉ เจเจธเฉ เจธเจฎเฉเจ เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจเจฟเจกเฉ. เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจฎเฉเจ เจเจฐเจจเจฒ เจจเจฟเจเจฌเฉเจเจผ เจเฉเจจเจฒ 'เจคเฉ เจเจฟเจ, เจเจฟเฉฑเจฅเฉ เจฎเฉเจจเฉเฉฐ เจตเจฐเจคเจฃ เจฒเจ เจเจฟเจนเจพ เจเจฟเจ เจธเฉ schedule_work()
เจเจพเจฒ เจเจฐเจจ เจฆเฉ เจฌเจเจพเจ call_usermodehelper()
เจเจชเจฃเฉ เจเจช เจจเฉเฉฐ เจนเฉเฉฑเจ เจฆเฉ เจ
เฉฐเจฆเจฐ เจ
เจคเฉ เจเจธ เจจเฉเฉฐ เจธเจผเจฐเจฎเจฟเฉฐเจฆเจพ เจเฉเจคเจพ, เจธเจนเฉ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจ เจเฉเจเจพเจฒเฉ เจฆเจพ เจธเจผเฉฑเจ. เจเฉเจก เจฆเฉเจเจ เจธเฉ เจฒเจพเจเจจเจพเจ เจจเฉ เจฎเฉเจฐเฉ เจเจพเจฒเฉ เจธเจฎเฉเจ เจตเจฟเฉฑเจ เจตเจฟเจเจพเจธ เจฆเฉ เจเฉฑเจ เจนเจซเจผเจคเฉ เจฆเจพ เจเจฐเจเจพ เจเฉเจคเจพ. เจเฉฑเจ เจธเจซเจฒ เจคเจเจฐเจฌเจพ เจเจฟเจธ เจจเฉ เจธเจฟเจธเจเจฎ เจฆเฉ เจตเจฟเจเจพเจธ เจฆเฉ เจญเจพเจฐเฉ เจเฉเฉฐเจเจฒเจคเจพ เจฌเจพเจฐเฉ เจฎเฉเจฐเฉ เจจเจฟเฉฑเจเฉ เจฎเจฟเฉฑเจฅ เจจเฉเฉฐ เจจเจธเจผเจ เจเจฐ เจฆเจฟเฉฑเจคเจพเฅค
เจเฉ เจเฉเจ เจเจฟเจฅเจฌ 'เจคเฉ เจเฉเจก เจธเจฎเฉเจเจฟเจ เจเจฐเจจ เจฒเจ เจธเจนเจฟเจฎเจค เจนเฉเฉฐเจฆเจพ เจนเฉ, เจคเจพเจ เจฎเฉเจ เจงเฉฐเจจเจตเจพเจฆเฉ เจนเฉเจตเจพเจเจเจพ. เจฎเฉเจจเฉเฉฐ เจชเฉเจฐเจพ เจฏเจเฉเจจ เจนเฉ เจเจฟ เจฎเฉเจ เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจฎเฉเจฐเจ เจเจฒเจคเฉเจเจ เจเฉเจคเฉเจเจ เจนเจจ, เจเจพเจธ เจเจฐเจเฉ เจเจฆเฉเจ เจธเจคเจฐ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเฉเฅค
เจธเจฐเฉเจค: www.habr.com