web安全面试题汇总(一)
1.如何检测越权漏洞和检测方法
分类
越权漏洞一般分为横向越权与垂直越权两种
容易出现的地方
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方
检测方法:
横向越权:一般在网站上找越权漏洞是注册两个账号,修改一个账号并抓包,之后将数据包中的用户名改为另外一个的用户名,之后发包,之后如果另外一个账号的信息确实被修改的话,那么就存在横向越权漏洞
垂直越权:选取两个权限不同的账户,如管理员与审计员。分别使用管理员去访问审计员的特有菜单,审计员去访问管理员的菜单,若访问成功则存在纵向越权。测试时建议可使用burp插件authz进行全覆盖越权测试。
解决方法:
系统应当做好用户权限和数据权限的设计实现,对用户身份进行严格校验
2.sql注入
原理
在页面中有数据交互的地方,攻击者构造sql语句,使web服务器执行恶意命令访问数据库。
SQL注入漏洞满足的两个条件:
- 参数用户可以控制
- 参数可以带入数据库查询
构造语句是数据库报错,根据报错判断是否存在SQL注入
sql注入类型
(1)按注入点区分
①数字型注入
数字型注入主要存在于网站的url中有?id=处,如:http://xxx.com/index.php?id=1 通过改变id=的数值来判断是否有注入点,一般常见测试手段是令id等于一个不常见的大数,通过页面是否变化来判断是否存在注入点。
②字符型注入
字符型注入常见于用户登录页面或页面url中有?username=aaa 或者?password=aaa 如:http://xxx.com/index.php?username=aaa&password=bbb,对于字符型注入,常见的手段为通过闭合符和注释符的配合,绕过用户名和密码,直接获取数据库里的账号信息。前文http://xxx.com/index.php?username=aaa&password=bbb的sql语句为select * from 表 where username=‘aaa‘ and password=‘bbb‘,而进行字符型注入时,可将url修改成,http://xxx.com/index.php?username=aaa ’ and 1=1’** **–+****&password=bbb,此时通过 ’ 的闭合和–+的注释,生产的sql语句为 select * from 表 where username=‘aaa’ and 1=1 ’ 由于1=1为永真,数据库就可能返回相关信息。
③搜索型注入
搜索型相比于数字型和字符型而言,较为特殊点,主要是进行搜索时网站没过滤搜索关键字,常见于url中的 “keyword=” 。生成的 SQL 语句:select * from 表 where 字段 like ‘%关键字%’ ,注入时,可以构造sql注入语句:select * from 表名 where 字段 like ‘%关键字%’ and ‘%1%’=‘%1%’,进行注入。
(2)按提交方式区分
访问网站时,浏览器只是一个传输和接收数据的工具,那么就需要将用户的操作生成数据包提交到服务器中。
①GET 注入
按提交方式区分的话,GET注入是最简单的注入,不需要额外的工具。GET提交数据的方式的特点是将用户操作生成的语句直接显示在url上,常见于不需要保密传输的页面。GET 注入点的位置一般在参数部分。如URL为:http://xxx.com/index.php?id=1 , id =输入的内容可能是注入点。
②POST 注入
使用POST提交的页面通常需要一定的保密性,常见于用户登录页面,用户操作生成的语句不会直接显示在url中,而是会存在于表单中,需要通过抓包才能获取,常用抓包神器BurpSuite,或者可以使用火狐浏览器通过安装hackbar等拓展抓包。抓取数据包后,可以通过修改提交的内容,结合网站页面反馈,判断能否注入。
③Cookie 注入
Cookie,存在用户本地客户端的数据集合,HTTP 请求表单中会带上客户端的 Cookie, 注入点存在 于Cookie 当中的某个字段中。和POST一样,Cookie也要通过抓包来查看。
(3)按页面执行反馈区分
此种注入主要是因为页面不直接反馈注入操作的内容,而常要配合各种sql函数进行,如sleep(),if(),ascll(), length()等,通过页面的反馈情况判断注入操作效果。
①布尔注入
很多时候,sql服务器并不会直接反馈查询内容,而是通过反馈一个布尔参数给网站服务器,然后再由网站服务器将内容反馈到浏览器,也就是用户眼前,而布尔类型只有两个参数,ture和false,此时可通过配合猜解函数如sleep(),if(),ascll(), length()等,来判断注入操作的效果。
②时间注入
和布尔注入一样,由于不直接反馈出入操作的内容,从而通过执行时间来间接猜解注入效果。常用sleep()、if()、ascll()的等函数猜解,如:if(length(database()) =8,sleep(5),sleep(0))意为:如果数据库的长度等于8,那么页面休眠5秒,否则不休眠。页面休眠一般指页面处于正在刷新状态。
③基于报错注入
页面反馈操作的错误信息,有的会直接把错误的sql语句反馈在页面中。
常见报错注入点在:单/双引号、数字型注入
sql注入 bypass(绕waf)
我的sql注入bypass思路
我的测试流程是先看看waf过滤了什么,例如union select被过滤那么就看看是union被过滤还是select被过滤或者union select连起来被过滤,然后在被拦截的关键字前后随便填充些字符看看是否还拦截,如果不拦截就开始进行fuzz,我一般习惯在目标站点进行fuzz到不拦截再去本地数据库上测试出一条可以执行的语句然后放给目标站点执行,假如说填充了字符还是拦截的话那么久很可能函数或关键字被过滤了,这样的话我才考虑等价替换或者利用web容器特性绕过,比如说apache的HDD参数污染、IIS的%分割绕过,往后再考虑分块传输、Content-Type绕过等绕过方式。
等价替换
对于关键字或者函数过滤,除了使用内联注释分割我们还可以通过等价替换绕过,这里我就放mysql的等价替换了,对于其他数据库思路其实是一样的,先通过官方文档获取所有api函数,然后index.php?id=1 xor user()用burpsuite来爆破出没有被过滤的函数,接着去看没有被过滤的函数的用法再本地测试看看是否能组合利用,在目标站点测试的时候最好配合本地测试。
https://www.cnblogs.com/sheng-xia/articles/15252115.html
三大数据库写入webshell
https://blog.csdn.net/m0_52556798/article/details/123502278
sql注入常用参数
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名
user() 查看当前MySQL登录的用户名
database() 查看当前使用MySQL数据库名
version() 查看当前MySQL版本
寻找注入点:
https://blog.csdn.net/av11566/article/details/124268873
sql注入的步骤
https://www.cnblogs.com/iamblackcat/p/15891832.html
https://cloud.tencent.com/developer/article/1938540
工具sqlmap的常用参数
猜解是否能注入
python sqlmap.py -u "http://110.40.250.105:8065/Less-6/?id=1"
用于mysq注入
查找数据库
python sqlmap.py -u "http://110.40.250.105:8065/Less-6/?id=1" --dbs
查找数据库下的表(security库)
python sqlmap.py -u "http://110.40.250.105:8065/Less-6/?id=1" -D security --tables
查找表下的列名(security 库下users表的列名)
python sqlmap.py -u "http://110.40.250.105:8065/Less-6/?id=1" -D security -T users --columns
查找字段的值(security 库下users表的"id,password,username"的值)
python sqlmap.py -u "http://110.40.250.105:8065/Less-6/?id=1" -D security -T users -C "id,password,username" --dump
cookie注人
sqlmap.py -u "http://192.168.189.1:81/admin/letter/delsystem?ids=1" --cookie "inxedulogin_sys_user_=inxedulogin_sys_user_1" --dbs --level 2
暴管理员登录密码
sqlmap.py -u "http://192.168.189.1:81/admin/letter/delsystem?ids=1" --cookie "inxedulogin_sys_user_=inxedulogin_sys_user_1" -D demo_inxedu_v2_0_open -T sys_user -C "LOGIN_NAME,LOGIN_PWD,USER_NAME" --dump --level 2
eg:python sqlmap.py -u "http://www.hackstar.top:8065/Less-1/?id=2" --dbs
解决方法
不到万不得已不要用${},因为他可以拼接字段,没有预编译,用#{}
由于业务需要不得不用#{}时,务必要验证前端传过来数据的合法性
对于mysql
①.将 WHERE some_field
= ‘${变量}’ 替换为 WHERE some_field
= #{param}
②将 like ‘%${变量}%’ 替换为 like concat(’%’, #{变量}, ‘%’)
③将 like concat(’%’, ${变量}, ‘%’) 替换成 like concat(’%’, #{变量}, ‘%’)
④将 WHERE some_field
IN (${变量}) 替换为
WHERE `some_field` IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach>
对于oracle:
将 like ‘%${变量}%’ 替换为 LIKE ‘%’||#{变量}||’%’
3.xss
原理
其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie信息、破坏页面结构、重定向到其它网站等。(简单一句话是html代码注入)
关键
①第一个是用户能够控制输入
②原本程序要执行的代码,拼接了用户输入的数据
常出现位置
有文本框的地方
分类
文档型
反射型
存储型
https://blog.csdn.net/m0_64378913/article/details/124654153
利用
<img src=# onerror=alert("xss")>
bypass
https://blog.csdn.net/Fly_hps/article/details/84989317
解决办法
1、使用htmlspecialchars()函数做实体字符转义;
2、对一些链接输出点做校验,必须规定开头是http://或https://的字符串;
3、过滤类似< svg>的特殊标签。
4.csrf,xxe,ssr漏洞
csrf和ssr的区别(里面csrf写的比较详细)
https://blog.csdn.net/m0_37268841/article/details/105770565
xxe漏洞
https://www.cnblogs.com/r00tuser/p/7255939.html
ssrf漏洞
https://blog.csdn.net/sycamorelg/article/details/111189567
5.文件上传漏洞和文件包含漏洞,bypass
文件上传漏洞
原理
攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本到服务器上,然后访问这些恶意脚本中包含的恶意代码,从而获得了执行服务器端命令的能力,进一步影响服务器安全。
条件
能够上传文件(木马)
上传的文件(木马)能够被web容器解析执行
用户能够访问上传的文件(木马的准确路径)
利用
将文件上传到服务器之后,访问这个文件,通过这个文件中相关的代码让服务器执行命令(构造一个webShell)
或直接上传冰蝎的马,通过冰蝎来远程连接服务器,执行相关的命令
bypass
https://blog.csdn.net/ma963852/article/details/123085437
解决办法
- 文件上传的目录设置为不可执行
- 使用白名单,判断文件类型
- 使用随机数改写文件名和文件路径
文件包含漏洞
本地文件包含
远程文件包含
https://blog.csdn.net/m0_68019293/article/details/123800864
https://baijiahao.baidu.com/s?id=1726903453533609734&wfr=spider&for=pc
6.中间件漏洞
7.怎么看cms
8.渗透测试流程
渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。渗透测试的步骤:
①明确目标:当拿到一个渗透测试项目时,我们首先应该明确客户要求我们进行渗透测试的范围以及整体项目的时间。
②信息收集:子域名、系统版本、架构、真实 IP 地址、whios 查询、历史漏洞查询、指纹识别等。
用namp或goby、awvs对web站点进行扫描,如果要做的详细点可以在用御剑进行后台扫描,使用whois进行域名反查。
③漏洞发现
④漏洞利用
漏洞发现和漏洞利用一般是根据经验或上网查找或漏扫工具
上网查找:根据得到的信息上网查找相关版本中间件或是端口号,找一找看有没有存在什么版本漏洞并且站点没有打补丁的,然后根据漏洞进行利用获取数据或权限。
经验:主要找信息泄露漏洞、逻辑漏洞、XSS和SQL注入漏洞、CSRF、SSRF漏洞。也有一些中间件漏洞,一般存在这种漏洞在第1点用goby扫描的时候会出现。我们手工这要测试上面的漏洞。手工测试主要使用burp suite进行抓包测试,也可以联动sqlmap进行测试。
漏扫工具:awvs,Nessus,wpscan
https://blog.csdn.net/qq_38612882/article/details/122860440
⑤后渗透:包括内网渗透、权限维持、权限提升,读取用户 hash,这里一定要把握好尺度。
⑥报告文档阶段:根据之前测试获取的漏洞及企业要求去编写最终的渗透测试报告。
9.windows和Linux提权方法
https://www.csdn.net/tags/Mtzakg1sMTgzMDMtYmxvZwO0O0OO0O0O.html
https://blog.csdn.net/weixin_33444829/article/details/116792538
https://www.cnblogs.com/hlg1/p/14009234.html
10.能自己做免杀吗,免杀有哪些方法
11.冰蝎和蚁剑的区别
https://blog.csdn.net/weixin_39190897/article/details/109417674
12.应急响应
https://blog.csdn.net/qq_35733751/article/details/115259747
补充
java相关的漏洞及其问题
加密解密
.
本文来自博客园,作者:lzstar-A2,转载请注明原文链接:https://www.cnblogs.com/lzstar/p/15399235.html
作 者:lzstar-A2
出 处:https://www.cnblogs.com/lzstar/
关于作者:一名java转安全的在校大学生
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注安全学习交流群菜鸟联盟(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯可乐以资鼓励,您的肯定将是我最大的动力。thx.
菜鸟联盟(IThonest),一个可能会有故事的qq群,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!