본문 바로가기
  • 안아주는 다람쥐
seKUCTF

[seKUCTF] forcelogin 2

by Sapphire. 2023. 4. 9.

다음과 같이 /source로 들어가 소스코드를 확인해 달라고 한다 들어가서 확인을 해 주자

 

다음과 같이 /loginAction을 해서 로그인 시에 해당 user id에 맞는 구문을 출력해 주는것으로 보인다.

 

로그인액션이 실행되는 구문을 자세히 살펴보자

 

 select ID from "+table_+" where ID='"+id_+"' and PASSWORD='"+pass_+"'\

 

forcelogin 1과 달리  logintable 부분에 따로 t라는 인자를 받을수가 있어졌다 대신 ban list가 다음과 같이 늘어났다.

 

banlist = ['inno','select','\'','"','`','information','concat','union','all','ascii','substr','#','--','\\',';']

 

다음과같이 저번에 못썬던 select는 물론이고 union또한 사용할수 없어 union value(row) 를 이용할수 없다.

 

그래서  처음에는 sql에서 주석처리를 실행할때 /* */로 주석처리 한것을 사요해서 id 부분에 테이블 앞부분에 /*을 넣고

pass 부분에 */를 넣어서 where ID 절을 아예 무시하고 table 쪽에 아예 새로 구문을 넣어서 돌려볼려는 생각이였다.

 

loginAction?T=loginTable+values+row(0x61646d696e)+/*&id=/&pass=*/

그래서 다음과 같은 구문을 시도해 보았다.

 

다음과 같이 실패한것을 볼수 있다.

실패한 가장 큰 원인으로는 뒤에 pass_ 자리에 들어가는 주석을 닫는구문이  싱글쿼터 안에 들어가게 되어서 주석처리가 온전히 되지 않아서 발생하는 문제인것 같다.

그렇다고 싱글쿼터를 하나 더 써서 우회하거나 -- 으로 주석처리로 빠져나오려 한다 해도 banlist 에 걸리게 된다.

 

그래서 좀더 고민하던 중 mssql의 공식문서를 자세히 보라는 힌트와 함께 동적 테이블에 대한 힌트를 얻었다.

 

SELECT a, b FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b);  
GO  
-- Used in an inner join to specify values to return.  
SELECT ProductID, a.Name, Color  
FROM Production.Product AS a  
INNER JOIN (VALUES ('Blade'), ('Crown Race'), ('AWC Logo Cap')) AS b(Name)   
ON a.Name = b.Name;

출쳐 : https://learn.microsoft.com/ko-kr/sql/t-sql/queries/table-value-constructor-transact-sql?view=sql-server-ver16#c-specifying-multiple-values-as-a-derived-table-in-a-from-clause 

 

테이블 값 생성자(Transact-SQL) - SQL Server

테이블 값 생성자(Transact-SQL)

learn.microsoft.com

우리쪽은 select id from까진 정해져 있는 구문이고 따로 select를 안적어줘도 이 구문을 이용하면 된다.

그래서 구상해본 payload는

/loginAction?T=(values+(<admin을 16진수로바꾼것>,1))+as+my(id,password)&id=admin&pass=1

 

admin = 0x61646d696e

 

그래서 구문은

/loginAction?T=(values+(0x61646d696e,1))+as+my(id,password)&id=admin&pass=1

 

다음과같이 플래그를 얻게 되었고 왜 테이블인젝션이라고 불렸는지 알수 있는 참 재밌고 유익한 문제였다.

'seKUCTF' 카테고리의 다른 글

[seKUCTF] simple culculater  (0) 2023.05.07
[seKUCTF] forcelogin1  (0) 2023.04.09
[seKUCTF] Ping!  (0) 2023.03.22
linux 와일드카드란?  (0) 2023.03.21
OS Injection 이란?  (0) 2023.03.21