아주간단한 방법으로 C의 system함수를 써서("wget http://어쩌고.com/test.cgi?id=iopoo") 저장된 파일을 읽으면 될듯하군요.
이건 좀 무식한 방법이지만...
이런식의 방법이 왜 무식한 건지 모르겠군요. :)
system()이라는 함수는 원래가 좀 보안상 홀이 많은 함수라 할 수가 있습니다.
아주쉬운 예로...
만약 실행하고자 하는 프로그램에대한 full-path를 주지 않는 경우 이 실행파일에 Set-UserID라도 붙어있고... root 사용자 파일이면 아주 문제는 심각해 지겠죠...
단지 PATH 환경 변수에 "." 이 dot을 하나를 추가 해주는 것만으로도 원하는 작업은 뭐든지 할 수가 있으니요...
그렇다고 full-path를 준다고 해도...
IFS 와 같은 환경 변수를 이용한 local-attack에도 취약 할 수가 있습니다.
(파일의 구분 단위를 " " space가 아닌 "/" 이 놈으로 바꾸는 것만으로도 또 문제가 생길 수가 있겠죠... 근데 요즘엔 이 환경 변수 먹질 않죠^^)
그리고 man 에서 보면은 인터럽트를 무시하는 버그도 있다고 하고...
뭐... 또 짱구를 굴리기에 따라서 문제의 소지가 있는 함수이니 사용을 지양하는게 좋을것 같군요...
테스트 코드가 아니라면...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
가능합니다.http규약에 따라 헤더 구성해서 보내고,날아오
가능합니다.
http규약에 따라 헤더 구성해서 보내고,
날아오는 것도 http 규약에 따라 해석하면 됩니다.
http 규약을 볼 시간이 없으면, 해당 페이지를
웹브라우저로 호출해 보고, 그 과정을 패킷 캡쳐해서
그대로 사용해도 별 문제 없습니다. 간단한 것은....
더 궁금점이 있으면 나중에.. 지금은 바빠서리~~ :lol:
소켓으로 웹서버에 접속해서 요청해서 날라오는 결과값을 받으면 될거같은데요
소켓으로 웹서버에 접속해서 요청해서 날라오는 결과값을 받으면 될거같은데요.
유닉스 네트워크프로그래밍 소켓관련 서적을 보시면 잘 나와있습니다.
아니면, 아주간단한 방법으로 C의 system함수를 써서("wget http://어쩌고.com/test.cgi?id=iopoo") 저장된 파일을 읽으면 될듯하군요.
이건 좀 무식한 방법이지만...
[code:1]#include <stdio.h>#i
지금 생각나는데로 써서 틀릴수도 있습니다.
웹상에서
http://192.168.1.1/cgi-bin/test.cgi?id=1&name=park
이런식으로 해보세요...
그러면 argument로 넘어간 것을 printf로 뿌려질겁니다.
[/code]
One must, In fact, Love your pursuit
My home is below...Well, just go own your gait!
왜 무식한 방법인지?
이런식의 방법이 왜 무식한 건지 모르겠군요. :)
--
Life is short. damn short...
Re: 왜 무식한 방법인지?
system() 함수를 사용하는 경우 생기는 단점을 모두 가지게 됩니다.
게다가, 이렇게 하는 경우 장점이라고는 코드의 간략함 정도밖에는 없죠.
Re: 왜 무식한 방법인지?
system()이라는 함수는 원래가 좀 보안상 홀이 많은 함수라 할 수가 있습니다.
아주쉬운 예로...
만약 실행하고자 하는 프로그램에대한 full-path를 주지 않는 경우 이 실행파일에 Set-UserID라도 붙어있고... root 사용자 파일이면 아주 문제는 심각해 지겠죠...
단지 PATH 환경 변수에 "." 이 dot을 하나를 추가 해주는 것만으로도 원하는 작업은 뭐든지 할 수가 있으니요...
그렇다고 full-path를 준다고 해도...
IFS 와 같은 환경 변수를 이용한 local-attack에도 취약 할 수가 있습니다.
(파일의 구분 단위를 " " space가 아닌 "/" 이 놈으로 바꾸는 것만으로도 또 문제가 생길 수가 있겠죠... 근데 요즘엔 이 환경 변수 먹질 않죠^^)
그리고 man 에서 보면은 인터럽트를 무시하는 버그도 있다고 하고...
뭐... 또 짱구를 굴리기에 따라서 문제의 소지가 있는 함수이니 사용을 지양하는게 좋을것 같군요...
테스트 코드가 아니라면...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
Re: 왜 무식한 방법인지?
좋은 지적이네요.
단 제말의 의도는 꼭 system을 사용하라는 얘기가 아니라, binary의 process단위의 재활용을 너무 무시하지 말자는 얘기였죠.
코드의 간략함은 결코 작은 이익이 아니라고 생각합니다. 또한 라이브러리나 바이너리를 재활용 하는것이 간략함만을 추구하는것은 아니죠. 간략하고, 무엇보다 견고하기 때문이 아닌가요?
--
Life is short. damn short...
[quote="gnoygnas"][code:1] buffer = &#
QUERY_STRING이 400 byte보다 더 길 경우에 문제가 될 수 있습니다. strlen으로 길이를 맞추거나, snprintf류를 쓰는게 좋겠죠.
만사 불여튼튼!
댓글 달기