Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
flan
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
hdacloud
flan
Commits
de97a844
Commit
de97a844
authored
5 years ago
by
Nadin El-Yabroudi
Browse files
Options
Downloads
Patches
Plain Diff
Linter errors improve python
parent
8059afca
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
aws_push.py
+2
-1
2 additions, 1 deletion
aws_push.py
output_report.py
+79
-45
79 additions, 45 deletions
output_report.py
with
81 additions
and
46 deletions
aws_push.py
+
2
−
1
View file @
de97a844
...
@@ -6,7 +6,8 @@ filename = sys.argv[1]
...
@@ -6,7 +6,8 @@ filename = sys.argv[1]
s3_client
=
boto3
.
client
(
'
s3
'
)
s3_client
=
boto3
.
client
(
'
s3
'
)
try
:
try
:
response
=
s3_client
.
upload_file
(
"
/
"
+
filename
,
os
.
getenv
(
'
bucket
'
),
filename
)
response
=
s3_client
.
upload_file
(
"
/
"
+
filename
,
os
.
getenv
(
'
bucket
'
),
filename
)
except
Exception
,
e
:
except
Exception
,
e
:
print
(
'
Error uploading to s3
'
)
print
(
'
Error uploading to s3
'
)
print
(
e
)
print
(
e
)
This diff is collapsed.
Click to expand it.
output_report.py
+
79
−
45
View file @
de97a844
...
@@ -8,6 +8,7 @@ results = {}
...
@@ -8,6 +8,7 @@ results = {}
vulnerable_services
=
[]
vulnerable_services
=
[]
colors
=
{
'
High
'
:
'
FD6864
'
,
'
Medium
'
:
'
F8A102
'
,
'
Low
'
:
'
34CDF9
'
}
colors
=
{
'
High
'
:
'
FD6864
'
,
'
Medium
'
:
'
F8A102
'
,
'
Low
'
:
'
34CDF9
'
}
def
parse_vuln
(
ip_addr
,
port
,
app_name
,
vuln
):
def
parse_vuln
(
ip_addr
,
port
,
app_name
,
vuln
):
vuln_name
=
''
vuln_name
=
''
severity
=
''
severity
=
''
...
@@ -20,9 +21,14 @@ def parse_vuln(ip_addr, port, app_name, vuln):
...
@@ -20,9 +21,14 @@ def parse_vuln(ip_addr, port, app_name, vuln):
elif
field
[
'
@key
'
]
==
'
type
'
:
elif
field
[
'
@key
'
]
==
'
type
'
:
type
=
field
[
'
#text
'
]
type
=
field
[
'
#text
'
]
if
'
vulns
'
in
results
[
app_name
].
keys
():
if
'
vulns
'
in
results
[
app_name
].
keys
():
results
[
app_name
][
'
vulns
'
].
append
({
'
name
'
:
vuln_name
,
'
type
'
:
type
,
'
severity
'
:
severity
})
results
[
app_name
][
'
vulns
'
].
append
({
'
name
'
:
vuln_name
,
'
type
'
:
type
,
'
severity
'
:
severity
})
else
:
else
:
results
[
app_name
][
'
vulns
'
]
=
[{
'
name
'
:
vuln_name
,
'
type
'
:
type
,
'
severity
'
:
severity
}]
results
[
app_name
][
'
vulns
'
]
=
[{
'
name
'
:
vuln_name
,
'
type
'
:
type
,
'
severity
'
:
severity
}]
def
parse_script
(
ip_addr
,
port
,
app_name
,
script
):
def
parse_script
(
ip_addr
,
port
,
app_name
,
script
):
vulnerable_services
.
append
(
app_name
)
vulnerable_services
.
append
(
app_name
)
...
@@ -33,23 +39,25 @@ def parse_script(ip_addr, port, app_name, script):
...
@@ -33,23 +39,25 @@ def parse_script(ip_addr, port, app_name, script):
else
:
else
:
parse_vuln
(
ip_addr
,
port
,
app_name
,
script_table
[
'
elem
'
])
parse_vuln
(
ip_addr
,
port
,
app_name
,
script_table
[
'
elem
'
])
def
get_app_name
(
service
):
def
get_app_name
(
service
):
app_name
=
''
app_name
=
''
if
'
@product
'
in
service
.
keys
():
if
'
@product
'
in
service
.
keys
():
app_name
+=
service
[
'
@product
'
]
+
"
"
app_name
+=
service
[
'
@product
'
]
+
"
"
if
'
@version
'
in
service
.
keys
():
if
'
@version
'
in
service
.
keys
():
app_name
+=
service
[
'
@version
'
]
+
"
"
app_name
+=
service
[
'
@version
'
]
+
"
"
elif
'
@name
'
in
service
.
keys
():
elif
'
@name
'
in
service
.
keys
():
app_name
+=
service
[
'
@name
'
]
+
"
"
app_name
+=
service
[
'
@name
'
]
+
"
"
if
(
'
cpe
'
in
service
.
keys
()):
if
(
'
cpe
'
in
service
.
keys
()):
if
isinstance
(
service
[
'
cpe
'
],
list
):
if
isinstance
(
service
[
'
cpe
'
],
list
):
for
cpe
in
service
[
'
cpe
'
]:
for
cpe
in
service
[
'
cpe
'
]:
app_name
+=
'
(
'
+
cpe
+
"
)
"
app_name
+=
'
(
'
+
cpe
+
"
)
"
else
:
else
:
app_name
+=
'
(
'
+
service
[
'
cpe
'
]
+
"
)
"
app_name
+=
'
(
'
+
service
[
'
cpe
'
]
+
"
)
"
return
app_name
return
app_name
def
parse_port
(
ip_addr
,
port
):
def
parse_port
(
ip_addr
,
port
):
if
port
[
'
state
'
][
'
@state
'
]
==
'
closed
'
:
if
port
[
'
state
'
][
'
@state
'
]
==
'
closed
'
:
return
return
...
@@ -59,10 +67,10 @@ def parse_port(ip_addr, port):
...
@@ -59,10 +67,10 @@ def parse_port(ip_addr, port):
if
app_name
in
results
.
keys
():
if
app_name
in
results
.
keys
():
if
ip_addr
in
results
[
app_name
][
'
locations
'
].
keys
():
if
ip_addr
in
results
[
app_name
][
'
locations
'
].
keys
():
results
[
app_name
][
'
locations
'
][
ip_addr
].
append
(
port_num
)
results
[
app_name
][
'
locations
'
][
ip_addr
].
append
(
port_num
)
else
:
else
:
results
[
app_name
][
'
locations
'
][
ip_addr
]
=
[
port_num
]
results
[
app_name
][
'
locations
'
][
ip_addr
]
=
[
port_num
]
else
:
else
:
results
[
app_name
]
=
{
'
locations
'
:
{
ip_addr
:
[
port_num
]}}
results
[
app_name
]
=
{
'
locations
'
:
{
ip_addr
:
[
port_num
]}}
if
'
script
'
in
port
.
keys
():
if
'
script
'
in
port
.
keys
():
scripts
=
port
[
'
script
'
]
scripts
=
port
[
'
script
'
]
...
@@ -74,6 +82,7 @@ def parse_port(ip_addr, port):
...
@@ -74,6 +82,7 @@ def parse_port(ip_addr, port):
if
scripts
[
'
@id
'
]
==
'
vulners
'
:
if
scripts
[
'
@id
'
]
==
'
vulners
'
:
parse_script
(
ip_addr
,
port_num
,
app_name
,
scripts
)
parse_script
(
ip_addr
,
port_num
,
app_name
,
scripts
)
def
parse_host
(
host
):
def
parse_host
(
host
):
ip_addr
=
host
[
'
address
'
][
'
@addr
'
]
ip_addr
=
host
[
'
address
'
][
'
@addr
'
]
if
host
[
'
status
'
][
'
@state
'
]
==
'
up
'
and
'
port
'
in
host
[
'
ports
'
].
keys
():
if
host
[
'
status
'
][
'
@state
'
]
==
'
up
'
and
'
port
'
in
host
[
'
ports
'
].
keys
():
...
@@ -84,6 +93,7 @@ def parse_host(host):
...
@@ -84,6 +93,7 @@ def parse_host(host):
else
:
else
:
parse_port
(
ip_addr
,
ports
)
parse_port
(
ip_addr
,
ports
)
def
parse_results
(
data
):
def
parse_results
(
data
):
hosts
=
data
[
'
nmaprun
'
][
'
host
'
]
hosts
=
data
[
'
nmaprun
'
][
'
host
'
]
...
@@ -93,6 +103,7 @@ def parse_results(data):
...
@@ -93,6 +103,7 @@ def parse_results(data):
else
:
else
:
parse_host
(
hosts
)
parse_host
(
hosts
)
def
convert_severity
(
sev
):
def
convert_severity
(
sev
):
if
sev
<
4
:
if
sev
<
4
:
return
'
Low
'
return
'
Low
'
...
@@ -101,71 +112,93 @@ def convert_severity(sev):
...
@@ -101,71 +112,93 @@ def convert_severity(sev):
else
:
else
:
return
'
High
'
return
'
High
'
def
get_description
(
vuln
,
type
):
def
get_description
(
vuln
,
type
):
if
type
==
'
cve
'
:
if
type
==
'
cve
'
:
year
=
vuln
[
4
:
8
]
year
=
vuln
[
4
:
8
]
section
=
vuln
[
9
:
-
3
]
+
'
xxx
'
section
=
vuln
[
9
:
-
3
]
+
'
xxx
'
url
=
"
https://raw.githubusercontent.com/CVEProject/cvelist/master/{}/{}/{}.json
"
.
format
(
year
,
section
,
vuln
)
url
=
"""
https://raw.githubusercontent.com/CVEProject/cvelist/master/
cve_json
=
json
.
loads
(
urllib
.
urlopen
(
url
).
read
())
{}/{}/{}.json
"""
.
format
(
year
,
section
,
vuln
)
return
cve_json
[
"
description
"
][
"
description_data
"
][
0
][
"
value
"
]
cve_json
=
json
.
loads
(
urllib
.
urlopen
(
url
).
read
())
return
cve_json
[
"
description
"
][
"
description_data
"
][
0
][
"
value
"
]
else
:
else
:
return
''
return
''
def
create_latex
():
def
create_latex
():
f
=
open
(
'
./
new
_header.tex
'
)
f
=
open
(
'
./
latex
_header.tex
'
)
write_buffer
=
f
.
read
()
write_buffer
=
f
.
read
()
f
.
close
()
f
.
close
()
output_file
=
sys
.
argv
[
2
]
output_file
=
sys
.
argv
[
2
]
ip_file
=
sys
.
argv
[
3
]
ip_file
=
sys
.
argv
[
3
]
write_buffer
+=
'
\\
begin{enumerate}[wide, labelwidth=!, labelindent=0pt, label=
\\
textbf{\large
\\
arabic{enumi} \large}]
\n
'
write_buffer
+=
"""
\\
begin{enumerate}[wide, labelwidth=!, labelindent=0pt,
label=
\\
textbf{\large
\\
arabic{enumi} \large}]
\n
"""
for
s
in
vulnerable_services
:
for
s
in
vulnerable_services
:
write_buffer
+=
'
\item
\\
textbf{\large
'
+
s
+
'
\large}
'
write_buffer
+=
'
\item
\\
textbf{\large
'
+
s
+
'
\large}
'
vulns
=
results
[
s
][
'
vulns
'
]
vulns
=
results
[
s
][
'
vulns
'
]
locations
=
results
[
s
][
'
locations
'
]
locations
=
results
[
s
][
'
locations
'
]
num_vulns
=
len
(
vulns
)
num_vulns
=
len
(
vulns
)
for
i
,
v
in
enumerate
(
vulns
):
for
i
,
v
in
enumerate
(
vulns
):
write_buffer
+=
'
\\
begin{figure}[h!]
\n
'
write_buffer
+=
'
\\
begin{figure}[h!]
\n
'
severity_name
=
convert_severity
(
v
[
'
severity
'
])
severity_name
=
convert_severity
(
v
[
'
severity
'
])
write_buffer
+=
'
\\
begin{tabular}{|p{16cm}|}
\\
rowcolor[HTML]{
'
+
colors
[
severity_name
]
+
'
}
\\
begin{tabular}{@{}p{15cm}>{
\\
raggedleft
\\
arraybackslash}p{0.5cm}@{}}
\\
textbf{
'
+
v
[
'
name
'
]
+
'
'
+
severity_name
+
'
(
'
+
str
(
v
[
'
severity
'
])
+
'
)} & \href{https://nvd.nist.gov/vuln/detail/
'
+
v
[
'
name
'
]
+
'
}{\large
\\
faicon{link}}
'
+
'
\end{tabular}
\\\\\n
Summary:
'
+
get_description
(
v
[
'
name
'
],
v
[
'
type
'
])
+
'
\\\\
\hline \end{tabular}
'
write_buffer
+=
'
\\
begin{tabular}{|p{16cm}|}
\\
rowcolor[HTML]{
'
write_buffer
+=
'
\end{figure}
\n
'
+
colors
[
severity_name
]
write_buffer
+=
'
\FloatBarrier
\n\\
textbf{The above
'
+
str
(
num_vulns
)
+
'
vulnerabilities apply to these network locations:}
\n\\
begin{itemize}
\n
'
+
"""
}
\\
begin{tabular}{@{}p{15cm}>{
\\
raggedleft
\\
arraybackslash}
for
addr
in
locations
.
keys
():
p{0.5cm}@{}}
\\
textbf{
"""
write_buffer
+=
'
\item
'
+
addr
+
'
Ports:
'
+
str
(
locations
[
addr
])
+
'
\n
'
+
v
[
'
name
'
]
+
'
'
+
severity_name
+
'
(
'
write_buffer
+=
'
\\\\
\\\\
\n
\end{itemize}
\n
'
+
str
(
v
[
'
severity
'
])
+
'
)} & \href{https://nvd.nist.gov/vuln/detail/
'
+
v
[
'
name
'
]
+
'
}{\large
\\
faicon{link}}
'
+
'
\end{tabular}
\\\\\n
Summary:
'
+
get_description
(
v
[
'
name
'
],
v
[
'
type
'
])
+
'
\\\\
\hline \end{tabular}
'
write_buffer
+=
'
\end{figure}
\n
'
write_buffer
+=
'
\FloatBarrier
\n\\
textbf{The above
'
+
str
(
num_vulns
)
+
"""
vulnerabilities apply to these network locations:}
\n
\\
begin{itemize}
\n
"""
for
addr
in
locations
.
keys
():
write_buffer
+=
'
\item
'
+
addr
+
'
Ports:
'
+
str
(
locations
[
addr
])
+
'
\n
'
write_buffer
+=
'
\\\\
\\\\
\n
\end{itemize}
\n
'
write_buffer
+=
'
\end{enumerate}
\n
'
write_buffer
+=
'
\end{enumerate}
\n
'
non_vuln_services
=
list
(
set
(
results
.
keys
())
-
set
(
vulnerable_services
))
non_vuln_services
=
list
(
set
(
results
.
keys
())
-
set
(
vulnerable_services
))
write_buffer
+=
'
\section*{Services With No Known Vulnerabilities}
'
write_buffer
+=
'
\section*{Services With No Known Vulnerabilities}
'
write_buffer
+=
'
\\
begin{enumerate}[wide, labelwidth=!, labelindent=0pt, label=
\\
textbf{\large
\\
arabic{enumi} \large}]
\n
'
write_buffer
+=
"""
\\
begin{enumerate}[wide, labelwidth=!, labelindent=0pt,
label=
\\
textbf{\large
\\
arabic{enumi} \large}]
\n
"""
for
ns
in
non_vuln_services
:
for
ns
in
non_vuln_services
:
write_buffer
+=
'
\item
\\
textbf{\large
'
+
ns
+
'
\large}
\n\\
begin{itemize}
\n
'
write_buffer
+=
"""
\item
\\
textbf{\large
'
+ ns +
'
\large}
\n\
\b
egin{itemize}
\n
"""
locations
=
results
[
ns
][
'
locations
'
]
locations
=
results
[
ns
][
'
locations
'
]
for
addr
in
locations
.
keys
():
for
addr
in
locations
.
keys
():
write_buffer
+=
'
\item
'
+
addr
+
'
Ports:
'
+
str
(
locations
[
addr
])
+
'
\n
'
write_buffer
+=
'
\item
'
+
addr
+
'
Ports:
'
+
str
(
locations
[
addr
])
+
'
\n
'
write_buffer
+=
'
\end{itemize}
\n
'
write_buffer
+=
'
\end{itemize}
\n
'
write_buffer
+=
'
\end{enumerate}
\n
'
write_buffer
+=
'
\end{enumerate}
\n
'
write_buffer
+=
'
\section*{List of IPs Scanned}
'
write_buffer
+=
'
\section*{List of IPs Scanned}
'
write_buffer
+=
'
\\
begin{itemize}
\n
'
write_buffer
+=
'
\\
begin{itemize}
\n
'
f
=
open
(
ip_file
)
f
=
open
(
ip_file
)
for
line
in
f
:
for
line
in
f
:
write_buffer
+=
'
\item
'
+
line
+
'
\n
'
write_buffer
+=
'
\item
'
+
line
+
'
\n
'
f
.
close
()
f
.
close
()
write_buffer
+=
'
\end{itemize}
\n
'
write_buffer
+=
'
\end{itemize}
\n
'
write_buffer
+=
'
\end{document}
'
write_buffer
+=
'
\end{document}
'
latex_file
=
open
(
output_file
,
"
w+
"
)
latex_file
=
open
(
output_file
,
"
w+
"
)
latex_file
.
write
(
write_buffer
)
latex_file
.
write
(
write_buffer
)
latex_file
.
close
()
latex_file
.
close
()
def
main
():
def
main
():
dirname
=
sys
.
argv
[
1
]
dirname
=
sys
.
argv
[
1
]
for
filename
in
os
.
listdir
(
dirname
):
for
filename
in
os
.
listdir
(
dirname
):
f
=
open
(
dirname
+
"
/
"
+
filename
)
f
=
open
(
dirname
+
"
/
"
+
filename
)
xml_content
=
f
.
read
()
xml_content
=
f
.
read
()
f
.
close
()
f
.
close
()
data
=
xmltodict
.
parse
(
xml_content
)
data
=
xmltodict
.
parse
(
xml_content
)
...
@@ -173,5 +206,6 @@ def main():
...
@@ -173,5 +206,6 @@ def main():
create_latex
()
create_latex
()
if
__name__
==
"
__main__
"
:
if
__name__
==
"
__main__
"
:
main
()
main
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment