보안 진단을 하며 여러 유형의 HTTP 요청을 보내는 일이 잦은데요,
curl 대신 유용하고 편리하게 사용할 수 있는 HTTPie를 사용하고 있습니다.
기본적인 사용법이 아닌, 헷갈리거나 기억하기 어려운 유형들을 모아봤습니다.
(사실 제가 사용하려고 모아둔겁니다.)
혹시 틀린 점이 있다면 댓글로 알려주세요! ☺
GET + Parameter with NULL#
NULL 값은 URL에 포함시켜 요청해야 합니다.
http -v GET "http://skitttles.me/test?hello=world%00"
아래와 같이 HTTPie 명령어 포맷에 맞춰 요청할 경우, %가 URL 인코딩되어 요청됩니다.
http -fv GET https://google.com/test "hello==world\%00"
GET /test?hello=world%5C%2500 HTTP/1.1
...
GET Param[0]=value&Param[1]=value2#
http -fv GET http:/skitttles.me/test "hello[0]==world" "hello[1]==world2"
GET key[please]=1#
http -fv GET http:/skitttles.me/test "key[please]==1"
Header X-Forwarded-Host#
X-Forsarded-Host
리버스 프록시(LB, CDN)가 포함된 환경에서는 호스트와 포트가 변경될 수 있는데,
이러한 환경에서 실질적인 호스트를 표시할 수 있는 헤더입니다.
http -v GET http:/skitttles.me/test X-Forwarded-Host:ruff.com
GET /path/../path#
이러한 유형의 요청은 여러 계층의 역방향 프록시가 있는 애플리케이션을 테스트할 때 매우 유용합니다.
--path-as-is
옵션 설정
http -v --path-as-is GET http:/skitttles.me/test/../test
GET /path;path#
--path-as-is
옵션 설정
http -v GET "http:/skitttles.me/test;test"
GET /path#path#
이러한 유형의 요청은 여러 계층의 역방향 프록시가 있는 애플리케이션을 테스트할 때 매우 유용합니다.
❯ http -v GET "http:/skitttles.me/test%23test"
POST Multipart File#
http -fv POST http:/skitttles.me/test 'file@dummy.txt'
POST Multipart + filename=../#
httpie로는 filename에 ../
을 추가하여 전송이 안됩니다.
[ HTTPie ]
http -fv POST http:/skitttles.me/test 'filename@dummy.txt;filename=../../dummy.txt'
# http: error: 'filename@dummy.txt;filename=../../dummy.txt': [Errno 2] No such file or directory: 'dummy.txt;filename=../../dummy.txt'
curl로 아래와 같이 파일명을 변경하여 전송 가능하였습니다. [ curl ]
❯ curl --verbose http:/skitttles.me/test \
-F "filename=@dummy.txt;filename=../../dummy.txt"
POST XML data#
XML 포맷이 올바르지 않은 경우, 인코딩하여 전송합니다.
cat dummy.xml | http -v POST http:/skitttles.me/test Content-Type:application/xml
POST YAML#
yaml 포맷을 지켜야 합니다. (key: value)
http -fv POST http:/skitttles.me/test Content-Type:application/yaml \
--raw="key: please"
GET Basic Auth#
http -v -a id:password GET http:/skitttles.me/test