PTS 谷安预报名测试
最近想考PTS,想先了解一下相关内容,朋友就给我发了一个谷安的问卷调查,上面有些CTF题,做着玩玩。
题目来源:
谷安学院CISP-PTS渗透测试专家认证-预报名测试 https://ks.wjx.top/jq/94623813.aspx
问卷为谷安学院渗透测试专家CISP-PTS认证预报名测试题。
3道实操题目答对2道即可报名PTS。
1、POST&GET
题目链接:http://118.195.198.108:9997/
💡 hint:
请以get方式提交a=1 post方式提交b=2给服务器
Poc:
|
|
返回key,key1:T0kS7r3c
2、include
题目链接:http://118.195.198.108:9998/
💡Hint:
1 2 3 4 5 6 7 8 9
<?php show_source(__FILE__); echo $_GET['hello']; $page=$_GET['page']; //while (strstr($page, "php://")) { // $page=str_replace("php://", "", $page); //} include($page); ?>
利用点就是include($page);
,注释中提示了php://
伪协议
Poc:
|
|
考点:文件包含漏洞,伪协议
|
|
3、Hacked by Alphabug
题目链接:http://118.195.198.108:9999/
💡 Hint:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
0 <?php #Hacked by Alphabug header("Content-type:text/html;charset=utf-8"); /* Hint: get the shell find the key;)\n"; */ $sandbox = '/var/www/html/sandbox/' . md5("M0rk" . $_SERVER['REMOTE_ADDR']); mkdir($sandbox,0777,true); chdir($sandbox); echo strlen($_GET['cmd']); if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 30) { @exec($_GET['cmd']); } else if (isset($_GET['reset'])) { @exec('/bin/rm -rf ' . $sandbox); } highlight_file(__FILE__); echo "<br /> IP : {$_SERVER['REMOTE_ADDR']}"; ?> IP : xxxxxx
md5("M0rk" . $_SERVER['REMOTE_ADDR'])
算出自己的sandbox地址。
通过cmd
进行写shell,为了及时发现自己的错误,可以先写txt,再通过cp命令转成php
|
|
连接shell,获取flag
4、密码是什么呢?
💡Hint
密码是什么呢?
暴破一句话木马的连接密码
PHP一句话可以执行PHP命令,为了方便暴破,我们可以使用PHP echo输出内容,改变响应包的大小来做区分。
|
|
对cmd参数加标记,进行暴破,观察响应包大小变化,最后变化的就是密码,密码为pass
进行命令控制,读取flag
|
|
5、var_dump
💡Hint
1 2 3 4 5 6 7
Warning: var_dump() expects at least 1 parameter, 0 given in /var/www/html/index.php(4) : eval()'d code on line 1 <?php #error_reporting(0); $a = @$_REQUEST['hello']; eval( "var_dump($a);"); show_source (__FILE__); ?>
命令注入,闭合var_dump
POC:
|
|
6、curl_exec
💡Hint
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
<?php error_reporting(0); highlight_file(__FILE__); $url=$_POST['url']; $x=parse_url($url); if($x['scheme']==='http'||$x['scheme']==='https'){ if(!preg_match('/localhost|127.0.0.1/',$x['host'])){ $ch=curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result=curl_exec($ch); curl_close($ch); echo ($result); }else{ die('hacker'); } }elseif ($x['scheme']== NULL){ die(''); }else { die('oh no hacker'); } ?> //flag.php
url=http://xxxxxx/flag.php
考点,对localhost、127.0.0.1的绕过
|
|
经过尝试,只有如下成功绕过,其他会造成400报错
|
|
7、你真的会使用webshell吗?
💡Hint
你真的会使用webshell吗?
不会
8、Hello English
💡Hint
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<?php if( !ini_get('display_errors') ) { ini_set('display_errors', 'On'); } error_reporting(E_ALL); $lan = $_COOKIE['language']; if(!$lan) { @setcookie("language","english"); @include("english.php"); } else { @include($lan.".php"); } $x=file_get_contents('index.php'); echo $x; ?>
Poc:
|
|