web(18)
-
Dreamhack.io/ 해킹입문, xss
Dreamhack.io를 풀기 시작했다. xss 문제를 보자 선린인터넷고 2020 모의해킹방어대회에서 xss문제를 못풀었었던게 생각나서 풀어 보았다. 플래그는 flag.txt, FLAG변수에 있다고 한다. 위 xss와 memo를 들어가보면 xss파리미터로 전송된 값이 html로 출력되는 듯 하다. 내가 xss 코드를 입력할 장소는 flag이다. 저곳에 xss코드를 입력해서 서버의 봇이 이 페이지를 방문했을때 해당봇의 쿠키를 내 서버로 옮겼더니 플래그가 나왔다. 나는 서버를 가지고 있지 않아서 goorm.io 에서 컨테이너를 만들어 해당 문제를 해결했다. 구름에 노자서버를 만들어 놓고 다음과 같은 스크립트를 문제에 삽입했다. 내 구름서버로 봇의 쿠키가 전송되는것을 볼 수 있었다.
2020.08.05 -
2020 RACTF - C0llide?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 const bodyParser = require("body-parser") const express = require("express") const fs = require("fs") const customhash = require("./customhash") const app = express() app.use(bodyParser.json()) const port = 3000 const flag = "flag" const secret_key = "Y0ure_g01nG_t0_h4v3_t0_go_1nto_h..
2020.06.10 -
LOS - iron golem
소스코드를 봤을땐 sql이 에러가 나는지 안나는지만 구별할 수 있는 문제같다. 실제로 pw='dasdasdasd 이렇게 아루거나 써보면 다음과 같이 에러가 표시되는걸 볼 수 있다. 이 문제는 ' or ' 의 왼쪽이 참일때 오른쪽을 실행하지 않는 특징이나 ' and '의 왼쪽이 거짓일때 오른쪽을 실행하지 않는 특징을 이용하면 될 것 같다. 그래서 다음과 같이 파이썬 코드를 짜 보면 문제가 해결될 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ..
2020.05.14 -
HackCTF - Wise Saying
sql injection이 질려서 잠깐 HackCTF로 넘어왔다. 로그인은 아무 글자나 입력해도 로그인이 된다. 그게 중요한게 아닌가보다. 페이지별로 wise한 말씀이 있는 것 같다. 그리고 페이지소스를 보면 ?phpinfo=1 이라는 힌트가 있다. phpinfo를 관람할 수 있게 되었다. 여기서 취약점의 힌트를 얻을 수 있는 것 같다. 발견한 취약점으로는 allow_url_fopen 이 있었다. allow_url_fopen 기능이란 php 에서 include 를 사용할때 URL 방식으로 파일을 include 할수 있도록 해주는 기능이다. 아무래도 이걸 이용한 문제인것같다. 아까 page=1.say 같은 파리터에서 1.say는 실제 존재하고있는 파일이고 그걸 include해서 내용을 출력한게 아닌가 싶다..
2020.05.10 -
LOS - xavis
이번문제는 핵심힌트를 write-up을 봐버린 문제이다. 겉으로 봐선 평범한 blind sql injection 문제처럼 생겼다. 하지만 그동안 짜온 blind sql injection 코드를 이용하여 돌리면 답이 나오지 않는다. 일단 pw의 substr(pw,1,1)의 길이를 보면 비밀번호는 유니코드로 되어있던 것이다.. 유니코드는 https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_%EC%98%81%EC%97%AD 유니코드 영역 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 유니코드에는 연속된 코드 포인트의 집합인 영역(block, 블록)들이 있다. 각 영역의 이름은 유일하며, 그 범위는 다른 영역과 겹치지 않..
2020.05.09 -
LOS - zombie_assassin
쿼리를 참으로 만들기만 하면 입력한 문자열은 addslashes 함수를 거쳐서 strrev 함수에 의해 거꾸로 바뀌어 쿼리에 들어가게 된다. 서큐버스문제처럼 id에 \를 넣으면 id='\\' 와 같이 들어가게 된다. 만약 \이 아닌 addslashes함수가 \를 붙이는 문자는 "하고... "밖에 생각나지 않는다. 어쨋든 "를 넣어주면 서큐버스문제처럼 id에 들어가는 문자열은 "' and pw= 가 되고 뒤에 '이 남게 될 것이다. 그럼 '가 마지막에 찍히는것을 알고있으니 || 1=1 #(주석) 을 넣어주면 쿼리가 참이 나오게 될 것이다. strrev함수를 거치므로 이걸 반대로 넣어주면 %23%201=1%20||%20 (%20은 띄어쓰기이고 %23은 #이다)
2020.05.08