Toon posts:

PowerShell HttpWebRequest met NTLM en Params faalt

Pagina: 1
Acties:

Onderwerpen

Vraag


  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 05:34

Blokker_1999

Full steam ahead

Topicstarter
Ik probeer via PowerShell enkele calls te maken naar een webapp en gebruikte hier in eerste instantie een Invoke-WebRequest voor. Alleen vereist de app op een gegeven moment dat er een array parameter wordt gebruikt en Invoke-WebRequest staat niet toe dat je in je call meerdere parameters met dezelfde naam gebruikt. Ik ben dan op zoek gegaan naar een alternatief en kwam op Stack Exchange een stukje code tegen dat deze mogelijkheid wel biedt en gebruik maakt van System.Net.HttpWebRequest

De web app maakt gebruik van NTLM credentials en ik kan dus aan beide de optie meegeven om de defaultcredentials te gebruiken. Maar van zodra ik bij de HttpWebRequest de body meegeef dan krijg ik van de server een "401 Unauthorized" terug

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    $req = [System.Net.HttpWebRequest]::Create($Uri)
    $req.UseDefaultCredentials = $true
    $req.KeepAlive = $false
    $req.Method = "POST"
    $req.ContentLength = $params.Length
    $req.ContentType = "application/x-www-form-urlencoded"

    $str = $req.GetRequestStream();
    $str.Write($b, 0, $b.Length);
    $str.Close();
    $str.Dispose();

    [System.Net.HttpWebResponse] $res = $req.GetResponse();
    $str = $res.GetResponseStream();
    $rdr = New-Object -TypeName "System.IO.StreamReader" -ArgumentList ($str);
    $content = $rdr.ReadToEnd();Z
    $str.Close();
    $str.Dispose();
    $rdr.Dispose();
Exception calling "GetResponse" with "0" argument(s): "The remote server returned an error: (401) Unauthorized."
Als ik tijdens het testen na lijn 4 reeds een GetResponse vraag krijg ik netjes een correct antwoord van de server. Maar van zodra ik met de content begin te spelen wordt het een 401. Ik krijg via Google niet direct een antwoord gevonden van het waarom. Ik heb er ook over nagedacht om een externe tool te gebruiken zoals curl, maar deze wordt geblokkeerd door de beveiligingsinstellingen op de computer, daarnaast zou ik het ook liever in PS houden.

No keyboard detected. Press F1 to continue.

Alle reacties


  • mufana
  • Registratie: Mei 2009
  • Laatst online: 31-01 14:12
Beetje lastig om zo te zeggen want ik weet niet precies wat je wilt doen.

Met een <Invoke-RestMethod> zou dit echter gewoon moeten lukken.

Heb je het al geprobeerd met: <Invoke-RestMethod -Credential (Get-Credential)>

Anders zou je ook even met Postman kunnen kijken.

Trouwens, Curl wordt binnen PowerShell gewoon vertaald naar: Invoke-WebRequest.

[Voor 23% gewijzigd door mufana op 23-11-2018 14:10]


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 00:10
Invoke-WebRequest gebruikt de WebRequest class van .NET (in feite loop je nu dus deels hetzelfde te doen als met Invoke-WebRequest).
Maar wat voor query lukt niet? Ik zie in je code voorbeeld staan dat je de data als application/x-www-form-urlencoded post : normaal kun je deze in Powershell gewoon in je body kwijt (als een hashtable) waarna dit automatisch omgezet wordt naar een query.

Voorbeeld :
PowerShell:
1
2
$body = @{user = 'pietje';password = 'puk'}
Invoke-WebRequest -Uri www.google.nl -Body $body -Verbose

Dit wordt het volgende (volgens de Verbose output) :
VERBOSE: GET http://www.google.nl/?user=pietje&password=puk with 0-byte payload

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 05:34

Blokker_1999

Full steam ahead

Topicstarter
Invoke-WebRequest ondersteunt geen form data waarbij je een element als array wil doorsturen. Bijvoorbeeld ?item[]=1&item[]=2 omdat je dan 2x de key item[] gebruikt. Dit stukje code heb ik gevonden om rond die beperking heen te werken.

Na verder zoeken ben ik er uiteindelijk uitgekomen dat er helemaal niets mis lijkt te zijn met de code en dat het probleem in de app moet zitten. Van zodra er een body wordt meegestuurd zal de app namelijk geen NTLM authenticatie meer vragen maar wil deze verdergaan op de bestaande sessie.
Trouwens, Curl wordt binnen PowerShell gewoon vertaald naar: Invoke-WebRequest.
Klopt, daarom ook dat ik curl van het internet had gedownload om dan tegen een blokkering aan te lopen (stupid company computer).

No keyboard detected. Press F1 to continue.



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee