渗透测试面经整理
思路流程
信息收集
- 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
- 网站指纹识别(包括,cms,cdn,证书等),dns记录
- whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
- 子域名收集,旁站,C段等
- google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
- 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
- 传输协议,通用漏洞,exp,github源码等
漏洞挖掘
- 浏览网站,看看网站规模,功能,特点等
- 端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
- XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等
漏洞利用&权限提升
- mysql提权,serv-u提权,oracle提权
- windows 溢出提权
- linux脏牛,内核漏洞提权e
清除测试数据&输出报告
i 日志、测试数据的清理
ii 总结,输出渗透测试报告,附修复方案
复测
验证并发现是否有新漏洞,输出报告,归档
SQL注入防护
1、使用安全的API
2、对输入的特殊字符进行Escape转义处理
3、使用白名单来规范化输入验证方法
4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。
6、规范编码,字符集
为什么参数化查询可以防止sql注入
原理:
使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行
简单的说:
参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑
sql的报错注入原理
报错注入的使用场景一般是在页面无法显示数据库的信息,但是是有报错内容的,报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。
报错注入形式上一般是做两个嵌套的查询,里面的那个查询被称为子查询,执行顺序也是从子查询开始的,所以我们可以通过子查询查询我们想要的数据,然后在通过报错函数将我们查询到的数据带出,从而达到爆出想要查询的数据。
报错函数
MySQL提供了一个 updatexml() 函数,当第二个参数包含特殊符号时会报错,并将第二个参数的内容显示在报错信息中。updatexml() 函数的报错内容长度不能超过32个字符,我一般用MID() 函数从中提取字符
sql的布尔注入原理和用到的函数
SQL布尔注入是一种利用布尔逻辑漏洞的攻击方式,与常规的SQL注入攻击不同,它并不会直接注入恶意代码,而是利用查询语句中的布尔逻辑,通过不断猜测来获取敏感信息。
函数
LIKE
函数:该函数可以用于模糊匹配查询,通常与通配符一起使用。攻击者可以使用通配符来逐个猜测字符或字符串的值,以获取敏感信息。SUBSTRING
函数:该函数可以用于提取字符串的子串。攻击者可以使用该函数来提取密码的每个字符,从而逐个猜测密码的值。ASCII
函数:该函数可以将字符转换为其对应的ASCII码。攻击者可以使用该函数来比较密码的每个字符的ASCII码值,以猜测密码的值。LENGTH
函数:该函数可以获取字符串的长度。攻击者可以使用该函数来确定密码的长度,从而更快地猜测密码的值。
sqlmap常用的参数有哪些
1 | -v:输出信息的详细程度,默认为1 |
sqlmap中的–os-shell原理
SQLMap会通过注入SQL语句在目标服务器上执行一段特定的代码,该代码会在目标服务器上启动一个后门程序,该后门程序会监听SQLMap指定的端口号,并接受SQLMap发送的命令,并将命令的执行结果返回给SQLMap。
接下来,SQLMap就可以通过
--os-shell
参数启动一个交互式Shell,与目标服务器进行交互,并执行各种命令,从而实现对目标服务器的控制。
文件上传绕过方式
文件上传有哪些防护方式
- 文件类型检查:对用户上传的文件进行类型检查,确保只允许上传合法的文件类型。可以通过检查文件扩展名或使用文件魔术数字(Magic Number)进行验证。
- 文件内容验证:除了检查文件类型外,还可以对文件内容进行验证。例如,对于图像文件,可以检查文件的头部和结尾是否符合图像文件的格式规范。
- 文件大小限制:限制上传文件的最大大小,以防止恶意用户上传过大的文件导致服务器资源耗尽。
- 安全的文件存储位置:将用户上传的文件存储在服务器的安全目录中,不要将其存储在可以直接执行的目录下。确保上传的文件无法通过浏览器直接访问,设置适当的访问权限。
- 输入数据验证和过滤:在接收用户上传文件的过程中,对用户输入的数据进行验证和过滤,以防止恶意代码或特殊字符的注入。
- 文件名重命名:为上传的文件生成一个随机的、唯一的文件名,以防止恶意用户上传具有恶意目的的文件名。
- 安全的文件处理和解析:对上传的文件进行安全的处理和解析,例如,对图像文件进行缩放、剪裁等操作时,确保使用安全的库和方法,以防止恶意代码的执行。
- 安全的服务器配置:确保服务器的安全配置,例如禁用不必要的文件上传功能、限制服务器的资源使用等。
- 定期更新和修补漏洞:及时更新和修补使用的上传组件或框架,以防止已知漏洞的利用。
- 安全意识培训:向开发人员和用户提供安全意识培训,使他们了解文件上传漏洞的潜在威胁,并学习如何避免和处理这些威胁。
xss的几种类型及漏洞原理
XSS漏洞的原理是,攻击者利用Web应用程序没有对用户输入进行足够的验证和过滤,从而导致恶意脚本被注入到Web页面中。攻击者可以利用恶意脚本窃取用户的敏感信息、篡改页面内容、劫持用户会话等。
- 反射型XSS:攻击者构造恶意链接或提交恶意表单,当受害者访问该链接或提交表单时,恶意代码会被注入到响应的HTML页面中,从而攻击受害者。
- 存储型XSS:攻击者将恶意脚本上传到Web应用程序的服务器端,并将它们保存到数据库中。当用户访问包含恶意脚本的页面时,恶意脚本会被从数据库中取出并注入到页面中,从而攻击受害者。
- 基于DOM的XSS:攻击者通过恶意脚本直接修改浏览器中的DOM,从而实现攻击目的。
csrf、xss和ssrf之间的区别
- CSRF(跨站请求伪造):攻击者通过诱骗用户访问恶意网站或点击恶意链接等方式,向目标网站发送伪造的请求,从而执行非授权的操作。攻击者通过利用已登录用户的Cookie,来欺骗服务器相信这个请求是受害者发送的,从而完成攻击。防范CSRF的措施包括加入Token验证、Referer验证等。
- XSS(跨站脚本攻击):攻击者通过在Web页面中注入恶意脚本,欺骗用户点击链接或提交表单,从而执行攻击。恶意脚本可以窃取用户的敏感信息,篡改页面内容,劫持用户会话等。防范XSS的措施包括输入验证、输出编码等。
- SSRF(服务器端请求伪造):攻击者通过篡改Web应用程序对外部资源的访问方式,使Web应用程序向攻击者指定的服务器发送请求,从而攻击目标服务器或本地网络。攻击者可以利用SSRF来窃取敏感信息,发起网络攻击等。防范SSRF的措施包括对输入进行严格限制,禁止访问内部资源等。
windows中查看进程的命令
- tasklist命令:在命令行中输入“tasklist”命令,可以列出当前所有运行的进程信息,包括进程ID、名称、状态、内存使用等信息。该命令还支持其他参数,如“tasklist /svc”可以列出每个进程对应的服务信息。
- netstat -aon:列出当前正在运行的网络连接和进程信息
- “-a”参数表示显示所有的网络连接,包括正在监听的连接和建立的连接。
- “-o”参数表示显示与每个网络连接相关联的进程ID。
- “-n”参数表示以数字形式显示网络地址和端口号,而不是解析为域名和服务名称。
windows中结束进程的命令
taskkill命令:在命令提示符中输入”taskkill /pid [进程ID]”命令可以结束指定进程ID的进程。例如,如果要结束进程ID为1234的进程,可以使用命令”taskkill /pid 1234”。该命令还支持其他参数,如”/f”参数表示强制结束进程。
tskill命令:在命令提示符中输入”tskill [进程名称]”命令可以结束指定名称的进程。例如,如果要结束名称为chrome的进程,可以使用命令”tskill chrome”。该命令也支持其他参数,如”/a”参数表示结束所有同名的进程。
linux常用命令
常见的端口和对应的服务
1 | - 20/21:FTP服务 |
OSI七层模型有哪些
如何处理信息收集时子域名爆破泛解析的问题
子域名泛解析的成因
在子域名解析中,每个子域名都会解析为一个特定的IP地址。只有被设置解析,用户才能正常进行访问。一旦用户输入错误的子域名,就会造成无法访问。
在网站运营中,域名持有者为了避免因为错误输入,而造成用户流失,就会使用泛域名解析。
子域名泛解析是一种DNS配置设置,它允许将所有子域名都解析到同一个IP地址上。这意味着无论用户输入哪个子域名,DNS服务器都会返回相同的IP地址。
但是信息收集中,这会造成请求的所有子域名都能访问的假象,从而收集到一堆无效的子域名。
子域名爆破中解决泛解析的方式
目前最常见的解决方式是IP黑名单的方式,首先访问一个随机的并不存在的域,通过返回的结果判断是否存在泛解析,确定存在泛解析后,(脚本实现)不断的生成随机域名并发送请求,将每次返回的IP和TTL记录下来,直到大部分的IP出现次数都大于两次,则IP黑名单收集完成。而后使用域名字典进行爆破,爆破过程中根据IP黑名单进行过滤,同时比较TTL,在泛解析记录中TTL是相同的,如果TTL不相同,则不是泛解析记录。
mysql两种提权方式
udf提权,mof提权
Mysql_UDF提权
要求:
1.目标系统是Windows(Win2000,XP,Win2003);
2.拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数
3.有root账号密码
导出udf:
MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的lib\plugin文件夹下才能创建自定义函数
可以再mysql里输入select @@basedir
show variables like ‘%plugins%’
寻找mysql安装路径
提权:
使用SQL语句创建功能函数。语法:Create Function 函数名(函数名只能为下面列表中的其中之一)returns string soname ‘导出的DLL路径’;
1 | create function cmdshell returns string soname ‘udf.dll’ |
该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录即可。
Mysql mof提权
1 | #pragma namespace("\\\\.\\root\\subscription") |
其中的第18行的命令,上传前请自己更改。
2、执行load_file及into dumpfile把文件导出到正确的位置即可。
1 | select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov' |
执行成功后,即可添加一个普通用户,然后你可以更改命令,再上传导出执行把用户提升到管理员权限,然后3389连接之就ok了。