SQLi - POST error-based-single quotes-string
in PENETRATIONCTF with 0 comment

SQLi - POST error-based-single quotes-string

in PENETRATIONCTF with 0 comment

在输入框填入单引号,会发现报错。

使用万能密码
Image.png

sql语句: select username,password from users where username =‘test’ or 1=1 # ‘and password = ’admin’ limit 0,1;

‘#’ 后面的部分都被注释掉了,不发挥作用。
SQL语句变为: select username ,password from users where username = ’test’ or 1=1

由于表中username字段中并不存在test值,所以 为0

则sql语句可理解为:
Select username , password from users where 0 or 1;
经过or运算,where永真,所以sql语句相当于,select username , password from users ;
Image.png

Image.png
Image.png

使用payload。select username , password from users where username = ’test’ or ‘1’=‘1’ and password = ‘test’ limit 0,1;
Image.png

会发现失败,分析一下失败原因。
在sql中 , and的优先级高于 or ,所以会先执行 and 部分 由于 password字段中并不存在test这个值,所以and右边为false, 0
由于’1’=‘1’ 永真 所以右边and就变为false (1 and 0 为 0)

SQL语句就理解为:select username,password from users where username = ’test’ or false;

同理;由于username字段中并不存在test,所以or 左边为 0 ,右边为0,则 SQL语句就成为:

Select username , password from users where 0 ;

Image.png

Image.png

Image.png
Image.png

POST类型的注入跑出数据。

如果登陆过程不会出现显示数据,就只能通过布尔型注入的方式获取数据。
这里登陆成功会返回结果,可以回显数据。
一下为sqlmap的payload:

Image.png

Image.png
典型的union注入回显。
Image.png

Responses