Nws zoo li kuv tias rau tus neeg siv khoom kuv yuav tau sau ib tsab ntawv nrog txog 80 kab, tab sis muaj cov neeg siab zoo uas ua rau kuv tag nrho cov hauj lwm. Cov cai tau dhau los ua qhov yooj yim npaj txhij txog, haum rau 10 kab tseem ceeb:
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()
Tsab ntawv siv ob qhov kev sib cav, qhov chaw nyob thiab them nyiaj. Ua ntej xa, lub payload yog ua ntej los ntawm tus yuam sij run:, peb yuav xav tau nws kom tsis suav cov pob khoom nrog random payloads.
Lub kernel xav tau cov cai rau cov pob khoom siv tes ua, yog li tsab ntawv yuav tsum tau khiav ua tus superuser. Tsis txhob hnov ββββqab muab kev tso cai ua tiav thiab nruab scapy nws tus kheej. Debian muaj ib pob hu ua python3-scapy. Tam sim no koj tuaj yeem tshawb xyuas seb nws ua haujlwm li cas.
Khiav thiab tawm qhov hais kom ua 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!
Qhov no yog qhov zoo li hauv sniffer 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)
Ob lub header cov ntaub ntawv raug rub rau hauv los tswj cov module nws tus kheej thiab netfilter.
Txhua qhov kev ua haujlwm dhau los ntawm netfilter, koj tuaj yeem teeb tsa hooks hauv nws. Ua li no, koj yuav tsum tshaj tawm cov qauv uas tus nuv yuav raug teeb tsa. Qhov tseem ceeb tshaj plaws yog txhawm rau txheeb xyuas cov haujlwm uas yuav raug ua raws li tus nuv: nfho.hook = icmp_cmd_executor; Kuv yuav tau mus rau qhov ua nws tus kheej tom qab.
Tom qab ntawd kuv teem sijhawm ua haujlwm rau pob: NF_INET_PRE_ROUTING qhia kom ua cov pob thaum nws thawj zaug tshwm nyob rau hauv lub ntsiav. Yuav siv tau NF_INET_POST_ROUTING los ua cov pob ntawv thaum nws tawm hauv lub kernel.
Kuv teeb lub lim rau IPv4: nfho.pf = PF_INET;.
Kuv muab kuv tus nuv qhov tseem ceeb tshaj plaws: nfho.priority = NF_IP_PRI_FIRST;
Thiab kuv sau npe cov ntaub ntawv qauv raws li qhov tseeb nuv: nf_register_net_hook(&init_net, &nfho);
Qhov kawg muaj nuj nqi tshem tawm tus nuv.
Daim ntawv tso cai qhia meej meej kom tus neeg sau tsis yws.
Zog module_init() ΠΈ module_exit() teeb tsa lwm txoj haujlwm los pib thiab xaus lub module.
Retrieving lub payload
Tam sim no peb yuav tsum tau rho tawm lub payload, qhov no tau los ua txoj haujlwm nyuaj tshaj plaws. Lub kernel tsis muaj cov haujlwm ua haujlwm rau kev ua haujlwm nrog kev them nyiaj; koj tsuas tuaj yeem txheeb xyuas cov ntsiab lus ntawm qib siab dua.
Teem cov lus sib cav rau ib qho array ntawm cov hlua argv[]. Kuv mam li xav tias txhua tus paub tias cov kev pab cuam tau ua tiav li no, thiab tsis yog ib txoj kab txuas ntxiv nrog qhov chaw.
Teem ib puag ncig hloov pauv. Kuv tso tsuas yog PATH nrog qhov tsawg kawg nkaus ntawm txoj hauv kev, vam tias lawv txhua tus twb tau ua ke lawm /bin Ρ /usr/bin ΠΈ /sbin Ρ /usr/sbin. Lwm txoj hauv kev tsis tshua muaj teeb meem hauv kev xyaum.
Ua tiav, cia peb ua! Kernel muaj nuj nqi call_usermodehelper() lees txais kev nkag. txoj kev mus rau binary, array ntawm kev sib cav, array ntawm ib puag ncig hloov pauv. Ntawm no kuv kuj xav tias txhua leej txhua tus nkag siab lub ntsiab lus ntawm kev hla txoj kev mus rau cov ntaub ntawv executable raws li kev sib cav sib cais, tab sis koj tuaj yeem nug. Qhov kev sib cav zaum kawg qhia seb puas yuav tos kom tiav (UMH_WAIT_PROC), process start (UMH_WAIT_EXEC) los tsis tos (UMH_NO_WAIT). Puas muaj ib co ntxiv UMH_KILLABLE, Kuv tsis tau saib mus rau hauv nws.
Sib dhos
Kev sib dhos ntawm kernel modules yog ua los ntawm kernel make-framework. Hu make nyob rau hauv ib tug tshwj xeeb directory khi rau lub kernel version (txhais tau ntawm no: KERNELDIR:=/lib/modules/$(shell uname -r)/build), thiab qhov chaw ntawm lub module raug xa mus rau qhov sib txawv M hauv cov lus sib cav. Lub icmpshell.ko thiab lub hom phiaj huv si siv lub moj khaum no nkaus. IN obj-m qhia txog tej ntaub ntawv uas yuav hloov mus rau hauv ib lub module. Syntax uas remakes main.o Π² icmpshell.o (icmpshell-objs = main.o) tsis zoo heev rau kuv, tab sis yog li ntawd.
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
Peb sau: make. Chaw thau khoom: insmod icmpshell.ko. Ua tiav, koj tuaj yeem tshawb xyuas: sudo ./send.py 45.11.26.232 "date > /tmp/test". Yog tias koj muaj cov ntaub ntawv ntawm koj lub tshuab /tmp/test thiab nws muaj hnub uas qhov kev thov raug xa mus, uas txhais tau tias koj tau ua txhua yam zoo thiab kuv tau ua txhua yam zoo.
xaus
Kuv thawj qhov kev paub nrog kev txhim kho nuclear tau yooj yim dua li qhov kuv xav tau. Txawm hais tias tsis muaj kev paub dhau los hauv C, tsom mus rau cov lus qhia muab sau ua ke thiab Google cov txiaj ntsig, Kuv tuaj yeem sau cov haujlwm ua haujlwm thiab xav tias zoo li cov neeg nyiag nkas kernel, thiab tib lub sijhawm sau ntawv kiddie. Tsis tas li ntawd, kuv tau mus rau Kernel Newbies channel, uas kuv tau hais kom siv schedule_work() tsis yog hu call_usermodehelper() nyob rau hauv tus nuv nws tus kheej thiab txaj muag rau nws, rightly doubting ib tug kws txuj ci dag. Ib puas kab ntawm cov lej raug nqi rau kuv txog ib lub lim tiam ntawm kev txhim kho hauv kuv lub sijhawm dawb. Ib qho kev vam meej uas rhuav tshem kuv tus kheej cov dab neeg hais txog qhov nyuaj ntawm kev txhim kho lub cev.
Yog tias ib tus neeg pom zoo ua qhov kev tshuaj xyuas ntawm Github, kuv yuav ua tsaug. Kuv paub tseeb tias kuv tau ua yuam kev ntau heev, tshwj xeeb tshaj yog thaum ua haujlwm nrog cov hlua.