summaryrefslogtreecommitdiff
path: root/src/tests/deny_writable
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/deny_writable')
-rw-r--r--src/tests/deny_writable/config/config_disable_writable.ini1
-rw-r--r--src/tests/deny_writable/config/config_disable_writable_disabled.ini1
-rw-r--r--src/tests/deny_writable/config/config_disable_writable_simulation.ini1
-rw-r--r--src/tests/deny_writable/config/dump_deny_writable_execution.ini1
-rw-r--r--src/tests/deny_writable/deny_writable_execution.phpt43
-rw-r--r--src/tests/deny_writable/deny_writable_execution_disabled.phpt32
-rw-r--r--src/tests/deny_writable/deny_writable_execution_simulation.phpt50
-rw-r--r--src/tests/deny_writable/dump_deny_writable_execution.phpt67
8 files changed, 196 insertions, 0 deletions
diff --git a/src/tests/deny_writable/config/config_disable_writable.ini b/src/tests/deny_writable/config/config_disable_writable.ini
new file mode 100644
index 0000000..9f90601
--- /dev/null
+++ b/src/tests/deny_writable/config/config_disable_writable.ini
@@ -0,0 +1 @@
sp.readonly_exec.enable();
diff --git a/src/tests/deny_writable/config/config_disable_writable_disabled.ini b/src/tests/deny_writable/config/config_disable_writable_disabled.ini
new file mode 100644
index 0000000..6a33437
--- /dev/null
+++ b/src/tests/deny_writable/config/config_disable_writable_disabled.ini
@@ -0,0 +1 @@
sp.readonly_exec.disable();
diff --git a/src/tests/deny_writable/config/config_disable_writable_simulation.ini b/src/tests/deny_writable/config/config_disable_writable_simulation.ini
new file mode 100644
index 0000000..52a43ba
--- /dev/null
+++ b/src/tests/deny_writable/config/config_disable_writable_simulation.ini
@@ -0,0 +1 @@
sp.readonly_exec.enable().simulation();
diff --git a/src/tests/deny_writable/config/dump_deny_writable_execution.ini b/src/tests/deny_writable/config/dump_deny_writable_execution.ini
new file mode 100644
index 0000000..c49f893
--- /dev/null
+++ b/src/tests/deny_writable/config/dump_deny_writable_execution.ini
@@ -0,0 +1 @@
sp.readonly_exec.enable().simulation().dump("/tmp/dump_result/");
diff --git a/src/tests/deny_writable/deny_writable_execution.phpt b/src/tests/deny_writable/deny_writable_execution.phpt
new file mode 100644
index 0000000..916328e
--- /dev/null
+++ b/src/tests/deny_writable/deny_writable_execution.phpt
@@ -0,0 +1,43 @@
1--TEST--
2Readonly execution attempt
3--SKIPIF--
4<?php
5if (!extension_loaded("snuffleupagus")) print "skip";
6
7$filename = __DIR__ . '/test.txt';
8
9@unlink($filename);
10
11file_put_contents($filename, 'a');
12chmod($filename, 0400);
13
14if (is_writable($filename)) print "skip";
15@unlink($filename);
16 ?>
17--INI--
18sp.configuration_file={PWD}/config/config_disable_writable.ini
19--FILE--
20<?php
21$dir = __DIR__;
22
23// just in case
24@unlink("$dir/non_writable_file.txt");
25@unlink("$dir/writable_file.txt");
26
27file_put_contents("$dir/non_writable_file.txt", '<?php echo "Code execution within a non-writable file.\n";');
28file_put_contents("$dir/writable_file.txt", '<?php echo "Code execution within a writable file.\n";');
29chmod("$dir/non_writable_file.txt", 0400);
30chmod("$dir/writable_file.txt", 0777);
31include "$dir/non_writable_file.txt";
32include "$dir/writable_file.txt";
33?>
34--CLEAN--
35<?php
36$dir = __DIR__;
37chmod("$dir/non_writable_file.txt", 0777);
38chmod("$dir/writable_file.txt", 0777);
39unlink("$dir/non_writable_file.txt");
40unlink("$dir/writable_file.txt");
41?>
42--EXPECTF--
43Fatal error: [snuffleupagus][readonly_exec] Attempted execution of a writable file (%a/deny_writable_execution.php). in %a/deny_writable_execution.php on line 2
diff --git a/src/tests/deny_writable/deny_writable_execution_disabled.phpt b/src/tests/deny_writable/deny_writable_execution_disabled.phpt
new file mode 100644
index 0000000..dd01f01
--- /dev/null
+++ b/src/tests/deny_writable/deny_writable_execution_disabled.phpt
@@ -0,0 +1,32 @@
1--TEST--
2Readonly execution attempt
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/config_disable_writable_disabled.ini
7--FILE--
8<?php
9$dir = __DIR__;
10
11// just in case
12@unlink("$dir/non_writable_file.txt");
13@unlink("$dir/writable_file.txt");
14
15file_put_contents("$dir/writable_file.txt", '<?php echo "Code execution within a writable file.\n";');
16file_put_contents("$dir/non_writable_file.txt", '<?php echo "Code execution within a non-writable file.\n";');
17chmod("$dir/writable_file.txt", 0777);
18chmod("$dir/non_writable_file.txt", 0400);
19include "$dir/writable_file.txt";
20include "$dir/non_writable_file.txt";
21?>
22--EXPECT--
23Code execution within a writable file.
24Code execution within a non-writable file.
25--CLEAN--
26<?php
27$dir = __DIR__;
28chmod("$dir/non_writable_file.txt", 0777);
29chmod("$dir/writable_file.txt", 0777);
30unlink("$dir/non_writable_file.txt");
31unlink("$dir/writable_file.txt");
32?>
diff --git a/src/tests/deny_writable/deny_writable_execution_simulation.phpt b/src/tests/deny_writable/deny_writable_execution_simulation.phpt
new file mode 100644
index 0000000..7fc0c63
--- /dev/null
+++ b/src/tests/deny_writable/deny_writable_execution_simulation.phpt
@@ -0,0 +1,50 @@
1--TEST--
2Readonly execution attempt (simulation mode)
3--SKIPIF--
4<?php
5if (!extension_loaded("snuffleupagus")) print "skip";
6
7// root has write privileges on any file
8if (TRUE == function_exists("posix_getuid")) {
9 if (0 == posix_getuid()) {
10 print "skip";
11 }
12} elseif (TRUE == function_exists("shell_exec")) {
13 if ("root" == trim(shell_exec("whoami"))) {
14 print "skip";
15 }
16}
17 ?>
18--INI--
19sp.configuration_file={PWD}/config/config_disable_writable_simulation.ini
20--FILE--
21<?php
22$dir = __DIR__;
23
24// just in case
25@unlink("$dir/non_writable_file.txt");
26@unlink("$dir/writable_file.txt");
27
28file_put_contents("$dir/writable_file.txt", '<?php echo "Code execution within a writable file.\n";');
29file_put_contents("$dir/non_writable_file.txt", '<?php echo "Code execution within a non-writable file.\n";');
30chmod("$dir/writable_file.txt", 0777);
31chmod("$dir/non_writable_file.txt", 0400);
32include "$dir/writable_file.txt";
33include "$dir/non_writable_file.txt";
34?>
35--CLEAN--
36<?php
37$dir = __DIR__;
38chmod("$dir/non_writable_file.txt", 0777);
39chmod("$dir/writable_file.txt", 0777);
40unlink("$dir/non_writable_file.txt");
41unlink("$dir/writable_file.txt");
42?>
43--EXPECTF--
44Warning: [snuffleupagus][readonly_exec] Attempted execution of a writable file (%a/deny_writable_execution_simulation.php). in %a/deny_writable_execution_simulation.php on line 2
45
46Warning: [snuffleupagus][readonly_exec] Attempted execution of a writable file (%a/writable_file.txt). in %a/deny_writable_execution_simulation.php on line 12
47
48Warning: [snuffleupagus][readonly_exec] Attempted execution of a writable file (%a/writable_file.txt). in %a/writable_file.txt on line 1
49Code execution within a writable file.
50Code execution within a non-writable file.
diff --git a/src/tests/deny_writable/dump_deny_writable_execution.phpt b/src/tests/deny_writable/dump_deny_writable_execution.phpt
new file mode 100644
index 0000000..c6dd6cd
--- /dev/null
+++ b/src/tests/deny_writable/dump_deny_writable_execution.phpt
@@ -0,0 +1,67 @@
1--TEST--
2Readonly execution attempt (simulation mode)
3--SKIPIF--
4<?php
5if (!extension_loaded("snuffleupagus")) print "skip";
6
7// root has write privileges on any file
8if (TRUE == function_exists("posix_getuid")) {
9 if (0 == posix_getuid()) {
10 print "skip";
11 }
12} elseif (TRUE == function_exists("shell_exec")) {
13 if ("root" == trim(shell_exec("whoami"))) {
14 print "skip";
15 }
16}
17?>
18--POST--
19post_a=data_post_a_readonly&post_b=data_post_b_readonly
20--GET--
21get_a=data_get_a_readonly&get_b=data_get_b_readonly
22--COOKIE--
23cookie_a=data_cookie_a_readonly&cookie_b=data_cookie_b_readonly
24--INI--
25sp.configuration_file={PWD}/config/dump_deny_writable_execution.ini
26--FILE--
27<?php
28@mkdir("/tmp/dump_result/");
29foreach (glob("/tmp/dump_result/sp_dump.*") as $dump) {
30 @unlink($dump);
31}
32$dir = __DIR__;
33
34// just in case
35@unlink("$dir/non_writable_file.txt");
36@unlink("$dir/writable_file.txt");
37
38file_put_contents("$dir/writable_file.txt", '<?php echo "Code execution within a writable file.\n";');
39file_put_contents("$dir/non_writable_file.txt", '<?php echo "Code execution within a non-writable file.\n";');
40chmod("$dir/writable_file.txt", 0777);
41chmod("$dir/non_writable_file.txt", 0400);
42include "$dir/writable_file.txt";
43include "$dir/non_writable_file.txt";
44
45$filename = glob('/tmp/dump_result/sp_dump.*')[0];
46$res = file($filename);
47if ($res[2] != "GET:get_a='data_get_a_readonly' get_b='data_get_b_readonly' \n") {
48 echo "1\n";
49} elseif ($res[3] != "POST:post_a='data_post_a_readonly' post_b='data_post_b_readonly' \n") {
50 echo "2\n";
51} elseif ($res[4] != "COOKIE:cookie_a='data_cookie_a_readonly&cookie_b=data_cookie_b_readonly' \n") {
52 echo "3\n";
53} else {
54 echo "WIN\n";
55}
56?>
57--EXPECTF--
58%a
59WIN
60--CLEAN--
61<?php
62$dir = __DIR__;
63chmod("$dir/non_writable_file.txt", 0777);
64chmod("$dir/writable_file.txt", 0777);
65unlink("$dir/non_writable_file.txt");
66unlink("$dir/writable_file.txt");
67?>