mirror of
https://github.com/maride/barf.git
synced 2024-12-22 14:37:29 +00:00
Add lose address (counterpart to win address)
This commit is contained in:
parent
b1450323fd
commit
3991b4f482
3
barf.py
3
barf.py
@ -38,7 +38,7 @@ def main():
|
||||
args = getArguments()
|
||||
|
||||
# Create our breakpoints, managed by the BreakpointManager
|
||||
bm = BreakpointManager(args["positiveAddr"], args["negativeAddr"], args["winAddr"])
|
||||
bm = BreakpointManager(args["positiveAddr"], args["negativeAddr"], args["winAddr"], args["loseAddr"])
|
||||
|
||||
# Manage the target with the TargetManager
|
||||
tm = TargetManager(bm, args["persistent"], args["startAddr"], args["endAddr"], args["buffAddr"])
|
||||
@ -57,6 +57,7 @@ def getArguments():
|
||||
a["positiveAddr"] = barf_positive_addr
|
||||
a["negativeAddr"] = barf_negative_addr
|
||||
a["winAddr"] = barf_win_addr
|
||||
a["loseAddr"] = barf_lose_addr
|
||||
a["startAddr"] = barf_start_addr
|
||||
a["endAddr"] = barf_end_addr
|
||||
a["buffAddr"] = barf_buff_addr
|
||||
|
14
barf.sh
14
barf.sh
@ -9,6 +9,7 @@
|
||||
POSITIVEADDR=""
|
||||
NEGATIVEADDR=""
|
||||
WINADDR=""
|
||||
LOSEADDR=""
|
||||
STARTADDR=""
|
||||
ENDADDR=""
|
||||
BUFFADDR=""
|
||||
@ -36,6 +37,10 @@ while [[ $# -gt 0 ]]; do
|
||||
WINADDR="$2"
|
||||
shift; shift
|
||||
;;
|
||||
-l|--lose-addr)
|
||||
LOSEADDR="$2"
|
||||
shift; shift
|
||||
;;
|
||||
-s|--start-addr)
|
||||
STARTADDR="$2"
|
||||
shift; shift
|
||||
@ -106,12 +111,13 @@ if [ "$SHOWHELP" == 1 ]; then
|
||||
echo " -p | --positive-addr 0x123456 a location to be counted as good hit"
|
||||
echo " -n | --negative-addr 0x234567 a location to be counted as bad hit"
|
||||
echo " -w | --win-addr 0x345678 a location reached if your input is correct"
|
||||
echo " -l | --lose-addr 0x456789 a location reached if your input is incorrect"
|
||||
echo ""
|
||||
echo " PERSISTENT MODE OPTIONS"
|
||||
echo " -x | --persistent enable the experimental (!) persistent mode"
|
||||
echo " -s | --start-addr 0x456789 a location directly after your input is fed into the target"
|
||||
echo " -e | --end-addr 0x56789A a location where the to-be-fuzzed logic is done"
|
||||
echo " --buff-addr 0x6789AB the location where user input is stored"
|
||||
echo " -s | --start-addr 0x56789A a location directly after your input is fed into the target"
|
||||
echo " -e | --end-addr 0x6789AB a location where the to-be-fuzzed logic is done"
|
||||
echo " --buff-addr 0x789ABC the location where user input is stored"
|
||||
echo ""
|
||||
echo " MISC OPTIONS"
|
||||
echo " -b | --prefix CTF{ a known prefix, e.g. the prefix of your flag"
|
||||
@ -124,5 +130,5 @@ if [ "$SHOWHELP" == 1 ]; then
|
||||
fi
|
||||
|
||||
# ready for take-off
|
||||
gdb --quiet -nx --eval-command "py barf_positive_addr='$POSITIVEADDR';barf_negative_addr='$NEGATIVEADDR';barf_win_addr='$WINADDR';barf_start_addr='$STARTADDR';barf_end_addr='$ENDADDR';barf_buff_addr='$BUFFADDR';barf_known_prefix='$KNOWNPREFIX';barf_known_suffix='$KNOWNSUFFIX';barf_path='$BARFPATH';barf_chunksize=$CHUNKSIZE;barf_persistent=$PERSISTENT" --command barf.py $TARGETFILE
|
||||
gdb --quiet -nx --eval-command "py barf_positive_addr='$POSITIVEADDR';barf_negative_addr='$NEGATIVEADDR';barf_win_addr='$WINADDR';barf_lose_addr='$LOSEADDR';barf_start_addr='$STARTADDR';barf_end_addr='$ENDADDR';barf_buff_addr='$BUFFADDR';barf_known_prefix='$KNOWNPREFIX';barf_known_suffix='$KNOWNSUFFIX';barf_path='$BARFPATH';barf_chunksize=$CHUNKSIZE;barf_persistent=$PERSISTENT" --command barf.py $TARGETFILE
|
||||
|
||||
|
@ -11,14 +11,17 @@ class BreakpointManager:
|
||||
posB = None
|
||||
negB = None
|
||||
winB = None
|
||||
loseB = None
|
||||
|
||||
def __init__(self, pAddr, nAddr, wAddr):
|
||||
def __init__(self, pAddr, nAddr, wAddr, lAddr):
|
||||
if pAddr:
|
||||
self.posB = CounterBreakpoint(pAddr, True)
|
||||
if nAddr:
|
||||
self.negB = CounterBreakpoint(nAddr, False)
|
||||
if wAddr:
|
||||
self.winB = CounterBreakpoint(wAddr, True)
|
||||
if lAddr:
|
||||
self.loseB = CounterBreakpoint(lAddr, False)
|
||||
|
||||
def GetScore(self):
|
||||
score = 0
|
||||
@ -47,4 +50,10 @@ class BreakpointManager:
|
||||
def HitWin(self):
|
||||
if self.winB:
|
||||
return self.winB.GetScore() != 0
|
||||
return False
|
||||
|
||||
def HitLose(self):
|
||||
if self.loseB:
|
||||
return self.loseB.GetScore() != 0
|
||||
return True
|
||||
|
||||
|
@ -65,7 +65,7 @@ def Bruteforce(bm, tm, knownPrefix, knownSuffix, chunksize):
|
||||
DisableLogging()
|
||||
|
||||
# let's examine it further - check if we hit the win breakpoint :)
|
||||
if bm.HitWin():
|
||||
if bm.HitWin() or not bm.HitLose():
|
||||
EnableLogging()
|
||||
print("BARF found the flag - or at least managed to hit the 'win' breakpoint!")
|
||||
print(f"Winning guess for the flag is '{knownPrefix + knownSuffix}'")
|
||||
|
Loading…
Reference in New Issue
Block a user