打开题目只有一个输入框,根据题目猜测输入框存在sql注入。
于是ctrl+u查看页面源代码
这段是核心
这里用get方式将name传递到/search
根据附件给的app.js源代码
这里对name进行了长度限制,然后放入sql语句中
由于name参数没有过滤,存在sql注入漏洞
我们的目标在于读出flag
继续看代码
注意到第8,26~28行,其逻辑是
1,读取flag.txt这个文件(以utf-8的编码格式)给flag变量赋值
2,给flagTable赋值,值为‘flag_’拼接上 (把所有'-'替换为'_'的) uuid
3,检查是否存在名字为flagTable的表,如果不存在,就创建
4,将flag插入表中
目标明确:
1.读出表名
2.读出flag
利用sql注入漏洞
难点:题目限制了name的长度要小于等于6个字符(6个字符啥都干不了啊啊啊!)
想办法绕过,传入?name[0]=xxxxxxxxxxxx,无论你传多长name.length都是1
下面利用union联合注入获取表名
name[0]=xxxx' union select name,name from sqlite_master--
然后得到flag
name[0]=xxxx' union select 1,flag from (表名)--