socat daemonize

자료 2019. 7. 22. 02:00
반응형

동아리 신입생 여름방학 교육 마지막을 장식할 CTF를 여는데, 서버관리를 전부 내가 다하게 됐다. (할 사람이 없음)

 

docker로 환경 구축하고 적당히 문제 설정까지 완벽하게 한다음 올린다.

 

아래와 같이 이전에 사용하려고 했던 방식은 얼마든지 사용자가 권한을 얻었을 경우, socat parent를 종료시킬 수 있는 문제가 발생했다.

su - [user] -c "socat ..."

 

그래서 socat에 setuid, setgid가 있었으면 좋겠다 싶어서 구글링해보니 있었다. 간단하게 python으로 코드 짜서 올린다.

 

from os import system
import sys
import argparse

parser = argparse.ArgumentParser(description='socat daemonize')
parser.add_argument("P", metavar="homepath", type=str, help="daemon home path")
parser.add_argument("p", metavar="port", type=int, help="port")
parser.add_argument("g", metavar="gid",type=str, help="setgid")
parser.add_argument("u", metavar="uid",type=str, help="setuid")
parser.add_argument("b", metavar="binary",type=str, help="binary")

args = parser.parse_args()
home_path = args.P
port = args.p
gid = args.g
uid = args.u
binary = args.b

system('cd {}; socat TCP-LISTEN:{},setgid={},setuid={},reuseaddr,fork EXEC:"{}" 2>/dev/null &'.format(home_path, port, gid, uid, binary))

 

socat에서 setgid, setuid를 통해 적당히 권한을 낮추고 바이너리 실행하면 된다.

'자료' 카테고리의 다른 글

[acme.sh] https 인증서 갱신 자동화 - nginx  (3) 2020.12.14
DDos + Syn flooding firewall  (0) 2019.10.03
[Conoha/VPS] KernelPanic 복구  (0) 2018.12.16
[Conoha] letsencrypt wildcard 인증서 발급  (0) 2018.12.09
Profile  (0) 2018.10.25
블로그 이미지

KuroNeko_

KuroNeko

,