반응형

기존에 쓰던 인증서 스크립트가 정상작동하지 않아서 좀 더 편하게 인증서 갱신할 수 있는지 찾아봤더니 acme.sh라는 let's encrypt 인증서 자동 갱신 도구를 누군가 만들어뒀다.

(개꿀)

먼저, 아래와 같은 명령어를 입력해서 acme.sh를 설치하자.

 

curl https://get.acme.sh | sh

 

설치가 완료되었다면 bash: . ~/.bashrc, zsh: . ~/.zshrc 입력한 이후, acme.sh를 입력하면 다음과 같이 help 가 나오면 된다.

acme.sh help

위와 같이 정상적으로 나온다면, 인증서를 생성해야 한다. 하지만 그전에 먼저 mkdir -p /etc/nginx/ssl와 같이 nginx폴더 안에 ssl 폴더를 생성하자.

mkdir ssl

위와 같이 ssl 폴더를 생성하면, 아래의 명령어를 입력해서 dns TXT 레코드에 등록해야할 값이 나온다.

acme.sh --renew --issue --dns --force -d [domain1] -d [domain2] --yes-I-know-dns-manual-mode-enough-go-ahead-please

도메인 한개만 얻고 싶을 경우, -d 옵션을 하나만 주면 된다.

dns challenge TXT value

이걸 도메인 서버에 등록을 해야하니 위 그림에서 나온 값을 _acme-challenge에 아래와 같이 TXT값을 설정해주자.

TXT value 설정

위와 같이 설정을 했다면, 모든 준비가 끝났다. 아래의 명령어를 입력해서 인증서를 생성하는지 확인하자

acme.sh --renew --dns --force -d [domain1] -d [domain2] --yes-I-know-dns-manual-mode-enough-go-ahead-please

정상적으로 인증서를 생성됐다면,~/.acme.sh/[domain]/경로에 생성된다.

이제 인증서를 설치해야하는데, 이전에 생성했던 /etc/nginx/ssl 폴더로 복사를 진행해야한다. 복사하는 명령어는 다음과 같이 입력하면 된다.

acme.sh  --installcert  -d "[domain]"   \
        --key-file   /etc/nginx/ssl/[domain].key \
        --fullchain-file /etc/nginx/ssl/[domain]-fullchain.cer \
        --reloadcmd  "service nginx force-reload"

위와 같이 입력하면 해당 폴더에 복사가 진행되므로, 인증서 관련 작업은 모두 끝났다.

이제부터는 이 인증서를 이용해서 웹 서버에 설정을 해줘야하는데, 아래와 같이 설정해주면 된다.

# dhparam.pem 생성
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

# /etc/nginx/sites-enabled/[domain]에 아래의 설정 추가
server {
    ...

    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/[domain]-fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/[domain].key;
    include /etc/nginx/ssl/options-ssl-nginx.conf;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;

    ...
}

# vi /etc/nginx/ssl/options-ssl-nginx.conf 파일 생성
ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;

ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";

위와 같이 모두 설정한 이후에, service nginx restart를 실행해서 정상적으로 재시작되는지 확인하면 된다.

 

이제, 갱신을 자동화해야하므로 아래와 같이 스크립트를 만들어 실행하면 모든 인증서를 처리할 수 있도록 하면 된다.

 

 

 

마지막으로 crontab을 설정할 차례다. 아래의 설정을 crontab -e를 통해 저장하면 된다.

24 0 * * * /[renew.sh 경로]/renew.sh

 

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

DDos + Syn flooding firewall  (0) 2019.10.03
socat daemonize  (0) 2019.07.22
[Conoha/VPS] KernelPanic 복구  (0) 2018.12.16
[Conoha] letsencrypt wildcard 인증서 발급  (0) 2018.12.09
Profile  (0) 2018.10.25
블로그 이미지

KuroNeko_

KuroNeko

,
반응형
iptables -I INPUT -d [ip] -p tcp -m tcp --dport [port] -m state --state INVALID -j DROP 
iptables -I INPUT -d [ip] -p tcp -m tcp --dport [port] -m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460 
iptables -t raw -I PREROUTING -d 133.130.103.40 -p tcp -m tcp --syn --dport [port] -j CT --notrack 
/sbin/sysctl -w net/netfilter/nf_conntrack_tcp_loose=0 
/sbin/sysctl -w net/ipv4/tcp_timestamps=1 
/sbin/sysctl -w net/netfilter/nf_conntrack_max=2000000 
sh -c 'echo 2000000 > /sys/module/nf_conntrack/parameters/hashsize' # 8192 

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

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

KuroNeko_

KuroNeko

,

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

,
반응형

필자는 시험기간인데 시험공부는 하기 싫은 대학생이다.


어김없이 오늘도 시험공부하기 싫어서 CTF하고 있었는데, 설정을 잘못건드렸는지 libc버전이 아래로 내려갔다.


그래서 그런지 apt-get, dpkg 명령같이 최신 버전의 glibc가 필요한 명령어들을 쳐보면 아래와 같은 에러가 발생하게 됐다.


...

 runlevel: /lib/x86_64-linux-gnu/libc.so.6: version `glibc_2.27' not found

...


이때까지는 별생각없이 "아 그냥 껐다 켜볼까?"란 안일한 생각으로 reboot명령을 내리려는데 또 저런 에러가 나서 재부팅이 안되는거다.


그래서 그냥 강제로 conoha의 재부팅기능을 사용했는데, putty로 미리 ssh연결 대기타고 있었지만 접속이 안됐다.


그래서 한번 콘솔을 살펴봤더니, 에라이 시발커널패틱이 "뙇"하고 떠있는게 아닌가


결국 멘탈이 갈려나가면서 삽질해봤는데, 처음엔 grub으로 부팅해서 initramfs로 mount해서 파일만 가져올까란 생각을 했었다.


근데, 또 보니까 네트워크가 안되더라. (이때 개빡쳤다)


대신 번뜩인 방법이 있었는데, 필자는 conoha vps를 이용하고 있었고 추가 디스크를 넣어줄 수 있다는 걸 보게됐다.


그전까지는 돈없는 학생이라 안쓰고 있었던 기능인데, 복구용으로 예전에 백업해둔 서버이미지를 추가 디스크에 넣어주고


grub으로 해당 디스크로 부팅하도록 명령을 내렸다. 그 때 명령은 아래와 같다.


set root=(hd1,gpt2) # ls로 확인해봐야함

linux /boot/vmlinuz-4.15.0-39-generic root=/dev/vdb2 rw net.ifnames=0 biosdevname=0 # /dev/vda2가 기존꺼였고 /dev/vdb2가 추가디스크다.

initrd /boot/initrd.img-4.15.0-39-generic

boot


이렇게 명령을 내리고 부팅시켜버리면, 추가디스크에 올려진 백업 서버가 올라가게 된다.


이제 기존 디스크를 mount시켜서 파일을 오거나 해야하는데, 백업이 귀찮으니 libc만 맞춰주면 될거라는 생각에 아래의 링크로 가서 dpkg파일을 다운받았다.


https://packages.ubuntu.com/bionic/amd64/libc6/download


물론 다운로드 받는 경로는 mount된 경로에서 받아야한다. (다운로드받을 때는 백업 디스크를 사용, 다운로드 경로는 추가(고칠예정)디스크)


다운로드가 되었다면, chroot /[mount된 경로] 를 한 뒤, 아래의 명령을 수행해서 강제로 libc를 설정해주면 된다.


chroot /[mount 경로]

dpkg -i --force-all ~~.deb


이렇게 설치가 완료되면, apt-get update && apt-get install 을 해주고 나머지 libc들을 수정해주면 된다.

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

DDos + Syn flooding firewall  (0) 2019.10.03
socat daemonize  (0) 2019.07.22
[Conoha] letsencrypt wildcard 인증서 발급  (0) 2018.12.09
Profile  (0) 2018.10.25
[Pwntools] pyserial uninstall fail시  (0) 2018.07.17
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

시험기간인데 남는시간에 만들었음.


Conoha 서버를 사용하는 사람들만 사용가능함.


requirements는 certbot, argparse, requests가 있으면 됌.


링크: github link


/etc/cron.d/cerbot파일을 README에 있는대로 수정하면 됌

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

socat daemonize  (0) 2019.07.22
[Conoha/VPS] KernelPanic 복구  (0) 2018.12.16
Profile  (0) 2018.10.25
[Pwntools] pyserial uninstall fail시  (0) 2018.07.17
[Python] Mutation Fuzzer  (0) 2018.05.16
블로그 이미지

KuroNeko_

KuroNeko

,

Profile

2018. 10. 25. 00:54

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

pip install --ignore-installed pwntools를 해준 다음


pip install pwntools를 다시 해주면 설치가 완료된다.

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

[Conoha] letsencrypt wildcard 인증서 발급  (0) 2018.12.09
Profile  (0) 2018.10.25
[Python] Mutation Fuzzer  (0) 2018.05.16
[Library] vcpkg boost 1.66 설치에러 해결방법  (0) 2018.02.01
Abusing File Structure  (0) 2018.01.04
블로그 이미지

KuroNeko_

KuroNeko

,

[Python] Mutation Fuzzer

자료 2018. 5. 16. 23:56
반응형
Link

windbg에서 사용되는 cdb를 이용해 간단한 Mutation 퍼저를 만들었습니다.

간단하게 FuzzBase클래스를 상속하면 mutation 기능을 확장할 수 있게 만들어져있습니다.

현재 dump퍼저를 먼저 구현했고, smart 퍼저도 구현할 생각입니다.


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

Profile  (0) 2018.10.25
[Pwntools] pyserial uninstall fail시  (0) 2018.07.17
[Library] vcpkg boost 1.66 설치에러 해결방법  (0) 2018.02.01
Abusing File Structure  (0) 2018.01.04
[C++] Python format 구현  (0) 2017.12.03
블로그 이미지

KuroNeko_

KuroNeko

,