Skip to content

Commit 418dff7

Browse files
committed
Version 1.3
1 parent 628908f commit 418dff7

File tree

6 files changed

+300
-19
lines changed

6 files changed

+300
-19
lines changed

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ The list of Evasion Techniques:
4242
> space2mssqlblank, space2mssqlhash, space2mysqlblank, space2mysqldash, space2plus,
4343
> space2randomblank, symboliclogical, unionalltounion, unmagicquotes, uppercase,
4444
> versionedkeywords, versionedmorekeywords, 0eunion, misunion, schemasplit, binary,
45-
> dunion
45+
> dunion, equaltorlike
4646
4747
## Requirements:
4848

@@ -91,6 +91,12 @@ NOTE: Be sure to merge the latest from "upstream" before making a pull request!
9191

9292
## Changelog:
9393

94+
**1.3:**
95+
- Add Options tab:
96+
- Payloads Directory
97+
- Restore Defaults
98+
- Fix some issues in UI and Tamper module
99+
94100
**1.2:**
95101
- Add tamper technique:
96102
- equaltorlike: Replaces all occurrences of operator equal (`=`) with `RLIKE` counterpart

UI.py

Lines changed: 171 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from java.io import File
88
from java.awt.datatransfer import DataFlavor, StringSelection
99

10+
import os
1011
class PluginUI():
1112
def __init__(self, extender):
1213
self.extender = extender
@@ -66,9 +67,9 @@ def clearPayloadButtonAction(self, event):
6667
self.writePayloadsListFile()
6768

6869
def addPayloadButtonAction(self, event):
69-
if str(self.textNewPayload.text).strip():
70-
self.extender.PayloadList.append(self.textNewPayload.text)
71-
self.textNewPayload.text = ''
70+
if str(self.textPayload.text).strip():
71+
self.extender.PayloadList.append(self.textPayload.text)
72+
self.textPayload.text = ''
7273
self.listPayloads.setListData(self.extender.PayloadList)
7374
self.writePayloadsListFile()
7475

@@ -87,10 +88,9 @@ def toFileButtonAction(self, event):
8788
if (fileChooser.showSaveDialog(self.mainPanel) == JFileChooser.APPROVE_OPTION):
8889
file = fileChooser.getSelectedFile()
8990
self.extender.generatePayloads()
90-
result = '\n'
91-
result = result.join(self.extender.tamperedPayloads)
91+
result = '\n'.join(self.extender.tamperedPayloads)
9292
with open(file.getAbsolutePath(),'w') as writer:
93-
writer.writelines(result)
93+
writer.writelines(result.encode('utf-8'))
9494
self.showMessage('{} url encoded payload written to file'.format(len(self.extender.tamperedPayloads)))
9595

9696
def tamperPayloadButtonAction(self, event):
@@ -128,6 +128,68 @@ def readPayloadsListFile(self):
128128
result.append(line.strip('\n'))
129129
return result
130130

131+
def restoreDefaultsButtonAction(self, event):
132+
self.extender.callbacks.saveExtensionSetting('SQLiQueryTampering_PayloadsDirectory', None)
133+
self.textPayloadsDir.text = ''
134+
self.textPlainPayload.text = ''
135+
self.textTamperedPayload.text = ''
136+
self.comboProcessorTech.setSelectedIndex(0)
137+
138+
varName = 'SQLiQueryTampering_{}'
139+
self.chkGeneral.setSelected(1)
140+
tmpVarName = varName.format(self.chkGeneral.text)
141+
self.extender.callbacks.saveExtensionSetting(tmpVarName, '1')
142+
143+
for item in (self.chkMAXDB,self.chkMSSQL,self.chkMSAccess,
144+
self.chkPostgres,self.chkOracle,self.chkSqlite,self.chkMysql):
145+
item.setSelected(0)
146+
tmpVarName = 'SQLiQueryTampering_{}'.format(item.text)
147+
self.extender.callbacks.saveExtensionSetting(tmpVarName, '0')
148+
149+
self.extender.PayloadList = [
150+
"%",
151+
"'",
152+
"''",
153+
"\"\"",
154+
"\"",
155+
"'\"--",
156+
"'; waitfor delay '0:30:0'--",
157+
"1;waitfor delay '0:30:0'--",
158+
"(\",)')(,(("
159+
]
160+
self.listPayloads.setListData(self.extender.PayloadList)
161+
self.writePayloadsListFile()
162+
163+
def readPayloadsFromDir(self, directory):
164+
result = []
165+
for root, subdirs, files in os.walk(directory):
166+
for name in files:
167+
fPath = os.path.join(root, name)
168+
with open(fPath,'r') as reader:
169+
for line in reader.readlines():
170+
result.append(line.strip('\n'))
171+
return result
172+
173+
def dirBrowseButtonButtonAction(self, event):
174+
fileChooser = JFileChooser()
175+
fileChooser.dialogTitle = 'Choose Directory'
176+
fileChooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
177+
if (fileChooser.showOpenDialog(self.mainPanel) == JFileChooser.APPROVE_OPTION):
178+
file = fileChooser.getSelectedFile()
179+
varName = 'SQLiQueryTampering_PayloadsDirectory'
180+
path = file.getAbsolutePath()
181+
self.extender.callbacks.saveExtensionSetting(varName, path)
182+
self.textPayloadsDir.text = path
183+
self.extender.PayloadList = self.readPayloadsFromDir(path)
184+
self.listPayloads.setListData(self.extender.PayloadList)
185+
self.showMessage('{} payloads loaded'.format(len(self.extender.PayloadList)))
186+
187+
def reloadPayloadsButtonAction(self, event):
188+
path = self.textPayloadsDir.text
189+
self.extender.PayloadList = self.readPayloadsFromDir(path)
190+
self.listPayloads.setListData(self.extender.PayloadList)
191+
self.showMessage('{} payloads loaded'.format(len(self.extender.PayloadList)))
192+
131193
def initComponents(self):
132194
TabbedPane1 = JTabbedPane()
133195
GeneratorScrollPane = JScrollPane()
@@ -136,6 +198,19 @@ def initComponents(self):
136198
jlbl2 = JLabel()
137199
spanePayloadList = JScrollPane()
138200
self.listPayloads = JList()
201+
OptionsScrollPane = JScrollPane()
202+
self.textPayloadsDir = JTextField()
203+
ProcessorPanel1 = JPanel()
204+
dirBrowseButton = JButton(actionPerformed=self.dirBrowseButtonButtonAction)
205+
restoreDefaultsButton = JButton(actionPerformed=self.restoreDefaultsButtonAction)
206+
reloadPayloadsButton = JButton(actionPerformed=self.reloadPayloadsButtonAction)
207+
OptionsScrollPane = JScrollPane()
208+
OptionsPanel = JPanel()
209+
jlbl6 = JLabel()
210+
jlbl7 = JLabel()
211+
jlbl9 = JLabel()
212+
jlbl10 = JLabel()
213+
jSeparator3 = JSeparator()
139214
pastePayloadButton = JButton(actionPerformed=self.pastePayloadButtonAction)
140215
loadPayloadButton = JButton(actionPerformed=self.loadPayloadButtonAction)
141216
removePayloadButton = JButton(actionPerformed=self.removePayloadButtonAction)
@@ -172,12 +247,19 @@ def initComponents(self):
172247

173248
jlbl1.setForeground(Color(255, 102, 51))
174249
jlbl1.setFont(Font(jlbl1.getFont().toString(), 1, 14))
175-
jlbl1.setText("User-Defiend Payloads")
250+
jlbl1.setText("User-Defined Payloads")
176251

177252
jlbl2.setText("This payload type lets you configure a simple list of strings that are used as payloads.")
178253

179254
spanePayloadList.setViewportView(self.listPayloads)
180-
self.extender.PayloadList = self.readPayloadsListFile()
255+
varName = 'SQLiQueryTampering_PayloadsDirectory'
256+
path = self.extender.callbacks.loadExtensionSetting(varName)
257+
if path :
258+
self.textPayloadsDir.text = path
259+
self.extender.PayloadList = self.readPayloadsFromDir(path)
260+
else:
261+
self.extender.PayloadList = self.readPayloadsListFile()
262+
181263
self.listPayloads.setListData(self.extender.PayloadList)
182264

183265
pastePayloadButton.setText("Paste")
@@ -267,7 +349,7 @@ def initComponents(self):
267349
.addGap(21, 21, 21)
268350
.addGroup(GeneratorPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
269351
.addComponent(self.textNewPayload)
270-
.addComponent(spanePayloadList)))
352+
.addComponent(spanePayloadList, GroupLayout.DEFAULT_SIZE, 563, Short.MAX_VALUE)))
271353
.addComponent(jlbl1)
272354
.addComponent(jlbl3)
273355
.addGroup(GeneratorPanelLayout.createSequentialGroup()
@@ -426,6 +508,85 @@ def initComponents(self):
426508

427509
TabbedPane1.addTab("Processor", ProcessorScrollPane)
428510

511+
jlbl6.setForeground( Color(255, 102, 51))
512+
jlbl6.setFont(Font(jlbl6.getFont().toString(), 1, 14))
513+
jlbl6.setText("Payloads Directory")
514+
515+
jlbl9.setText("Choose your own directory containing payload files:")
516+
517+
dirBrowseButton.setText("...")
518+
dirBrowseButton.setToolTipText("Browse")
519+
520+
jlbl10.setText("If you want to remove any previously applied preferences:")
521+
522+
restoreDefaultsButton.setText("Restore")
523+
reloadPayloadsButton.setText("Reload")
524+
525+
jlbl7.setForeground( Color(255, 102, 51))
526+
jlbl7.setFont(Font(jlbl7.getFont().toString(), 1, 14))
527+
jlbl7.setText("Restore Defaults")
528+
529+
OptionsPanelLayout = GroupLayout(OptionsPanel)
530+
OptionsPanel.setLayout(OptionsPanelLayout)
531+
OptionsPanelLayout.setHorizontalGroup(
532+
OptionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
533+
.addGroup(OptionsPanelLayout.createSequentialGroup()
534+
.addContainerGap()
535+
.addGroup(OptionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
536+
.addGroup(OptionsPanelLayout.createSequentialGroup()
537+
.addGap(12, 12, 12)
538+
.addComponent(jlbl7)
539+
.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
540+
.addGroup(OptionsPanelLayout.createSequentialGroup()
541+
.addGroup(OptionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
542+
.addComponent(jSeparator3)
543+
.addGroup(OptionsPanelLayout.createSequentialGroup()
544+
.addComponent(self.textPayloadsDir)
545+
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
546+
.addComponent(dirBrowseButton, GroupLayout.PREFERRED_SIZE, 29, GroupLayout.PREFERRED_SIZE)
547+
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
548+
.addComponent(reloadPayloadsButton))
549+
.addGroup(OptionsPanelLayout.createSequentialGroup()
550+
.addGroup(OptionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
551+
.addComponent(jlbl9)
552+
.addGroup(OptionsPanelLayout.createSequentialGroup()
553+
.addGap(8, 8, 8)
554+
.addComponent(jlbl6)))
555+
.addGap(0, 0, Short.MAX_VALUE)))
556+
.addContainerGap())
557+
.addGroup(OptionsPanelLayout.createSequentialGroup()
558+
.addComponent(jlbl10)
559+
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
560+
.addComponent(restoreDefaultsButton)
561+
.addGap(0, 150, Short.MAX_VALUE))))
562+
)
563+
OptionsPanelLayout.setVerticalGroup(
564+
OptionsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
565+
.addGroup(OptionsPanelLayout.createSequentialGroup()
566+
.addContainerGap()
567+
.addComponent(jlbl6)
568+
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
569+
.addComponent(jlbl9)
570+
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
571+
.addGroup(OptionsPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, False)
572+
.addComponent(dirBrowseButton, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
573+
.addComponent(reloadPayloadsButton, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
574+
.addComponent(self.textPayloadsDir))
575+
.addGap(18, 18, 18)
576+
.addComponent(jSeparator3, GroupLayout.PREFERRED_SIZE, 10, GroupLayout.PREFERRED_SIZE)
577+
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
578+
.addComponent(jlbl7)
579+
.addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
580+
.addGroup(OptionsPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
581+
.addComponent(jlbl10)
582+
.addComponent(restoreDefaultsButton))
583+
.addContainerGap(254, Short.MAX_VALUE))
584+
)
585+
586+
OptionsScrollPane.setViewportView(OptionsPanel)
587+
588+
TabbedPane1.addTab("Options", OptionsScrollPane)
589+
429590
self.mainPanel = JPanel()
430591
layout = GroupLayout(self.mainPanel)
431592
self.mainPanel.setLayout(layout)
@@ -439,4 +600,4 @@ def initComponents(self):
439600
)
440601

441602
TabbedPane1.getAccessibleContext().setAccessibleName("Generator")
442-
# </editor-fold>
603+
# </editor-fold>

img/generator.png

855 Bytes
Loading

img/processor.png

1.17 KB
Loading

sqli_query_tampering.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def registerExtenderCallbacks(self, callbacks):
2626
callbacks.registerIntruderPayloadProcessor(self)
2727

2828
callbacks.addSuiteTab(self)
29-
print('SQLi Query Tampering v 1.2\nCreated by Xer0Days')
29+
print('SQLi Query Tampering v 1.3\nCreated by Xer0Days')
3030
print('Based on Sqlmap\'s Tampering Functions\n')
3131
print('---------------------------------------------')
3232
print('Github:\t\thttps://github.com/xer0days\nTwitter:\thttps://twitter.com/Xer0Days')

0 commit comments

Comments
 (0)