CSAW CTF 2017-LittleQuery-writeup
SQL注入漏洞
Task
|
|
Solution
先看看功能.
有一个登陆点: http://littlequery.chal.csaw.io/login.php
有一些敏感目录:http://littlequery.chal.csaw.io/js/
其中login.js:
query.js:
查看源代码,发现有注释:
同时由robots.txt,也能发现该页面: http://littlequery.chal.csaw.io/api/db_explore.php
若要preview ,会要求提供db
和table
参数。
所以先一步一步的“schema”。
http://littlequery.chal.csaw.io/api/db_explore.php?mode=schema
http://littlequery.chal.csaw.io/api/db_explore.php?mode=schema&db=littlequery
http://littlequery.chal.csaw.io/api/db_explore.php?mode=schema&db=littlequery&table=user
db和table都知道了,接着尝试一下preview: http://littlequery.chal.csaw.io/api/db_explore.php?mode=preview&db=littlequery&table=user
不能直接显示。考虑到这是数据库的操作,可能会存在sql注入漏洞。尝试访问:http://littlequery.chal.csaw.io/api/db_explore.php?mode=preview&db=littlequery'&table=user‘
可以看到单引号被加上了斜杠,同时知道是用反引号闭合的。根据上面两次操作,我们推测服务器后端大概是这样写的:
目的是要查出 littlequery.user 中的数据,所以利用反引号闭合,传入的db
参数为:littlequery`.`user`%23
。table
参数随意,比如字母a。则传入后构造出来的sql语句为:
则在%23
后的将会被注释掉,同时又能过掉服务器端关于$db === 'littlequery'
的检测。
回到 http://littlequery.chal.csaw.io/login.php ,直接登陆失败。看一下前面的login.js,会先把输入的密码进行一次CryptoJS.SHA1
加密后再发送。而我们注出来的密码应该是原密码经过CryptoJS.SHA1
加密后的结果,应该所以应该先抓包,修改password为”5896…”
出现了302跳转,follow: