前面几道题太基础,主要记录后面几道题目
Orbital
In order to decipher the alien communication that held the key to their location, she needed access to a decoder with advanced capabilities - a decoder that only The Orbital firm possessed. Can you get your hands on the decoder?
这道题就是sql注入登录,然后在下方可以进行下载文件,通过拦截数据,发现是一个文件包含,点击下载后会响应包中会有文件内容,于是根据本地文件查看得到flag所在文件名,抓包修改包内文件名,对其进行跨目录文件包含,得到flag,难度简单
主要看到一个大佬思路,我是没想到的,所以记录一下
1 | def login(username, password): |
这里看到username
被直接包含到sql
语句中去,所以这是存在sql
注入,
这段sql
语句主要是查询数据库中用户名为输入数据的在数据表中的用户名和密码,
然后返回的用户名和密码保存到user
变量中
1 | SELECT username, password FROM users WHERE username = "{username}" |
当检测输入了用户名后,进行password校验
1 | if user: |
这里是将用户输入参数password
,先进行md5加密,与数据库查询得到的password
进行md5
比较
1 | def passwordVerify(hashPassword, password): |
其实开始我是最先想到直接插入sql语句,这道题直接注入没有回显,需要报错注入
但是看到一个大佬的wp,我又多了一个新思路
既然它是将我输入的passwd与它通过存在sql注入漏洞的语句返回的查询值中的passwd进行md5
比较
如果,我修改后面的语句,使其返回一个admin用户名以及我伪造的md5密码,是不是就可以把admin用户密码认证伪造掉
1 " union select "admin","e10adc3949ba59abbe56e057f20f883e"#这句话接到后面,前面语句返回为空,接着后面返回
admin
和密码123456
(e10adc3949ba59abbe56e057f20f883e
)那么它就会把123456认为是admin的正确密码,然后和我们输入的密码进行对比,从而我们成功登录admin账户
这是很好的思路,这比直接利用sql注入更加优雅,还是我对代码的敏感性不够