Na początku małe ogłoszenie: ReverseCraft #3 pojawi się na sieci dopiero na początku następnego tygodnia (czyli za 2-3 dni) - niestety w czwartek/piątek (kiedy to miałem nagrywać kolejny eps) wystąpiły pewne komplikacje i epsa nagrać się nie udało.
A teraz czas na temat właściwy postu, czyli losowe przemyślenia...
PHP jako preprocesor nie tylko do HTML'a
Na pewnym forum rozwinęła się dyskusja na temat mieszania kodu w różnych językach w jednym źródle - autor na początku tematu posłużył się (celowo) pewnym uproszczeniem pisząc:
Pisząc kod programu nie możemy korzystać z instrukcji kilku języków programowania ze sobą nie kompatybilnych [...]
W odpowiedzi padły m.in. stwierdzenia że przecież można łączyć C z assemblerem, czy PHP z HTML (pomińmy kwestię że HTML nie jest językiem programowania). Przeczytawszy to ostatnio przyszedł mi do głowy pewien dziwny pomysł - przecież PHP można łączyć nie tylko z HTML czy JS, ale również z Pythonem, C, assemblerem, czy innymi językami!
Całość opiera się o pewną wyjątkową cechę języka PHP - interpreter PHP wykonuje jedynie kod który jest między tagami <?php a ?>, dzięki czemu bez żadnych problemów możemy włączyć PHP w cokolwiek, i wykorzystać go jako bardziej potężną wersję preprocesora.
Przykładowe użycie mogło by wyglądać tak:
// PHP preprocesor test
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
float fast_sin(int deg)
{
static const float sin_table[] = {
<?php
for($i = 0; $i < 359; $i++)
echo(sin($i) . ", ");
echo(sin($i));
?>
};
return sin_table[deg % 360];
}
int
main(void)
{
int i;
srand(time(NULL));
i = rand();
printf("Czy wiesz ze sin(%i) = %f?\n", i, fast_sin(i));
return 0;
}
Kompilacja i użycie takiego tworu natomiast wygląda następująco (jak widać wymagany jest CLI do PHP):
$ php my.c | gcc -x c -
$ ./a.out
Czy wiesz ze sin(802194582) = 0.994827?
$
Krótkie wyjaśnienie opcji gcc: opcja -x c wybiera język - jest to wymagany parametr przy odczycie z stdin, a ów minus, będący drugą i ostatnią opcją, mówi kompilatorowi że ma czytać kod z stdin.
Czy to się może komuś do czegoś przydać? W dużych projektach na pewno nie - użycie w dużym projekcie tego typu trików jest bliskie masochizmu. Małe projekty, a w szczególności różnej maści hacki to inna sprawa - tam mamy pole do popisu i możemy z takich cudów korzystać. Szczególnie przydatne jest to w przypadku języków w których wybitnie preprocesor by się przydał, ale go nie ma.
Przeciwieństwo cyfrowych paranoików
Były już karteczki z hasłem na monitorze i pod klawiaturą, był już pan który zapisał PIN do karty flamastrem na bankomacie, przyszła więc i pora na producenta routerów który umieścił hasło w takim miejscu by nikt nie miał problemów ze znalezieniem go (klik to zoom, fota by Samlis Coldwind):
Gdyby tylko jeszcze admin pomyślał o zmianie hasła, lub choćby nazwy tego 'zasobu'...
hosts, malware, i prawa dostępu
Pisałem ostatnio m.in. o trojanach których zasada działania opiera się o dodanie paru(nastu/dziesięciu) wpisów do pliku C:\Windows\system32\drivers\etc\hosts (który to działa jak "lokalny DNS" dla podanych tam domen). Przyszła mi do głowy pewna rzeczy - a czemu by po prostu nie odebrać praw do zapisu do tego plik wszystkim userom - a w zasadzie wszystkim adminom, bo zwykli userzy nie mają write-access do tego pliku i tak i tak. Proste polecenie typu (uwaga: nie odpalaj tego polecenia jeśli nie wiesz co robisz):
cacls c:\windows\system32\drivers\etc\hosts /g Everyone:R
I po kłopocie. Chociaż jeszcze lepszym pomysłem było by Deny Write dla wszystkich.
Oczywiście, autor malware'u prędzej czy później może dopisać odzyskiwanie praw do zapisu do tego pliku, i wtedy wracamy do punktu wyjścia - tak więc jest to rozwiązanie jedynie tymczasowe, i będzie skuteczne tak długo jak nikt o nim (z twórców malware'u ofc) nie będzie wiedzieć - czyli mniej więcej do opublikowania tego postu w języku angielskim. Lepiej więc się spieszyć ze zmianą praw, przynajmniej jedną czy dwie noce prześpimy spokojnie ;)
No i na dzisiaj tyle... Zrobiło się późno, czas iść spać...
By the way...
On 22nd Nov'24 we're running a webinar called "CVEs of SSH" – it's free, but requires sign up: https://hexarcana.ch/workshops/cves-of-ssh (Dan from HexArcana is the speaker).
Comments:
Jak byś jakieś fajne zastosowanie wymyślił to się pochwal, k ? ;>
@Patrykuss
Pomysł ciekawy, przy czym sądzę że zastosowanie whitelisty zamiast blacklisty dało by lepszy rezultat ;>
Przy czym sądzę że zamiast pisać soft, można by wykorzystać mechanizm audytowania/inspekcji (ten wbudowany w Windows), i ustawić logowanie na dostęp z zapisem do hosts, i ustawić w obsłudze eventów pokazanie się jakiegoś komunikatu który by od razu usera poinformował co się dzieje ;>
Hmm jakby to teraz z Javą zbindować? ;]
ps. Czekamy na nowego ReverseCrafta - do roboty :)
Wszystko zależy od tego jak bardzo korzysta się z tego pliku - czasem wystarczy na whitelist umieścić tylko localhost ;>
Ale w sumie wszystko i tak sprowadza się do kontroli nad nieautoryzowanym dostępem do pliku hosts...
Hmmm... przyszedł mi do głowy pewien pomysł... Hmm, ale muszę się nad tym zastanowić...
@Yarek
Z javą ? Sądzę żę da sie bez większych problemów. W sumie do Javy się całkiem nieźle cpp sprawdza (C/C++ preoprocessor, ten z pakietu GCC), więc czemu i PHP miałoby się nie sprawdzić ;>
@Dabroz
Ano właśnie, to jest charakterystyczna cecha pewnej grupy produktów Edimaxu - monit z fotki również pochodzi z Edimax'a... :)
Add a comment: