Web for pentester I part 1

首先感谢PentesterLab的渗透测试课程,本次测试使用的虚拟机是PentesterLab的虚拟机镜像。

p1

下载地址:https://pentesterlab.com/exercises/web_for_pentester

可以下载相关的文档来深入学习web_for_pentester

下载链接:http://download.vulnhub.com/pentesterlab/web_for_pentester.pdf

本篇博客内容先涉及XSS和SQLI部分,后续部分稍后补充

p2png

XSS

(1)example 1

参数name=hacker

p3

测试发现输入任意字符都打印出来,所以构造payload如下:

p4

(2)example 2

<script>被过滤,加入了黑名单

p5

可以使用大小写混淆bypass

p6

(3)example 3

<script>大小写混淆也不好使,黑名单可以使用递归构造法绕过

p7

(4)example 4

script关键字直接被屏蔽

p8

可以构造其他的xss payload,如img标签

p9

(5)example 5

alert关键字被过滤

p10

可以考虑使用其他函数弹窗,如

<1>prompt(1)

p11

<2>confirm(1)

p12

<3>使用eval 和String.fromCharCode()结合构造alerta(1)

p13

(6)example 6

输入的字符串不在页面显示

p14

查看源代码发现参数以变量的形式存储,闭合的是个双引号

p15

如果闭合掉<script>标签,构造如下:

p16

查看源代码

p17

当然也可以不用闭合掉<script>标签

p18

(7)example 7

依然是参数在页面中无显示

p19

查看源代码,在变量中,此时变量使用单引号

p20

并且在测试时发现<>被HTML转义成&lt; &gt;

p21

构造payload时不要使用<>符号,构造如下:

p22

(8)example 8

是个POST型的输入框,输入<>提交后,返回正常

p8_0

查看源代码发现已经被HTML转义为&lt; &gt;

p23

本题的突破口是在url中,测试发现url路径可以用户自己控制,并且影响返回页面的代码

p24

所以在url中直接构造payload

p25

查看源代码

p26

(9)example 9

路径中没有变量=参数,只是通过#链接一个参数hacker,查看源代码

p27

这是一个DOM 型的xss,在#后边直接构造payload,执行时需要运行两次,第一次加载,第二次运行

p28

SQL Injection

(1)example 1

查看参数name=root,需要测试root的类型

sq1

<1>参数加数字root111,没有查询结果

sq2

<2>加空格和+号,查询返回正常

sq3

<3>英文双引号root”,没有查询结果

sq4

<4>英文单引号root’,返回错误

sq5

通过以上测试得知root是字符型参数,以英文单引号结尾,类似于

select * from xxx where name=’root’

所以构造payload如下:

sq6

(2)example 2

测试发现不能输入空格

sq7

构造payload如下:

sq8

或者使用\t或\n的url编码来代替空格

sq9

(3)example 3

测试发现使用\t \n代替失败

sq10

采用注释符/**/来代替空格,构造payload

sq11

或者直接使用如下无空格版本

sq12

(4)example 4

此处参数的值变成了数值型id=2

sq13

<1>测试减法,可以使用

sq14

<2>测试加法,失败

sq15

但是将+号URL编码后可以正常使用

sq16

据此,构造payload: id=2 or 1=1

sq17

(5)example 5

虽然可以直接用以前的payload轻松过关,查看资料才发现是考察正则表达式

sq18

输入的参数必须以数字开头,不能是字符。

数字开头,只是没有查询结果,没有返回错误

sq19

字符开头,返回错误

sq20

据此可以构造payload

sq21

(6)example 6

根据源代码中的正则表达式,参数必须以数字结尾,不可以是字符

sq22

当使用的payload是如下这种时,就会报错

sq23

构造payload

sq24

(7)example 7

根据正则表达式,参数的开头和结尾都很好的检测,关键在于/m,只是判断在同一行的参数

sq25

如果使用之前的payload会报错

sq26

必须通过\n换行符来将参数和payload分开不在同一行,payload如下:

sq27

(8)example 8

使用order=name排序

sq28

有两种order by情况:

  • 直接排序:order by name
  • 使用`符号排序:order by `name`

测试是上述那种(注释:%23是#的url编码)

<1>payload: order=name%23,没有返回结果

sq29

<2>payload: order=name`%23

sq30

<3>payload: order=name`desc%23

sq31

根据以上的测试,确定了order by 是`name`类型

此时就可以使用sqlmap构造url进行盲注,关键一点就是构造url

url:order=name%60*       //%60是`的url编码

执行sqlmap

sq32

结果如下

sq33

可以找到5个字段,脱裤什么的你懂的,嘿嘿嘿

sq34

(9)example 9

也是order=name类型的注入

sq35

关键也是判断order by 的类型

<1>payload: order=name%23

sq36

<2>payload: order=name`%23

sq37

简单测试后发现排序类型是order by name

可以使用sqlmap进行盲注,构造的url就是example9.php?order=name,结果就用展示了,跟上例一样的结果

sq38

总结

以上只是解决了XSS和SQLI 的问题,并且比较初级,后续会将pentesterlab的其他内容更新。

 

 

 

您可能还喜欢...