본문 바로가기

분류 전체보기

(214)
Webhacking.kr 2번 주석으로 현재 시간이 있고 admin.php가 있다고 함 이것 저것 해보다가 time값에서 sql injection이 발생하는 것을 찾음 참일 때에는 주석에 나타나는 시간이 01로 끝나고 거짓을 때에는 00으로 끝난다 이걸로 이제 database명을 알아낸다 데이터베이스 이름의 길이 6자 import requests url = "https://webhacking.kr/challenge/web-02/" session = requests.Session() password = "" for i in range(1,7): for j in range(43,127): cookie={"time":"0 or substr(database(),"+str(i)+",1)='"+chr(j)+"'","io":"54qu_79RqQy..
Webhacking.kr 50번 소스코드를 보면 id와 pw에서 addslashes함수가 적용되고 id는 인코딩 방식이 utf-8로 변환되며 GET방식으로 받은 값에 from, pw, (, ), , %, =, >, < 가 필터링되고 id값에서는 union이 필터링 SQL구문으로는 select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}') lv이 1 또는 2이면 화면에 출력되고 '3'이면 클리어 여기서는 id값의 인코딩 방식이 euc-kr에서 utf-8로 바뀌는 것을 봐야하는 것 같음 https://m.blog.naver.com/PostView.nhn?blogId=skinfosec2000&logNo=220535626029&proxyReferer=https%3A%..
Webhacking.kr 4번 SESSION['chall4']의 값을 맞추는건데 SESSION['chall4']의 값은 변수 hash의 값 $hash는 10000000~99999999+salt_for_you 문자열 결합으로 되어있고 나온값을 sha1로 500번 암호화 한것이 SESSION['chall4']의 값으로 들어간다 그래서 메인화면의 해쉬값을보고 SESSION['chall4']의 값을 맞추면 클리어 나도 이거 어떻게 푸는지 몰랐는데 홈페이지 메인화면에 rubiya님이 레인보우 테이블이용하는 거라 하셔서 풀었다 레인보우 테이블이란 특정한 HASH 결과가 어떤 문자열로부터 매핑되었는지 알 수 있게 HASH 결과들을 축적시킨 데이터(사전)을 만들어 둔 것을 말함 10000000salt_for_you --500sha1--> c42ec..
Webhacking.kr 8번 HTTP_USER_AGENT와 나의 IP가 쓰임 agent에서 from이필터링 select id from chall8 where agent ='나의 브라우저' 해서 나오는 값으있으면 계정정보를 출력하고 없으면 새로운계정을 만든다 insert into chall8(agent, ip, id) values('agent', 'ip', 'guest') 결국에 agent를 조작해서 나오는값이 admin이면 클리어 insert into chall8(agent, ip, id) values('bbq', '내아이피', 'admin'),('abc', 'ip', 'guest') 이렇게 해서 2개의 계정을 한번에 만든다 벞스를 사용해 User-Agent를 수정 user-agnet를 bbq로 했을 때 admin으로 되게했으니까 ..
Webhacking.kr 55번 게임 같은거하고 마우스랑 몬스터 겹치면 죽음 rank눌러보면 이런 화면이 나온다 그리고 밑에 쿼리문이 나와있다 insert into chall55 values('id', 'score', 'flag) 이걸로 이제 게임이 끝나면 id, score, flag가 같이 데이터베이스에 추가된다는걸 알았다 1등의 점수를 누르니까 다른사람이 나온다 아마 조회하는 쿼리문은 select id, score from chall55 where score=~~~ 이렇게 되어있는것 같다 그래서 어차피 최고점은 같지만 먼저 select된 id가 HeXJuNo저분이라 그런듯 select 구문이 안되서 저번에 쓴 procedure analyse()를 써봤음 score=2147483647 limit 0,1 procedure analyse..
Webhacking.kr 29번 파일을 올리면 time, ip, file의 이름이 뜨는 것을 볼수있다 이걸로 파일을 제출할 시 INSERT INTO 테이블 VALUES() 구문이 쓰이고 우리에게 보여지는 화면은 select time, ip, file from 테이블 구문으로 되어있는걸 추측할 수 있다 일단 파일이름으로 injection을 시도할건데 VALUES()안에서 파일이 어디에 위치하는지를 먼저 알아내야한다 경우 1(파일 이름이 첫번째에 위치하는 경우) file, ~~, ~~ 이런 경우에는 ', ~~, ~~),(injection, ~~. ~~)-- -로 한다 INSERT INTO 테이블 VALUES('', ~~, ~~),(injection, ~~, ~~)-- -', ~~, ~~) 경우 2(파일 이름이 중간에 위치한 경우) ~~, ..
Webhacking.kr 53번 val과 answer의 파라미터를 값으로 줄 수 있고 쿼리문 select a from $hidden_table where a=$_GET['val'] val에서 | select | by | 가 필터링 되어있음 문제의 목적은 일단 $hidden_table을 찾아야함 테이블명을 알아내서 테이블명을 answer의 파라미터 값으로 주면 클리어 select가 필터링되어있어 information_schema를 쓸 수 없음 그 대신 procedure analyse()를 사용가능함 https://chaneyoon.tistory.com/109 MySQL procedure analyze()를 이용한 SQLi MySQL procedure analyze()를 이용한 SQLi - H3X0R, s1ipper 소속 웹해커 윤석찬(c..
Webhacking.kr 35번 phone과 id를 GET방식으로 전달받음 필터링 phone에서 | * | / | = | select | - | # | ; | id에서 id값이 5글자보다 많으면 안됨 admin이 포함되면 안됨 쿼리문 insert into chall35(id,ip,phone) values('id','아이피',phone) 이게 우리가 날리는 쿼리이고 select ip from chall35 where id='admin' and ip='내 아이피' 이 쿼리로 나오는 값이 내 ip와 같다면 클리어 mysql에서 한번에 insert를 여러개 할 수 있음 insert into 테이블명(컬럼1, 컬림2) values('값1', '값2'), ('값1', '값2'), ('값1', '값2') 그래서 id값은 그대로 두고 phone에서 ..