Почему библиотека запросов не может прочитать исходный код? Натас 22 - Python 3 - PullRequest
1 голос
/ 13 июля 2020

Я написал сценарий python для всех испытаний Natas. Пока все прошло гладко.

В вызове natas22 на странице ничего нет, но он дает ссылку на исходный код. Из браузера я могу добраться до исходного кода (это PHP) и прочитать его. Но я не могу этого сделать со своим скриптом Python. Что очень странно, потому что я делал это в других задачах ...

Я также пытался предоставить пользовательский агент (обновленный chrome браузер), не сработало.

Вот небольшой код:

import requests

user = 'natas22'
passw = 'chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ'
url = 'http://%s.natas.labs.overthewire.org/' % user

response = requests.get('http://natas22.natas.labs.overthewire.org/index-source.html', auth=(user, passw))
print(response.text)

Что возвращает:

<code><span style="color: #000000">
<br /></span>ml&gt;id="viewsource"&gt;&lt;a&nbsp;href="index-source.html"&gt;View&nbsp;sourcecode&lt;/a&gt;&lt;/div&gt;nbsp;next&nbsp;level&nbsp;are:&lt;br&gt;";l.js"&gt;&lt;/script&gt;
</code>

Но на самом деле он должен был вернуть:

<code><?  session_start(); 

if(array_key_exists("revelio", $_GET)) { 
    // only admins can reveal the password 
    if(!($_SESSION and array_key_exists("admin", $_SESSION) and $_SESSION["admin"] == 1)) { 
    header("Location: /"); 
    }  }  ?> 


<html>  <head>  <!-- This stuff in the header has nothing to do with the level -->  <link rel="stylesheet" type="text/css" href="http://natas.labs.overthewire.org/css/level.css">  <link rel="stylesheet" href="http://natas.labs.overthewire.org/css/jquery-ui.css" />  <link rel="stylesheet" href="http://natas.labs.overthewire.org/css/wechall.css" />  <script src="http://natas.labs.overthewire.org/js/jquery-1.9.1.js"></script>  <script src="http://natas.labs.overthewire.org/js/jquery-ui.js"></script>  <script src=http://natas.labs.overthewire.org/js/wechall-data.js></script><script src="http://natas.labs.overthewire.org/js/wechall.js"></script>  <script>var wechallinfo = { "level": "natas22", "pass": "<censored>" };</script></head>  <body>  <h1>natas22</h1>  <div id="content"> 

<? 
    if(array_key_exists("revelio", $_GET)) { 
    print "You are an admin. The credentials for the next level are:<br>"; 
    print "<pre>Username: natas23\n"; 
    print "Password: <censored>
";}?> Посмотреть исходный код

Почему он так себя ведет? Мне очень любопытно, и я не смог узнать

Если вам нужен URL-адрес для попытки из браузера:

url: http://natas22.natas.labs.overthewire.org/index-source.html

Имя пользователя: natas22

Пароль: chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Кажется, ваш код в порядке. В исходном коде используется \r вместо \n, поэтому большая часть кода скрыта в терминале.

Вы можете увидеть это, используя response.content вместо response.test, чтобы увидеть это:

import requests

user = 'natas22'
passw = 'chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ'
url = 'http://%s.natas.labs.overthewire.org/' % user

response = requests.get('http://natas22.natas.labs.overthewire.org/index-source.html', auth=(user, passw))
print(response.content)
0 голосов
/ 13 июля 2020

Попробуйте:

import requests

user = 'natas22'
passw = 'chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ'
url = 'http://%s.natas.labs.overthewire.org/' % user

response = requests.get('http://natas22.natas.labs.overthewire.org/index-source.html', auth=(user, passw))
print(response.text.replace('\r', '\n'))

Это тоже работает:

import requests

user = 'natas22'
passw = 'chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ'
url = 'http://%s.natas.labs.overthewire.org/' % user

response = requests.get('http://natas22.natas.labs.overthewire.org/index-source.html', auth=(user, passw))
print(response.content.decode('utf8').replace('\r', '\n'))
...