Witam
Próbuje swoich sił w rozwalaniu zadanek na rozwal.to.
Mam problem z rozwaleniem zadania z sekcji podstawówka (zadanko z PHP): http://training.securitum.com/rozwal/podstawowka/podstawowka_5.php
kod zródłowy strony:
<?php
for($f=file(__FILE__),$i=0;$i<7;$i++) echo $f[$i];
eval('function a'.time().'a() { print_flag(); }');
if (isset($_GET['a'])) eval('a'.(int)$_GET['a'].'a();');
die();
Kod PHP rozumiem.
- Pierwsza linijka wypisuje kod zródłowy pliku PHP.
- Druga linijka tworzy funkcje ktora w nazwie ma timestamp
- A trzecia linijka kodu sprawdza
$_GET['a']
i wysyla do funkcjia<timestamp>a
Napisalem prosty kod HTML + JAVASCRIPT:
<script type="text/javascript">
function func1(){
var d = new Date();
var n = Math.floor((d.getTime() / 1000)); // get the seconds, not milliseconds
document.getElementById("a").value = n;
}
</script>
<form action="http://training.securitum.com/rozwal/podstawowka/podstawowka_5.php" method="GET" onsubmit="func1()">
<input type="test" value="" name="a" id="a" />
<input type="submit" value="Submit" />
</form>
Forma wysyła timestamp taki jaki zostanie wygenerowany na moim web serverze.
Niestety nie działa to na http://training.securitum.com/rozwal/podstawowka/podstawowka_5.php
Nastepnie probowalem wstrzyknąc w GET funkcje time()
- kod taki jak ten
eval('echo('.$_GET['a'].');');
by zwrocil timestamp - ale aplikacja zwraca
0
bo value z$_GET['a']
jest zamieniany na int najpierw:eval('a'.(int)$_GET['a'].'a();');
Prosze o pomoc i z góry dziękuje ;)