loader
Foto

Webes vizsgálatok Python nyelven (alapozó)

Ez a cikk szorosan illeszkedik a közeljövőben meghirdetésre kerülő Python tanfolyamunkhoz, amelyben a Python nyelv segítségével végzünk különböző sérülékenységvizsgálatokat. Ebben a cikkben megnézzük, hogyan lehet DNS-t lekérni, illetve megnézzük a HTTP header tartalmának a kiolvasását is.

Indítsuk el a Kali Linux (vagy Parrot Sec) virtuális gépünket, majd a bejelentkezés után hozzunk létre file-t, és másoljuk be a következő kódot.

import sys, socket, requests

searchHost = "google.com"
getHost = socket.gethostbyname(searchHost)

print("A megadott domain: " + searchHost + ", az ehhez tartozó IP cím: " + getHost)

req = requests.get("https://" + searchHost)
print(str(req.headers))

 

Ezután futtassuk ezt a programot, és a következő eredményt kapjuk. Először a "google.com" domainhez tartoz IP címet kapjuk meg, majd a HTTP headert JSON formátumban. Megtaláljuk a kérésben a cookie-t, az XSS elleni védelmet, stb.

A megadott domain: google.com, az ehhez tartozó IP cím: 216.58.214.238
{'Date': 'Fri, 08 Jan 2021 15:15:46 GMT', 'Expires': '-1', 'Cache-Control': 'private, max-age=0', 'Content-Type': 'text/html; charset=ISO-8859-1', 'P3P': 'CP="This is not a P3P policy! See g.co/p3phelp for more info."', 'Content-Encoding': 'gzip', 'Server': 'gws', 'X-XSS-Protection': '0', 'X-Frame-Options': 'SAMEORIGIN', 'Set-Cookie': 'NID=206=lcddIAqfzoJ6CjqxDH0uNUpR4MS1Ty5m1JBnM0I0ZEXeF-tblLVC8oKwdVWKCC4C7bsfWznWc4mdYxOw7sA3Qvy7Lj7FYAxajXqpdO1hAWqO3hiUd9LJ2sUUoB2Wdr_uma9d1IMU_a4teBNnmN5S8l3KxNzUXqhCTjypGV6UgoE; expires=Sat, 10-Jul-2021 15:15:46 GMT; path=/; domain=.google.com; HttpOnly', 'Alt-Svc': 'h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"', 'Transfer-Encoding': 'chunked'}

 

Egyik nagy hátránya a fenti megoldásnak, hogy a vizsgálandó domain be van "égetve" a kódba. Ezért írjuk át az előző megoldásunkat a következő példa szerint.

import sys, socket, requests

if len(sys.argv) < 2:
    print("Adj meg egy url-t idézőjelek nélkül. (" + sys.argv[0] + "  <url>)")
    sys.exit(1)

searchHost = sys.argv[1]

getHost = socket.gethostbyname(searchHost)
print("A megadott domain: " + searchHost + ", az ehhez tartozó IP cím: " + getHost)

req = requests.get("https://" + searchHost)
print(str(req.headers))

 

Látható, hogy amikor elindítjuk a programunkat, akkor kell megadni azt a domaint, amelyet vizsgálni szeretnénk. Ha nem adunk meg domaint, akkor a következő üzenet jelenik meg.

Adj meg egy url-t idézőjelek nélkül. (info11.py  <url>)

 

Indítsuk el újra az alkalmazásunkat a domiannel, és a következő eredményt kapjuk.

A megadott domain: google.com, az ehhez tartozó IP cím: 216.58.214.238
{'Date': 'Fri, 08 Jan 2021 15:17:10 GMT', 'Expires': '-1', 'Cache-Control': 'private, max-age=0', 'Content-Type': 'text/html; charset=ISO-8859-1', 'P3P': 'CP="This is not a P3P policy! See g.co/p3phelp for more info."', 'Content-Encoding': 'gzip', 'Server': 'gws', 'X-XSS-Protection': '0', 'X-Frame-Options': 'SAMEORIGIN', 'Set-Cookie': 'NID=206=DxvrD5v26tsmst5QQlqcg4aaixYskPR-KyoDKdW1GNShlfoGARVTYY4HpglIpstcUJLGAzNQMEm05BStkYnfeLLNts7IEG_weCWbn6Rr1jonPEA6aYmxpdgwC2Nv6ht_bPRN6xJxcYCihOOdVhQHMbCZfSe-BKppdo8icjIDOMg; expires=Sat, 10-Jul-2021 15:17:10 GMT; path=/; domain=.google.com; HttpOnly', 'Alt-Svc': 'h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"', 'Transfer-Encoding': 'chunked'}

 

Megint módosítsuk az alkalmazásunkat, hiszen nem kényelmes elolvasnunk így az eredményeket, célszerű rendezni a HTTP headerben lévő értékeket. Fontosnak tartjuk megjegyezni azt, hogy a következő alkalmazás akkor működik, ha az adott résznél (pl.: Content-Type) konkrét érték szerepel.

import sys, socket, requests, json

if len(sys.argv) < 2:
    print("Adj meg egy url-t idézőjelek nélkül. (" + sys.argv[0] + " <url>)")
    sys.exit(1)

searchHost = sys.argv[1]
req = requests.get("https://" + searchHost)

print("Status: " + str(req.status_code))
print("Állapot: " + str(req))

getHost = socket.gethostbyname(searchHost)
print("A megadott domain: " + searchHost + ", az ehhez tartozó IP cím: " + getHost)

print("\nHeaders:")
print(req.headers['Date'])
print(req.headers['Cache-Control'])
print(req.headers['Content-Type'])
print(req.headers['Content-Encoding'])
print(req.headers['Server'])
print(req.headers['X-XSS-Protection'])
print(req.headers['X-Frame-Options'])
print(req.headers['Set-Cookie'])

 

Futtassuk újra a módosított alkalmazásunkat, és ha a "google.com" a vizsgálandó domain, akkor a következő eredményt kapjuk.

Status: 200
Állapot: <Response [200]>
A megadott domain: google.com, az ehhez tartozó IP cím: 216.58.214.238

Headers:
Fri, 08 Jan 2021 15:36:15 GMT
private, max-age=0
text/html; charset=ISO-8859-1
gzip
gws
0
SAMEORIGIN
NID=206=VcgH9cPOLr_jba37f_GlcjmysQqZyCcjUUKG8G4Fy4Ya4PCH_Q7LP9exXQAuzWMEswKeoZ9-EAHFiDPrBYh-Idwne6aqaCKLPKHj8BuuutW0wFzU17TRIbj3Idr_ST9SrVNozn33FPLKFtF--eM4uiWqq8thWow79C0rUC3w7t8; expires=Sat, 10-Jul-2021 15:36:15 GMT; path=/; domain=.google.com; HttpOnly

 

 



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .

A Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .

Nem régen megjelent a WebElektronika témakörében az "üzemeltetés" és az IT biztonság. Most az Olvasóink figyelmébe szeretnénk néhány ingyenes könyvet ajánlani.. . . .