일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Crypto
- Bob
- 예전글 #CNN
- pwn.college
- 예전글 #PS
- XSS
- PS
- SQLi
- JS
- web
- blind_sqli
- 예전글
- cookie
- HTB
- 백준
- pwn
- cryptohack.org
- SECGAME
- blind-sqli
- pwnable
- regex
- Pwnable.kr
- webhacking.kr
- cce2023
- Today
- Total
목록Study/Hacking (40)
아모에요
SQLi는 맞는데 필터링이 걸려있는 문제 소괄호는 필터링이 되어있지 않는다. if(true,1,1234) 형태로 입력하면 if조건문에서 no=1이 되고 Apple이 출력된다. 반대로 조건이 false가 되면 no=1234가 되면서 Apple이 출력되지 않는다. blind-sqli로 풀리는 문제 같은데.. 필터링이 빡세서 어떻게 해야할지 고민했다. no=3이면서 id를 구해야하는데.. no가 3이라는걸 어떻게 조건을 맞출까 생각하다가 if(조건문,1,1234)를 입력했을때. 쿼리상에는 다음과 같은 쿼리가 입력되었을 것이다. SELECT text FROM table WHERE no=if(조건문,3,1234) db테이블에 최소 3개의 컬럼이 존재하고 각각 text = 반환되는 텍스트 (no=1일때 Apple,..
"); }echo("Admin page");if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!");$db = dbconnect();$rand=rand(1,5);if($rand==1){ $result=mysqli_query($db,"select lv from chall7 where lv=($go)") or die("nice try!");}if($rand==2){ $result=mysqli_query($db,"select lv from chall7 where lv=(($go))") or die("nice try!");}if($rand==3){ $result=mysqli_query($db,"select lv from chall7..
보호되어 있는 글입니다.
문제 소스를 보면 base64로 20번 인코딩하고 문자열을 치환한 값이 쿠키에 저장된다. 이를 역산한 값이 admin, nimda이면 문제가 풀린다. 어렵지 않게 이를 코드로 짤 수 있다. admin, nimda를 20번 인코딩한 값은 import base64 def encode(text): text_bytes = text.encode('ascii') text_base64 = base64.b64encode(text_bytes) tb64str = text_base64.decode('ascii') return tb64str id = "admin" pw = "nimda" for i in range(20): id = encode(id) pw = encode(pw) print(id) print(pw) 의 코드로 ..
접속하면 login, join 두개의 버튼이 존재하고 join은 작동을 안한다. login.php에 들어가봐서 온갖 SQLi를 시도해도 먹히지 않는다. 뭔가 힌트를 얻을 수 있을까 싶어 /web-05/mem/에 접속해보았더니 보이지 않던 join.php가 존재함을 알 수 있다. join.php에는 괴상한 자바스크립트가 존재하는데 이를 뷰티파이어에 넣고 분석해보자. l = 'a'; ll = 'b'; lll = 'c'; llll = 'd'; lllll = 'e'; llllll = 'f'; lllllll = 'g'; llllllll = 'h'; lllllllll = 'i'; llllllllll = 'j'; lllllllllll = 'k'; llllllllllll = 'l'; llllllll..
문제 소스를 보면 hash가 (1000000~99999999)salt_for_you 형태의 값으로 결정되고 이를 500번 sha1 해시화한 것이 표시되는 해시값이다. 10000000~19999999 까지의 해시값의 앞 8글자정도만 구한 다음에 이 데이터와 맞는 숫자를 대입해주면 문제가 풀린다. [hash.txt를 생성하는 코드] import hashlib import tqdm f = open("./hash.txt","w") for i in tqdm.tqdm(range(10000000,20000000)): sess = str(i) + "salt_for_you" res = sess for j in range(500): res = hashlib.sha1(res.encode("ascii")).hexdigest(..
사이트에 접속하면 노노그램이 주어진다. 이를 해결하면 로그를 위해서 이름을 입력하라고 나온다. 이름을 입력한 뒤 submit를 누르면 POST 요청이 보내지는데, answer=1010100000011100101011111과 id=이름 형태의 데이터가 전달된다. id에는 어떤 데이터를 입력해도 취약점이 보이지 않지만, answer에 '1'+'1'과 같은 데이터를 넣으면 query error라고 표시된다. 가장 기본적인 SQLi 구문을 넣으면 문제가 풀린다.
처음 이 문제를 봤을 땐 와 저걸 진짜 어떻게 풀지, 싶었는데 CTF를 여러번 뛰고 나니까 감이 잡히는 문제입니다. 페이지 소스를 보면 와 같이 쓸데없는 주석이 있습니다. 쿠키도 확인해보면 time이라는 값이 있네요. time의 값을 변경해봅시다. true로 변경하면 2070-01-01 09:00:01으로 바뀌고 false로 변경하면 2070-01-01 09:00:00으로 변경됩니다. admin.php에 접근하면 엉덩이를 차버린다 했으니 SQL 구문을 사용할 확률이 높겠네요. 직접적으로 SQL 결과값을 알 순 없고 true, false 값이나 숫자 값만 알 수 있으므로 Blind SQL Injection 공격을 시도해봅시다. 먼저 테이블 개수를 구하려면 (select count(*) from inform..
webhacking.kr 문제를 풀 때 인터넷 검색으로 힌트얻어서 푼 문제가 많았는데, 순수 실력으로 도장깨기를 시작하겠습니다. view-source를 통해서 소스를 보면 user_lv이라는 쿠키값이 설정이 안되어있을 때 설정됩니다.
보호되어 있는 글입니다.