0%

[GXYCTF 2019]BabySqli v2ish1yan的WriteUp

2022-10-30 15:32By
v2ish1yan
WEBSQL注入
  • sql注入
  • union覆盖数据

做了半天才发现网页源码有提示,跟我之前猜测的一样

因为他的user和name是先后判断的,所以应该是先对应用户名查数据,再进行比较

他的查询语句为

select * from user where username = '$name'

只有用户名为admin的时候才会爆密码错误,所以用户名应该就是admin

在用单引号的时候会报错,猜测为单引号闭合

fuzz出过滤项

or

xor

(

)

=

'1'='1

oorr

floor

rand()

information_schema.tables

concat_ws()

order

CAST()

format

ord

for

=

然后无意中对pw传数组,发现我们输入的数据是先md5计算再和查询的数据进行比对

image-20221030232744745

然后判断字段数,来用union进行伪造假用户

判断字段数为3

image-20221030232920116

然后就是一个个试用户名和密码在哪个字段里了

发现只有第二个字段为admin时才会爆用户错误

image-20221030233112324

所以第二个就是用户名了

密码就试试就出来了

payload:

name=admi' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#&pw=1
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

NSSIMAGE
为什么我密码传数组没有爆出 md5

密码是怎么试出来的哇

可能是太早了,写wp的时候没有讲清楚,我这里密码没有试出来,而是把密码的字段位置试出来了。
他的判断逻辑其实就是先通过用户名在表里查出数据得到数据库里的密码,然后再和你输入的密码进行匹配,如果一样就给flag,我这里其实就是使用联合查询,让他查询的结果让我可控。

admi' union select 1,'admin','c4ca4238a0b923820dcc509a6f75849b'#

这个payload就是让他查询的结果为admin和c4ca4238a0b923820dcc509a6f75849b
然后他会把c4ca4238a0b923820dcc509a6f75849b和md5加密后的pw参数值进行比较
1的md5值就是c4ca4238a0b923820dcc509a6f75849b,所以这样就能成功登录,拿到flag