68번째 글. 1. 코드 분석 지금부터 올라오는 문제들은 다 modsecurity(WAF)가 걸려있다. WAF가 걸려있어도 쉽게 우회하여 풀 수 있는 문제들은 writeup을 따로 올리지 않았다. union select를 사용하라고 나와있다. 2. Exploit id=\&pw= union select 'first', 'second'%23(안 댐) 위처럼 계속해서 쓰던 방법으로 백 슬래시를 이용하여 우회하는 방법이 먹히지 않았다. https://github.com/SpiderLabs/owasp-modsecurity-crs/issues/1181 Bypass the latest CRS v3.1.0 rules of SQL injection · Issue #1181 · SpiderLabs/owasp-modsecu..
66번째 글. 1. 코드 분석 앞 문제와 똑같지만 문자열 'ace'가 필터링돼있기 때문에 replace() 함수를 쓰지 못할 것이다. 2. Exploit information_schema 데이터베이스에 processlist라는 테이블이 있다. 이 테이블을 살펴보면 info라는 컬럼에 바로 직전에 질의한 쿼리문이 저장되어있다. 이 테이블과 substr을 이용하여 result에 담길 pw값과 쿼리 스트링을 통한 pw값을 똑같게 만들 수 있을 것 같다. ?pw=' union select substr(info, 38, 72) from information_schema.processlist%23 substr() 함수에서 3번째 인자를 안 줘도 될 것 같았지만 쿼리 맨 마지막에 #옆에 single quote가 있으..
65번째 글. 1. 코드 분석 뭔가 딱 보기에 풀었던 문제들과 매우 흡사하다. 온전한 pw값을 찾으면 될 거 같다. 2. Exploit 하지만 역시 쉽게 풀리지 않았다. ?pw=' or 1=1%23을 넣었을 때 pw가 아무것도 출력되지 않았다. 그 말은 즉슨 테이블에 값이 하나도 없다는 뜻이다.... 이렇게 union을 섞어서 값이 없음을 확인하였다. 그렇다면 무슨 수로 쿼리 스트링 형식으로 준 값과 db의 결괏값을 일치시킬까? 역시 답은 구글링 Quine Query를 이용하는 것이다. Quine은 메타 프로그램의 일종이며 입력 없이 자기 자신의 소스코드를 출력하는 프로그램을 뜻한다. (자세한 이해는 Reference에 걸어두었다. 친절하게 설명해주셔서 쉽게 이해할 수 있었다.) Reference htt..
64번째 글. 1. 코드 분석 쿼리 스트링을 통해서 joinemail에 값을 전달하면 no가 0이고 내 아이피 주소가 함께 DB에 입력된다. no=1 또는 ip가 내 아이피이면 테이블에 데이터가 출력된다. no=1인 email의 주소를 알게 되면 문제가 풀리게 된다. 2. Exploit 일단 괄호를 필터링하지 않으므로 우리는 원하는 값을 insert 할 수 있다. 또한 이전 문제들과 다르게 DML이 필터링 되지 않기 때문에 서브 쿼리를 통해서 no=1의 email을 가져와서 내 아이피만 넣어주면 쉽게 풀 수 있다. ?joinmail=asd1234'), (2,'내 아이피',(select email from prob_phantom as p where no=1))%23 여기서 주의할 것은 같은 테이블을 참조하..
63번째 글. 1. 코드 분석 union과 괄호를 쓸 수 없었다. 쿼리를 실행하고 에러가 발생하면 'error'를 출력한다. admin의 pw값을 찾으면 문제가 풀리게 된다. 2. Exploit 일단 괄호가 필터링되기 때문에 주요한 함수를 쓸 수 없다. 또한 union도 막혔다... 에러를 발생시키는 것은 지금껏 많이 했기 때문에 어렵지 않지만 문제는 어떻게 함수와 union을 안 쓰고 우회하느냐 인데 결국은 구글링의 도움으로 case문을 찾았다. ?pw=' or case when id='admin' and pw < 특정값 then 9e307*2 else 1 end%23 이렇게 주게되면 when의 조건이 참이면 9e307*2을 할당해 에러를 발생시킨다.정확한 크기비교를 위해서 hex값을 이용해서 특정값을..
62번째 글. 1. 코드 분석 특이한 것은 쿼리를 날리고 single quote와 \를 필터링하고 있었다. (이 사실을 찾는데 오래걸림;; 항상 넓게 보자) 그 외에 특별한 점은 없었다. 2. Exploit 위에서 말했듯이 쿼리를 날리고 필터링하기 때문에 sleep() 함수를 이용해서 비밀번호를 찾을 수 있었다. ?pw=' or if(id='admin' and length(pw)=특정 숫자,sleep(5),1)%23 이렇게 하면 pw의 length가 brute force한 값과 맞으면 sleep이 일어나서 쿼리를 보낸 이후에 필터링이 돼도 내가 원하는 값을 알아낼 수 있다. import requests import string import time sess = requests.session() heade..
61번째 글. 1. 코드 분석 id의 길이가 7글자를 넘으면 'too long string'이라는 문자열을 출력하고 쿼리 스트링인 no가 숫자이면 그 숫자를 no 변수에 넣고 숫자가 아니면 1을 넣는다. 그리고 반환되는 아이디에 따라서 'Hello id'를 출력한다.(즉 블라인드 인젝션인 것 같다) 마지막으로 admin의 정확한 no를 입력하면 문제가 풀리게 된다. 2. Exploit ?id=%27||no>%23&no=%0a특정값 이렇게 주게 되면 #은 한 줄 주석이기 때문에 개행 문자를 이용해서 escape할 수 있다. 그리고 비교 연산자를 이용해서 blind injection을 할 수 있다. 나는 100000000부터 1000000000까지의 범위를 잡고 이진 탐색 비스무리(?)하게 코드를 실행했다...
60번째 글. 1. 코드 분석 single, double quote는 필터링되고 있었다. query에서 쿼리 스트링으로 id와 pw 값을 받고 그 조건에 맞는 id와 pw를 조회하여 그것을 다시 query2의 조건문에 조건으로 입력한다. 결과적으로 query2의 결과의 id가 admin이면 문제는 풀리게 된다. 2. Exploit '\'을 이용해서 single quote를 escape하는 것은 전에 풀던 문제에서도 나왔기 때문에 알았다. 하지만 id=admin을 해봐도 결과가 출력되지 않아서 한 가지 의문이 들었다. 테이블에 값이 없는 것이다. 그렇다면 적절하게 union을 섞어주면 임의의 값을 넣을 수 있지 않을까?라는 생각을 하였다. ?id=\&pw=union select 1,2%23 이렇게 주게되면..
- Total
- Today
- Yesterday
- WebHacking
- php LFI
- 웹해킹
- dreamhack Relative Path Overwrite
- Windows Fundamentals
- dreamhack DOM XSS
- dreamhack CSS Injection
- csp
- 해커팩토리
- wargame
- htb
- webhacking.kr
- 드림핵
- SQL Injection
- blind injection
- csp bypass
- xxe injection
- CSS Injection
- LFI vulnerability
- dreamhack web-alasql
- hack the box
- alasql
- 드림핵 padding oracle
- Lord of SQL injection
- DreamHack
- 드림핵 Relative Path Overwrite
- htb Windows Fundametals
- hackerfactory
- dreamhack padding oracle
- 드림핵 DOM XSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |