网安面试常见知识点

1、常见的漏洞及其利用方式

SQL注入

对于客户端输入的内容没有进行严格的校验,而导致恶意的sql语句被执行,而产生的漏洞。
常见的漏洞类型有报错注入,布尔盲注,时间盲注,联合查询的注入。

报错注入

无法判断显示位,但是页面会根据我们输入错误的SQL语法而报错,所以采用报错注入来解决这个问题。简单的说就是利用函数报错使其输出错误结果来获取数据库的相关信息。

常见的报错函数

updatexml() 是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue() 是mysql对xml文档数据进行查询的xpath函数
floor() mysql中用来取整的函数
exp() 此函数返回e(自然对数的底)指数X的幂值

updatexml函数

updatexml()函数的作用就是改变(查找并替换)xml文档中符合条件的节点的值
语法:updatexml(xml_document,XPthstring,new_value)
第一个参数是字符串string(XML文档对象的名称)
第二个参数是指定字符串中的一个位置(Xpath格式的字符串)
第三个参数是将要替换成什么,string格式
Xpath定位必须是有效的,否则则会发生错误。我们就能利用这个特性爆出我们想要的数据
payload:kobe ’ and updatexml(1,concat(0x7e,version()),1)#
让全部的校验失败,就是使用concat在需要的数据前面加上一个XPATH校验,可以让它失败就可以了。0x7e用来校验,version()是我们想要的数据,concat用来连接它们两个。
使用0x7e纯粹是觉得专业,很有意思。
Concat在mysql中就是起到一个连接作用。
复杂的语句:kobe’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘pikachu’)),0)#这个可以获取表名

extractvalue函数

extractvalue()函数的作用是从目标xml中返回包含所查询值的字符串
extractvalue (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为doc
第二个参数:XPath_string(Xpath格式的字符串),Xpath定位必须是有效的,否则会发生错误
http://127.0.0.1/sqli-labs/Less-1/?id=1’ and extractvalue(1,concat(‘~’,database()))–+
这个原理和updatexml函数的一样,只不过少了一个参数。

Floor函数

Floor()是mysql的一个取整函数
floor()函数的使用局限:mysql 5.0及以上版本

Exp函数

EXP(x) 返回值e(自然对数的底)的x次方
and exp(~(select * from (select user () ) a) );

时间盲注

所谓盲注,就是在服务器没有错误回显的时候完成的注入攻击。
什么是时间注入,就是通告web页面返回数据的时间差来判断注入语句是否正确。
Length()返回字符串长度
Substr()截取字符串长度
Ascii()返回字符的的ascii码
Sleep()将程序挂起一段时间
If(exp1、exp2、exp3)判断语句,第一个语句正确就执行第二个,否则执行第三个
时间型盲注的payload:?id=1 and if(length(database())>1,sleep(5),1)

布尔盲注

布尔型盲注应用于无数据回显,且web页面无报错信息的情况。
布尔盲注的web页面只有两种回显结果,正确的页面以及错误的页面,且错误的页面没有提示语句,正常的页面也不能输出数据。
根据返回页面的正确与否,通过判断对应字符的ascii码值是否对应,来判断字符串具体的数值。
注入语句后面的–的意思:
起到一个注释后面语句的作用,防止对前面的语句产生干扰。
(首先用substr截取字符串,每次截取一个,用ascii()函数转化为ascii码,进行判断,如果不符合,返回页面错误,最后根据得到的ascii码来判断它的值)

联合注入的过程

1、判断是否为注入点
老方法:and 1=1 页面正常
and 1=2 页面错误
可能存在注入点,尽量选择有经验舒服快捷的方法
2、判断是数字型还是字符型
1—数字型测试:当输入的参数为整型时,如果存在漏洞,可以认为是数字型注入
1)加单引号,?id=3’,这时候sql语句出错,就会有异常
2)加上 and 1=1 ?id=3 and 1=1,语句正常,与原始页面无差异。
3)加上 and 1=2 ?Id=3 and 1=2 语句可以执行,但无法查询结果,与原始页面有差异
满足以上三点,就可以判断是存在数字型注入
2—字符型测试:当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。
例如数字型语句:select * from table where id =3
则字符型如下:select * from table where name=’admin’
因此,在构造payload时通过闭合单引号可以成功执行语句:
3、判断列数
注入语句 order by
id=1’ order by 3 --+
如果number小于或等于实际数量,那么页面正常
4、判断显示位
使用union联合查询 selecet 1,2,。。。。。n(n取决于列数)
首先使用order by 判断出列数后,就可以用union select 1,…n进行查询了。
5、信息收集
获取数据库名、表名、字段名、字段中的数据
1)获取数据库名:group_concat()一次性显示
Id=-1‘ union Select group_concat(schema_name) from information_schema.schemata
显示当前数据库:database()
2)获取表名
id=-1’ union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’),3
3)获取列名

id=-1’ union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’),3
4)获列名:
id=-1’ union select 1,(select concat_ws(char(32,58,32),username,password) from users limit 1,1),3
用limit控制,一行一行得到数据

SQL注入修复意见

加waf/可以有效缓解,可以作为/临时措施,根除的话/需要修改源码,一般需要/严格对输入参数/进行SQL语句过滤/,或者/使用预编译(就是/把要查询的语句/先封装编译,后边/输入的参数/都会被/作为字符串输入)

SQL注入漏洞挖掘

SQL注入漏洞一般出现在有数据交互的地方,比如登录页面、数据查询页面、新闻页面、数据新增页面等

SQL注入绕过方式

1、使用大小写混合;
2、使用内联注释的方式绕过,就是用/*!12345 语句 */
3、使用等价替换的方式,比如用like替换等号
4、使用16进制编码表示字符串,绕过对库名的过滤

SQL预处理

客户端发送一条sql语句到mysql服务器,mysql服务器会进行编译处理,但是有时候我们会重复执行一条sql语句,这时使服务器即时编译处理就会造成很大的资源浪费,而且耗费时间,特别是大量数据时,所以sql预处理可以很好的解决这个问题。
预编译语句的优势在于,一次编译,多次运行,省去了服务器解析优化的过程,此外预编译语句能防止sql注入。

文件上传

因为/对上传文件校验/不够完善,而导致的/可执行文件/被上传到服务器,从而产生的漏洞。

文件上传漏洞修复意见

可以在服务端/对文件后缀/使用黑白名单结合的/过滤方式,并且/对文件内容进行校验,上传之后/对文件名/进行重命名操作,也可以使用/微服务/保存上传上来的文件。

文件上传绕过方式

1.黑名单
a.通过一些特殊后缀 .php5 、.phtml、.asa、.jap等
b.上传.htacess 点h t 额可赛思
c.大小写pHp
d.在数据包中 后文件缀名前加空格
e.后缀名前加.
f.加上::$DATA
g.未循环验证,可以使用x.php…类似的方法

2.白名单
(一般需要配合其他漏洞一起利用)
a.%00截断
在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。
%00适用于php>5.3.42,且服务器中的php.ini中的magic_quotes_gpc = Off,才可以进行%00截断
(magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误)

b.图片马
所谓图片马,就是将一句话木马与图片相结合,使得图片中包含代码。
使用语句 生成图片马。
copy 图片.jpg/b + 木马.php/a 木马.jpg
/b 表示以二进制方式打开
/a 表示以ASCII方式打
c.条件竞争
(先进行上传,后进行判断。利用时间差进行webshell上传)
在服务器删除我们上传的非法文件之前,访问这个文件,从而生成另一个木马文件,用这个木马文件getshell

fputs(fopen('shell.php','w'),'')  #注意单双引号的闭合

?>

#只要执行,就是生成一个shell.php文件,shell.php的内容为

文件包含漏洞

文件包含漏洞原理
原理:文件包含本身是正常功能,如果客户端可以干预被包含的文件名,导致包含了恶意文件,就会产生漏洞

文件包含的相关函数

1.include():使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行。
2.inclue_once():功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。
3.require():使用此函数,只要程序执行,立即调用此函数包含文件,发生错误时,会输出错误信息并立即终止程序。
4.require_once():功能和前者一样,区别在于当重复调用同一文件时,程序只调用一次。

文件包含利用

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。
1.读取敏感文件 file:// 伪协议
2.远程包含shell
3.图片上传并包含图片shell
4.使用伪协议 php://input 可以读取post传参的数据,然后都当成PHP代码执行
5.包含日志文件GetShell
6.截断包含 绕过
本地文件包含
仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
远程文件包含:
能够通过 url 地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。
需要设置 PHPstudy 的参数开关设置
allow_url_include=on
magic_quotes_gpc=off

文件包含修复意见

修复:
1、设置PHP参数allow_url_include=off allow_url_fopen=off
2、对要包含的路径进行严格校验
防御:尽量不要执行外部命令、使用自定义函数或函数库来替代外部命令的功能。

任意文件删除

漏洞的成因主要就是删除的目录路径是我们可控的,且并没有对这个路径进行任何的限制。
delbackdb函数,发现filename在获取文件名的时候,只经过一个函数去除文件名两侧的空格,没有做过滤。之后还有一个自制的删除函数delone。
常见函数:readfile()、file_get_contents()、fopen()、$filename
防御:
1.正则严格判断用户输入参数的格式
2.检查使用者输入的文件名是否有“…”的目录阶层字符
3.在php.ini文件中设置open_basedir来限定文件访问的范围

XSS(跨站脚本攻击)

XSS原理
原理: 中文名是跨站脚本攻击,通过在客户端和服务器的访问过程中插入恶意脚本(一般我们使用js代码),实现对用户浏览器的攻击
存储型、dom型、反射性

非持久性(反射型)
这种攻击方式往往具有一次性,攻击者通过电子邮件等方式将包含xss代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有xss代码的数据发送给目标用户的浏览器,浏览器解析这段带有xss代码的恶意脚本后,就会触发xss漏洞。

持久性(存储型)
持久性体现在xss代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写进数据库中。

攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中 。 当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行 。所以需要浏览器从服务器载入恶意的xss代码,才能真正触发xss。

DOM型
中文为文档对象模型。
其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这也就使得DOM型XSS比较难以检测。
区别:
1、反射型XSS攻击将没有多大作为,而存储型XSS则不同,由于它注入在一些我们信任的页面,因此无论我们多么小心,都难免会受到攻击。
2、存储型XSS的攻击代码会存储在服务器上,一般是存储在数据库;
3、反射型和DOM型攻击流程相同,但DOM型攻击代码可以不通过服务器,也就是说大部分服务器端的过滤方式对DOM型XSS都不起作用。
4、DOM型xss和别的xss最大的区别就是它不经过服务器。DOM使用burpsuite抓包的话也是抓不到任何东西,因为没有产生与服务器的交互,仅仅通过前端js渲染来改变最终的网页代码
XSS修复建议
1.对输入的内容进行过滤,比如过滤掉<>
2.对将要输出的内容进行HTML编码
3.对重要的cookie设置httpOnly, 防止客户端通过document.cookie读取 cookie
XSS与CSRF与SSRF漏洞区别
XSS是跨站脚本攻击,攻击的目标是客户端,因为是脚本攻击,所以JS脚本写什么,客户端就会做什么,比如窃取cookie利用方式比较灵活

CSRF是跨站请求伪造,攻击的目标也是客户端,利用时只能窃用cookie,只能利用存在csrf漏洞的功能点,局限性比XSS大

SSRF是服务端请求伪造,攻击的是服务端,危害较大,可以造成内网穿透、命令执行、内网信息泄露。

CSRF(跨站请求伪造)

出现的原因
CSRF漏洞是因为web应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单token或者http请求头中的referer值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。

一次CSRF攻击的过程中,受害者需要依次完成两个步骤 :
1.登录受信任网站A,并在本地生成Cookie 。
2.在A的cookie存活期内,访问危险网站B。
CSRF原理
原理:中文名跨站请求伪造,在用户保持登录状态的情况下,攻击者构造一个站点,诱导用户访问,用户访问后被恶意站点控制跳转到存在CSRF漏洞的页面,假如这个页面是密码修改页面,在这个过程中,保持登录状态的cookie就会被窃用,造成密码修改。
CSRF漏洞修复建议
1、在重要的功能点上,增加访问来源的验证,比如验证referer头
2、增加验证码验证,增加token验证

SSRF(服务器端请求伪造)

SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。
SSRF漏洞原理
原理:本身是资源的引用,如果没有进行校验,会导致内网不想让别人访问的资源或服务被人探测甚至攻击到的一个漏洞。

file协议:在有回显的情况下,利用file协议可以读取任意文件的内容

dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等
SSRF漏洞修复建议
修复:
1.地址做白名单处理
2.域名识别IP 过滤内部IP
3.校验返回的内容,对比一下是否与预期的内容一致

XXE漏洞(XML外部实体注入)

XXE漏洞原理
原理: 又叫XML外部实体注入,由于过滤不严格导致的,用户传入的恶意XML文档被解析导致的漏洞
XXE漏洞修复建议
修复建议:
1、对用户提交的XML数据进行过滤;
2、设置PHP参数,禁用外部实体写入;
XXE危害
当允许引用外部实体时,通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。
XXE触发点
xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件

反序列化漏洞

反序列化漏洞原理
原理:序列化是指Java对象转化为二进制文件的过程,反序列化指的是这个文件再转化为Java对象的过程,本身是个正常过程,但如果被转化的这个文件是个恶意的,转化后的对象也是会是恶意的,由此可造成命令执行等等威胁。
反序列化漏洞修复建议
一般我们遇到的反序列化漏洞,基本都是使用了具有反序列化漏洞的组件或者类造成的,一般我们打补丁或者升级到最新版本就可以防御。

Shiro反序列化漏洞

这个我只复现过cve-2016-4437
Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
Shiro < 1.2.4版本会存在此漏洞,挖掘的时候删除请求包中的rememberMe参数,返回包中包含rememberMe=deleteMe字段。说明使用了shiro组件,可以尝试此漏洞。
如果返回包无此字段,可以通过在发送数据包的cookie中增加字段:****rememberMe=,然后查看返回数据包中是否存在关键字
此漏洞有两个版本利用方式,
SHIRO-550:
不需要提供秘钥,使用默认秘钥就可以利用
SHIRO-721反序列化漏洞
先爆破秘钥,成功后可以进一步利用

Fastjson反序列化漏洞

如何判断是不是fastjson
1.POST请求
2.尝试构造fastjson数据包的错误格式并发送,例如:
{
“b”:

返回包后:

Fastjson提供了反序列化功能,允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名,由此造成反序列化漏洞;
漏洞挖掘方式:如果请求包中出现http头Accept:application/json,怀疑存在fastjson组件,构造报错,返回包中出现fastjson时,确认使用了fastjson组件,可以尝试此漏洞
Fastjson从1.2.24到1.2.67多个版本存在此漏洞,如果没有回显版本,可以将以下payload,挨个替换到请求内容,尝试是哪个版本的漏洞。
{“@type”:“java.InetSocketAddress”{“address”:,“val”:“aaa.dnslog”}}

{“@type”:“java.Inet4Address”,“val”:“aaa.dnslog”}

{“@type”:“java.Inet6Address”,“val”:“aaa.dnslog”}

{“@type”:“com.alibaba.fastjson.JSONObject”,{“@type”:“java.URL”, “val”:“http://aaa.dnslog”}}“”}

Set[{“@type”:“java.URL”,“val”:“http://aaa.dnslog”}]

Set[{“@type”:“java.URL”,“val”:“http://aaa.dnslog”}

{{“@type”:“java.URL”,“val”:“http://aaa.dnslog”}:0

有反序列化漏洞的中间件Tomcat、Jboss 、weblogic。

中间件漏洞

解析漏洞

Apache文件名解析
从后往前解析,如果解析文件a.php.abc,先解析abc,Apache发现不认识,就会往前,解析PHP,最终文件会以PHP方式解析

IIS解析漏洞

1、目录解析:IIS从前往后解析,解析a.asp/a.jpg文件时,会先发现asp后缀,以为文件格式为asp,按照asp的方式解析
2、文件名解析:IIS从前往后解析,解析a.asp;.jpg文件时,会先发现asp后缀,以为文件格式为asp,按照asp的方式解析

Nginx畸形文件名解析

解析文件a.jpg文件时,访问a.jpg/.php,查找文件内容时,.php不是完整文件名,因此从后往前找到a.jpg文件,确认文件类型时,nginx关注的是后缀,.php有完整的后缀,所以按照php去解析,因此a.jpg文件就会被解析成php

Weblogic漏洞

发现端口7001则存在weblogic
未授权访问、反序列化、ssrf漏洞、T3协议反序列化等
RCE为两种漏洞的缩写,分别是"远程命令/代码执行",攻击者可以远程命令注入系统命令或者代码,从而拿下目标服务器。
CVE-2017-10271------XMLDecoder 反序列化漏洞
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
Cve-2018-2628 ----反序列化命令执行漏洞
T3协议在开放WebLogic控制台端口的应用上默认开启, 攻击者可以通过T3协议发送恶意的的序列化数据,,进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击,可导致未授权的用户在远程服务器执行任意命令。
Cve-2018-2894-----任意文件上传漏洞
Weblogic管理未授权的两个页面存在上传漏洞,可直接获取权限。两个页面分别为/ws_utc/begin.do,/ws_utc/config.do。
利用该漏洞,可以上传任意jsp文件,进而获取服务器权限
Cve-2019-2725----反序列化远程代码执行漏洞
Weblogic反序列化远程代码执行漏洞。由于在反序列化处理输入信息的过程中存在缺陷,未经授权的攻击者可以发送特意构造的恶意HTTP请求,利用该漏洞获取服务器权限,实现远程代码执行。
Cve-2020-14882 Cve-2020-14883-----管理控制台未授权远程命令执行漏洞
CVE-2020-14882 允许远程用户绕过管理员控制台组件中的身份验证,而 CVE-2020-14883 允许经过身份验证的用户在管理员控制台组件上执行任何命令。使用这两个漏洞的连锁,未经身份验证的远程攻击者可以通过 HTTP 在 Oracle WebLogic 服务器上执行任意命令并完全控制主机。
Cve-2021-2109 --weblogic LDAP 远程代码执行漏洞
该漏洞为Weblogic的远程代码执行漏洞。漏洞主要由JNDI注入,导致攻击者可构造恶意请求,执行任意代码,从而控制服务器。JDK 6u201、7u191、8u182、11.0.1版本或以上不受CVE-2021-2109漏洞的影响。
JNDI是一组在Java应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。
漏洞复现:在vulfocus靶场环境中
当时是跟着wireup写的,之后去访问x.x.x.x:7001/console,可以访问成功就表示环境搭建成功了。

漏洞复现:
下载工具LDAP工具,需要java环境。
之后抓包,payload后面加poc。在请求包头部里面加cmd:id(命令),

未授权漏洞

MongoDB 未授权访问漏洞、Redis 未授权访问漏洞、JBOSS 未授权访问漏洞、VNC 未授权访问漏洞、Rsync 未授权访问漏洞、weblogic未授权漏洞

你可能感兴趣的:(android)