[Dreamhack] JS is the best
·
워게임/웹해킹
보호되어 있는 글입니다.
포트 포워딩
·
etc
1. IP 고정IP를 고정시키는 가장 큰 이유는, 네트워크 요청이 항상 같은 장치로 정확히 도달하도록 하기 위함이다.특히 포트 포워딩은 외부에서 들어오는 요청을 특정 내부 IP 주소를 가진 장치로 연결해주는 설정이기 때문에, 해당 장치의 IP가 바뀌면 포트 포워딩 설정이 무효화된다.이는 대부분의 네트워크에서 사용되는 DHCP(Dynamic Host Configuration Protocol) 때문이다.DHCP는 장치가 네트워크에 접속할 때 자동으로 IP 주소를 임대(할당)해주는 기능을 한다. 하지만 이 IP 주소는 영구적인 주소가 아니라 일정 시간 동안만 유효한 임시 주소이다.다음과 같은 상황에서는 IP가 변경될 수 있습니다:장치를 껐다 켜거나 공유기를 재부팅한 경우DHCP 임대 시간이 만료되어 새롭게 I..
SQL Injection 최적화
·
보안/웹
목적SQL Injection은 단순히 "주입이 된다 / 안 된다"의 문제가 아니다. 단 한 번의 쿼리로 모든 것을 알 수 있다면 좋겠지만, 현실에서 대부분의 SQLi는 부분적인 정보 획득을 위한 수많은 요청의 반복으로 이루어진다. 특히 Blind SQL Injection, Time-based Injection 으로 제한된 환경에서는 더더욱 그렇다.예를 들어, 직접 출력이 없는 Blind SQL Injection 상황에서 FLAG 값을 하나하나 알아내려면 다음과 같은 방식이 사용된다.' and substr(flag, 1, 1) = 'a'-- - Blind SQL Injection에서는 서버의 직접적인 응답 대신 참/거짓에 따른 간접적인 반응(예: 시간 지연, 응답 내용 차이)을 통해 데이터를 추출한다. 이..
Wembsoncket
·
CTF Write Up/BYU CTF 2025
코드 분석더보기server.jsJWT 토큰을 확인해 사용자를 인증하고 /getFlag 메시지를 받을 경우 FLAG를 보내준다. // WebSocket connection handlerwss.on('connection', (ws, req) => { // Get the userId from the cookie const userId = req.headers.cookie ? req.headers.cookie.split('token=')[1] : null; if (userId) { try { const decoded = jwt.verify(userId, JWT_SECRET); const user = decoded.userId; sendMsg(ws, `Welcome! Send..
JWTF
·
CTF Write Up/BYU CTF 2025
코드 분석더보기server.pyJWT를 이용해 관리자 여부를 확인하고, JRL에 등록되지 않은 유효한 토큰에 한해 FLAG를 반환하는 구조이다.# JRL - JWT Revocation Listjrl = [ jwt.encode({"admin": True, "uid": '1337'}, APP_SECRET, algorithm="HS256")]# get flag if you are an admin@app.route('/flag', methods=['GET'])def flag(): session = request.cookies.get('session', None).strip().replace('=','') if session is None: return redirect('/') ..
Cooking Flask
·
CTF Write Up/BYU CTF 2025
코드 분석더보기No Source Code Exploit사용자가 입력할 수 있는 부분은 recipe_name, description, tags가 있다. 공격 표면이 제한적이고 소스 코드가 없는 블랙박스 환경이므로 서버가 돌려주는 에러 메세지를 잘 확인할 필요가 있다.우선, sqli 페이로드를 tags에 넣었을 때 아래와 같은 sqlit3.OperationalError가 발생했으며 주석 유무에 따라 출력 결과가 다르다는 것을 알 수 있다.dessert' or 1=1→ sqlite3.OperationalError: unrecognized token: ""%')"dessert' or 1=1-- → sqlite3.OperationalError: incomplete input 주석이 없을 때 "%') 토큰이 인식되..
Willy Wonka Web
·
CTF Write Up/BYU CTF 2025
코드 분석더보기server.jsa라는 HTTP 헤더가 있고 그 값이 admin이면 FLAG를 반환된다.// endpointsapp.get('/', async (req, res) => { if (req.header('a') && req.header('a') === 'admin') { return res.send(FLAG); } return res.send('Hello '+req.query.name.replace("","")+'!');}); httpd.conf백엔드 서버에 요청이 가기 전 리버스 프록시가 설정되어 있어 a라는 헤더가 삭제된다.LoadModule rewrite_module modules/mod_rewrite.soLoadModule proxy_module module..
Red This
·
CTF Write Up/BYU CTF 2025
코드 분석더보기insert.redis관리자 비밀번호는 admin_password라는 키 이름으로 저장되어 있으며 FLAG는 admin_options에 포함되어 있다.set key valueset "FDR" "The only thing we have to fear is fear itself."set "Shakespeare" "To be, or not to be, that is the question."set "Mandela" "The greatest glory in living lies not in never falling, but in rising every time we fall."set "Theodore Roosevelt" "Believe you can and you're halfway there."..
LangChain artifact 분리
·
AI4C
툴 실행 결과 중 일부는 모델에는 숨기고, 체인이나 후속 툴에서는 활용할 수 있도록 따로 관리하고 싶을 수 있다.예를 들어, 전체 Document 대신 모델에는 요약만 보여주고, 실제 데이터는 내부적으로 유지하고 활용하고자 할 수 있다. Tool과 Tool Message 인터페이스를 사용하면, 모델에게 보여줄 툴 출력 부분(TooleMessage.content)과 모델 외부에서 사용할 출력 부분(ToolMessage.artifact)을 구분할 수 있다. 해당 기능은 langchain-core 0.2.19 이상 버전에서 도입되었으며, 사용하려면 최신 버전이 설치되어 있어야 한다.툴에서 메시지 내용과 그 외 데이터를 구분해서 반환하고 싶다면 툴을 정의할 때 response_format="content_and..
LangChain Handling Tool Errors
·
AI4C
LangChain의 에이전트가 툴 사용 중 에러를 만나도 멈추지 않고 적절히 처리하고 계속 실행되게 하려면, 에러 핸들링 전략이 필요하다. Tool Exception일반적인 raise Exception이 아니라 Tool Exception을 던져야 LangChain이 에이전트 차원에서 인식할 수 있다. 툴 객체 생성 시 handle_tool_error 옵션을 반드시 줘야 한다. handle_tool_error=False(default)이면 ToolException이 던져져도 그냥 예외로 끝나게 된다.from langchain_core.tools import StructuredToolfrom langchain_core.tools import ToolExceptiondef get_weather(city: st..