mirror of
https://github.com/maride/barf.git
synced 2024-12-22 22:47:30 +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()
|
args = getArguments()
|
||||||
|
|
||||||
# Create our breakpoints, managed by the BreakpointManager
|
# 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
|
# Manage the target with the TargetManager
|
||||||
tm = TargetManager(bm, args["persistent"], args["startAddr"], args["endAddr"], args["buffAddr"])
|
tm = TargetManager(bm, args["persistent"], args["startAddr"], args["endAddr"], args["buffAddr"])
|
||||||
@ -57,6 +57,7 @@ def getArguments():
|
|||||||
a["positiveAddr"] = barf_positive_addr
|
a["positiveAddr"] = barf_positive_addr
|
||||||
a["negativeAddr"] = barf_negative_addr
|
a["negativeAddr"] = barf_negative_addr
|
||||||
a["winAddr"] = barf_win_addr
|
a["winAddr"] = barf_win_addr
|
||||||
|
a["loseAddr"] = barf_lose_addr
|
||||||
a["startAddr"] = barf_start_addr
|
a["startAddr"] = barf_start_addr
|
||||||
a["endAddr"] = barf_end_addr
|
a["endAddr"] = barf_end_addr
|
||||||
a["buffAddr"] = barf_buff_addr
|
a["buffAddr"] = barf_buff_addr
|
||||||
|
14
barf.sh
14
barf.sh
@ -9,6 +9,7 @@
|
|||||||
POSITIVEADDR=""
|
POSITIVEADDR=""
|
||||||
NEGATIVEADDR=""
|
NEGATIVEADDR=""
|
||||||
WINADDR=""
|
WINADDR=""
|
||||||
|
LOSEADDR=""
|
||||||
STARTADDR=""
|
STARTADDR=""
|
||||||
ENDADDR=""
|
ENDADDR=""
|
||||||
BUFFADDR=""
|
BUFFADDR=""
|
||||||
@ -36,6 +37,10 @@ while [[ $# -gt 0 ]]; do
|
|||||||
WINADDR="$2"
|
WINADDR="$2"
|
||||||
shift; shift
|
shift; shift
|
||||||
;;
|
;;
|
||||||
|
-l|--lose-addr)
|
||||||
|
LOSEADDR="$2"
|
||||||
|
shift; shift
|
||||||
|
;;
|
||||||
-s|--start-addr)
|
-s|--start-addr)
|
||||||
STARTADDR="$2"
|
STARTADDR="$2"
|
||||||
shift; shift
|
shift; shift
|
||||||
@ -106,12 +111,13 @@ if [ "$SHOWHELP" == 1 ]; then
|
|||||||
echo " -p | --positive-addr 0x123456 a location to be counted as good hit"
|
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 " -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 " -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 ""
|
||||||
echo " PERSISTENT MODE OPTIONS"
|
echo " PERSISTENT MODE OPTIONS"
|
||||||
echo " -x | --persistent enable the experimental (!) persistent mode"
|
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 " -s | --start-addr 0x56789A 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 " -e | --end-addr 0x6789AB a location where the to-be-fuzzed logic is done"
|
||||||
echo " --buff-addr 0x6789AB the location where user input is stored"
|
echo " --buff-addr 0x789ABC the location where user input is stored"
|
||||||
echo ""
|
echo ""
|
||||||
echo " MISC OPTIONS"
|
echo " MISC OPTIONS"
|
||||||
echo " -b | --prefix CTF{ a known prefix, e.g. the prefix of your flag"
|
echo " -b | --prefix CTF{ a known prefix, e.g. the prefix of your flag"
|
||||||
@ -124,5 +130,5 @@ if [ "$SHOWHELP" == 1 ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ready for take-off
|
# 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
|
posB = None
|
||||||
negB = None
|
negB = None
|
||||||
winB = None
|
winB = None
|
||||||
|
loseB = None
|
||||||
|
|
||||||
def __init__(self, pAddr, nAddr, wAddr):
|
def __init__(self, pAddr, nAddr, wAddr, lAddr):
|
||||||
if pAddr:
|
if pAddr:
|
||||||
self.posB = CounterBreakpoint(pAddr, True)
|
self.posB = CounterBreakpoint(pAddr, True)
|
||||||
if nAddr:
|
if nAddr:
|
||||||
self.negB = CounterBreakpoint(nAddr, False)
|
self.negB = CounterBreakpoint(nAddr, False)
|
||||||
if wAddr:
|
if wAddr:
|
||||||
self.winB = CounterBreakpoint(wAddr, True)
|
self.winB = CounterBreakpoint(wAddr, True)
|
||||||
|
if lAddr:
|
||||||
|
self.loseB = CounterBreakpoint(lAddr, False)
|
||||||
|
|
||||||
def GetScore(self):
|
def GetScore(self):
|
||||||
score = 0
|
score = 0
|
||||||
@ -47,4 +50,10 @@ class BreakpointManager:
|
|||||||
def HitWin(self):
|
def HitWin(self):
|
||||||
if self.winB:
|
if self.winB:
|
||||||
return self.winB.GetScore() != 0
|
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()
|
DisableLogging()
|
||||||
|
|
||||||
# let's examine it further - check if we hit the win breakpoint :)
|
# let's examine it further - check if we hit the win breakpoint :)
|
||||||
if bm.HitWin():
|
if bm.HitWin() or not bm.HitLose():
|
||||||
EnableLogging()
|
EnableLogging()
|
||||||
print("BARF found the flag - or at least managed to hit the 'win' breakpoint!")
|
print("BARF found the flag - or at least managed to hit the 'win' breakpoint!")
|
||||||
print(f"Winning guess for the flag is '{knownPrefix + knownSuffix}'")
|
print(f"Winning guess for the flag is '{knownPrefix + knownSuffix}'")
|
||||||
|
Loading…
Reference in New Issue
Block a user