介绍常见web漏洞,参考OWASP top10漏洞,pikachu靶场
只要口令能被猜测到或者出现在弱口令字典中,都算做弱口令。
如果是web登陆,可以查看登陆处有无验证码,传输密码或用户名有无加密,密码输入错误多次后有无进行账号锁定。
一般使用弱口令字典进行爆破,web下使用burpsuite中intruder模块,其他组件如mysql可使用hydra,如 hydra -l admin -P pswtop100.txt mysql://xx.x.x.x -s 3306 -o xx.txt
如果对特定ID进行爆破,可以依据社会工程学基于已知信息生成特定的弱口令字典。如已知信息为某人叫刘能,出生于1997年11月12日,则可以生成如‘liuneng1997’、‘ln971112’、‘liuneng1112’等弱口令。github中有基于python2的社工弱口令字典生成工具,详见https://github.com/WangYihang/ccupp;
如果前端对密码进行了加密,可使用burp插件jsEncrypter将弱口令字典同步加密,详见实践篇|使用jsEncrypter进行前端加密弱口令爆破 - 知乎;
如果设置了验证码,可检查后端是否真正验证,验证码是否变化,如果是动态变化的图形验证码,可使用burp插件captcha-killer尝试识别。
1、设置验证码。 2、密码错误进行分阶段账号锁定。 3、设置密码时进行复杂度检查 4、对用户名密码进行加密
XSS跨站脚本攻击漏洞是指攻击者向web中注入恶意script代码,当用户浏览时恶意代码被执行。
按照是否经过后端处理,是否存储可以分为反射型XSS、存储型XSS、DOM型XSS。反射型XSS是临时性的,指注入的代码不在后端存储,但会在服务器端进行处理然后进行回显;存储型XSS会将恶意代码存储在数据库中;DOM型X SS利用的是html dom,不经过后端,只在浏览器处理,也是临时性的。
存在输入框,且输入框未进行特殊字符过滤
在系统中寻找存在输入框的地方,如新建信息,留言框等,查看对输入内容的回显,输入payload测试,如<script>alert(document.cookie)</script>、'><img src="#" on error="alert('xss')"
如果有过滤,可通过<a herf="#" οnclick="alert(document.cookie)">等绕过script过滤,可通过javascript:alert(document.cookie)等绕过但双引号过滤。
附XSS payload大全:https://github.com/payloadbox/xss-payload-list
1、对输入内容进行转义or过滤。 2、对输出内容进行转义or编码 3、设置cookie为httponly,使客户端无法通过脚本获得cookie
CSRF是指跨站请求伪造。CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。
一般通过CSRF钓鱼,攻击流程为
1)受害者登陆某系统A获取cookie
2)攻击者引诱受害者访问B
3)B向A发出请求
4)A系统认为请求来自受害者,执行请求
攻击完成
1、业务更新接口使用POST 2、增加token,避免使用单一cookie验证身份。3、设置cookie为httponly
前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
寻找搜索输入框,在输入参数后加‘查看是否报错;尝试简单payload 1 or1=1#
使用sqlmap扫描,sqlmap -u url --dbs 列出数据库名,sqlmap -u url -D 库名 --tables 列出表名,sqlmap -u url -D table_name -T 表名 -- columns 列出列名
1、sql语句预编译,不同语言or框架对应有不同的预编译方法。2、使用安全函数,如ESAPI.encoder().encodeForSQL(codec, name)
web端进行了需要调用系统命令执行的操作,攻击者通过输入Payload使得被攻击系统将恶意代码/命令拼接至已有的命令/代码中进行执行
1、利用管道符进行拼接
Windows系统支持的管道符
“|”:直接执行后面的语句,如 ping 127.0.0.1|whoami ,只执行whoami程序。
“||”:如果前面语句执行错误,则执行后面的语句,前面的语句只能为假。如 ping 2 || whoami 。
“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。如 ping 127.0.0.1&whoami 。
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。如 ping 127.0.0.1&&whoami 。
Linux系统支持的管道符
“;”:执行完前面的语句再执行后面的。如 ping 127.0.0.1;whoami 。
“|”:显示后面语句的执行结果。如 ping 127.0.0.1|whoami 。
“||”:当前面的语句执行错误时,执行后面的语句,如 ping 127.0.0.1||whoami 。
“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。如ping 127.0.0.1&whoami 。
“&&”:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真。如ping 127.0.0.1&&whoami 。
“;” 依次执行命令
2、一些bypass技巧
1)关键字拼接
a=ca;b=t;$a$b /etc/passwd
2)寻找替代命令 如tac
3)编解码
HEX编码解码base64编解码
4)空格绕过 5)通配符 6)DNS外带 7)利用已有环境变量
1、避免使用危险函数。如php中的system、exec等,python中的system、popen等,java中的java.lang.Runtime.getRuntime().exec等
2、裁剪系统的busybox组件,使得可以执行的系统命令做到最少
3、避免使用root权限启动系统
4、对前端输入进行过滤
在上传头像、附件时,如果对上传的内容没有进行校验,如果服务器的web容器执行了上传内容,或上传的钓鱼内容能被访问,则属于中高危漏洞。
1、上传木马文件
木马生成工具https://github.com/NyDubh3/CuiRi
一些一句话木马:
<?php @eval($_POST['shell']);?> <?php $a = "assert"; $a(@$_POST['shell']); ?> <?php assert(@$_POST['a']); ?>
/root/.ssh/authorized_keys /root/.ssh/id_rsa /root/.ssh/id_ras.keystore /root/.ssh/known_hosts //记录每个访问计算机用户的公钥 /etc/passwd /etc/shadow /etc/my.cnf //mysql配置文件 /etc/httpd/conf/httpd.conf //apache配置文件 /root/.bash_history //用户历史命令记录文件 /root/.mysql_history //mysql历史命令记录文件 /proc/mounts //记录系统挂载设备 /porc/config.gz //内核配置文件 /var/lib/mlocate/mlocate.db //全文件路径 /porc/self/cmdline //当前进程的cmdline参数
1、过滤../,%2e%2e%2f(编码后) 2、对用户的请求资源设置白名单
如果后台没有对前端传进来的值进行严格的安全考虑,则攻击者可能会通过“../”这样的手段让后台打开或者执行一些其他的文件。 从而导致后台服务器上其他目录的文件结果被遍历出来,形成目录遍历漏洞。如http://www.xxxx.com/xxx.php?page=../../../../../../../../../../../../../etc/passwd
1、关键操作前验证用户身份,通过token或cookie。2、在cookie中加入不可猜解的信息
3、寻找隐藏的文件路径或特殊接口
2、寻找未进行身份验证的结构
1、更改抓包信息,将id改为他人id
由于后台使用了不合适的权限校验规则,使得用户得到了平级用户或者更高权限用户的权限。
2、如果不得不传入,采取白名单策略
1、在设计上不要让前端用户直接传变量给包含函数
语言中一般存在内置的文件包含函数,比如C语言的#include,php的include。如果被包含的东西可以由前端传过去,就可以构造恶意文件造成破坏。
1、对输入参数进行过滤。2、限制可以访问的文件范围
3、尝试下载敏感文件
2、测试../../../../../../etc/passwd、../index.php等
1、可以在Google搜索inurl:"readfile.php?file="查看有漏洞的网站,或者寻找目标系统的保存、下载功能
如果下载的文件在检查元素or抓包orurl中可以看到,并且系统没有对用户下载文件做限制,则可以修改下载文件的路径和名称造成任意文件下载漏洞
4)更改头部的contentType
3)将php语句写入jpg echo '<?php phpinfo(); ?>' >> pic.jpg
2)将php语句前面加上gif标识头 GIF89<?php phpinfo();?>
1)前端的文件过滤可以通过禁用防御函数来绕过
2、一些绕过技巧
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我正在构建一个应用程序,想知道是否将未使用的对象设置为nil是生产级编码中的常见做法。我知道这只是垃圾收集器的提示,并不总是处理对象。 最佳答案 根据这个thread如果您使用完一个成员对象,将其设置为nil将引发被引用对象被垃圾回收。如果它是局部变量,方法exit将做同样的事情。也就是说,如果您要求将成员显式设置为nil,我会质疑您的设计。 关于ruby-将对象设置为nil是否很常见?,我们在StackOverflow上找到一个类似的问题: https://
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby