LOGIN
1.进入网站后是一个登陆界面,先是随便输入用户名和密码,发现弹窗消息。
根据提示要拿到flag就必须要先找到username。
开始先试了admin等一些常规的用户名发现都不行。那就思考后台php中的sql语句是怎么样的
根据绕过sql语句来得到username。1
select * from admin where username='' and password=''
2.猜测后台中的语句应该是这样的,那就来构造绕过这个使用’ or 1=1#使得where后面的结果为真
返回查询结果。输入测试后发现,or ,=,where等词被过滤了。
然后就思考另外的方法来使得where后面的条件为真,可以使用这些方法,’^1^1#,’||1#来绕过这些
得到两个重要的提示。
知道了password就是flag经过md5加密后的内容那就需要来猜测password的值了
3.基于上面有username返回所以是一个回显的注入。那就可以构造如下sql语句来猜测password的名
1 | yt_ia_a_handsome_boy' union select 1,2,0x80 order by 3 desc# |
4.由上面提示可以知道password是一串经过md5加密后的16进制字符串利用union select插入一行,并在password
即第三列插入的是16进制的字符串,根据第三列的大小对每行数据进行排序。执行完sql语句,根据页面回显的
数据一位一位来猜解password的内容。
显示结果如下:
当插入的16进制值大于password的值会返回如下内容
当插入的内容小于password的值会返回username的值
5.根据上面测试的情况用python写脚本如下
1 | # coding:utf-8 |
6.运行后得到password的值
MD5j解码后得到flag