From e74790d6a0aac9bef52f9c3c25b46b9b68bfd7a3 Mon Sep 17 00:00:00 2001 From: 0c34 Date: Tue, 24 Oct 2017 22:09:17 +0700 Subject: [PATCH] testing sql injection vuln --- app.go | 6 +++- public/css/main.css | 10 ++++-- public/img/header.png | Bin 0 -> 64364 bytes templates/template.header.html | 9 +---- templates/template.sidebar.html | 2 +- templates/template.sqli.html | 17 +++++++--- user/session/session.go | 7 ++-- user/user.go | 4 +++ util/cookie.go | 34 ++++++++++++++++--- util/template.go | 6 +++- vulnerability/sqli/function.go | 56 ++++++++++++++++++++++++++++++++ vulnerability/sqli/sqli.go | 49 ++++++++++++++++++++++------ 12 files changed, 164 insertions(+), 36 deletions(-) create mode 100644 public/img/header.png create mode 100644 vulnerability/sqli/function.go diff --git a/app.go b/app.go index 2756672a..7dd28e60 100644 --- a/app.go +++ b/app.go @@ -10,6 +10,8 @@ import ( "govwa/util/middleware" "govwa/user" "govwa/user/session" + + "govwa/vulnerability/sqli" ) const ( @@ -49,13 +51,15 @@ func main() { mw := middleware.New() router := httprouter.New() userObj := user.New() + sqlI := sqli.New() router.ServeFiles("/public/*filepath", http.Dir("public/")) router.GET("/", mw.LoggingMiddleware(mw.AuthCheck(indexHandler))) router.GET("/index", mw.LoggingMiddleware(mw.AuthCheck(indexHandler))) userObj.SetRouter(router) - + sqlI.SetRouter(router) + s := http.Server{ Addr : ":8082", Handler : router, diff --git a/public/css/main.css b/public/css/main.css index 0193e2f5..f0a9f373 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -4,7 +4,12 @@ body { height: 100%; background: #f4f4f4; } - +.header{ + background-image: url("http://localhost:8082/public/img/header.png"); + width: 1140px; + height: 100px; + margin-bottom: 20px; +} .nav-side-menu { overflow: auto; font-family: verdana; @@ -17,6 +22,7 @@ body { border: 1px solid #428bca; color: #000; border-radius: 4px; + margin-bottom: 20px } .nav-side-menu .brand { @@ -237,7 +243,7 @@ body { height: 60px; line-height: 60px; /* Vertically center the text there */ - background-color: #B61313; + background-color: #428bca; } .footer>.container { diff --git a/public/img/header.png b/public/img/header.png new file mode 100644 index 0000000000000000000000000000000000000000..9e1e02b400fbdac17a33a5686c4196be287d61fb GIT binary patch literal 64364 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 Rw^jfE002ovPDHLkV1mx6f}H>W literal 0 HcmV?d00001 diff --git a/templates/template.header.html b/templates/template.header.html index a52626e9..765c87ac 100644 --- a/templates/template.header.html +++ b/templates/template.header.html @@ -10,15 +10,8 @@ -
-
-{{template "template.footer"}} {{ end }} \ No newline at end of file +{{template "template.footer"}} +{{ end }} \ No newline at end of file diff --git a/user/session/session.go b/user/session/session.go index 8dffa77e..7a61e937 100644 --- a/user/session/session.go +++ b/user/session/session.go @@ -27,7 +27,7 @@ func (self *Self) SetSession(w http.ResponseWriter, r *http.Request, data map[st session.Options = &sessions.Options{ Path: "/", MaxAge: 86400, - HttpOnly: true, + HttpOnly: false, //set to false for xss :) } session.Values["govwa_session"] = true @@ -84,12 +84,11 @@ func (self *Self) IsLoggedIn(r *http.Request) bool { } -func init(){ +/* func init(){ store.Options = &sessions.Options{ - //Domain : util.Cfg.Webserver, Path: "/", MaxAge: -1, HttpOnly: true, } -} \ No newline at end of file +} */ \ No newline at end of file diff --git a/user/user.go b/user/user.go index 260647e5..a5b3b95b 100644 --- a/user/user.go +++ b/user/user.go @@ -89,6 +89,8 @@ func loginAction(w http.ResponseWriter, r *http.Request, _ httprouter.Params) bo sessionData["uname"] = uData.uname sessionData["id"] = strconv.Itoa(uData.id) + util.SetCookie(w, "Uid", strconv.Itoa(uData.id)) //save user_id to cookie + s.SetSession(w, r, sessionData) log.Println("Login Success") return true @@ -100,6 +102,8 @@ func loginAction(w http.ResponseWriter, r *http.Request, _ httprouter.Params) bo func Logout(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { s := session.New() s.DeleteSession(w, r) + cookies := []string{"Level", "Uid"} + util.DeleteCookie(w,cookies) util.Redirect(w, r, "login", 302) } diff --git a/util/cookie.go b/util/cookie.go index 1839686c..cf2bd9ee 100644 --- a/util/cookie.go +++ b/util/cookie.go @@ -1,6 +1,9 @@ package util -import "net/http" +import ( + "net/http" + "time" +) func SetCookieLevel(w http.ResponseWriter, r *http.Request) string { ck := r.FormValue("level") @@ -8,8 +11,7 @@ func SetCookieLevel(w http.ResponseWriter, r *http.Request) string { if level == "" { level = "low" } - cookie := http.Cookie{Name: "level", Value: level} - http.SetCookie(w, &cookie) + SetCookie(w,"Level",level) return level } @@ -24,4 +26,28 @@ func CheckLevel(r *http.Request) bool { } } -tes \ No newline at end of file +/* cookie setter getter */ + +func SetCookie(w http.ResponseWriter, name, value string){ + cookie := http.Cookie{ + Name: name, + Value: value, + } + http.SetCookie(w, &cookie) +} + +func GetCookie(r *http.Request, name string)string{ + cookie, _ := r.Cookie(name) + return cookie.Value +} + +func DeleteCookie(w http.ResponseWriter, cookies []string){ + for _,name := range cookies{ + cookie := &http.Cookie{ + Name: name, + Value: "", + Expires: time.Unix(0, 0), + } + http.SetCookie(w, cookie) + } +} diff --git a/util/template.go b/util/template.go index ac7fa0e1..78f507f6 100644 --- a/util/template.go +++ b/util/template.go @@ -1,6 +1,7 @@ package util import ( + "log" "encoding/json" "html/template" "net/http" @@ -9,7 +10,10 @@ import ( func SafeRender(w http.ResponseWriter, name string, data map[string]interface{}) { template := template.Must(template.ParseGlob("templates/*")) - template.ExecuteTemplate(w, name, data) + err := template.ExecuteTemplate(w, name, data) + if err != nil{ + log.Println(err.Error()) + } } func RenderAsJson(w http.ResponseWriter, data ...interface{}) { diff --git a/vulnerability/sqli/function.go b/vulnerability/sqli/function.go new file mode 100644 index 00000000..df107758 --- /dev/null +++ b/vulnerability/sqli/function.go @@ -0,0 +1,56 @@ +package sqli + +import( + "log" + "fmt" + "database/sql" + + "govwa/util/database" +) + +var DB *sql.DB + +func init(){ + DB, _ = database.Connect() + /* if err != nil{ + log.Println(err.Error()) + } */ +} + +type Profile struct{ + Uid int + Name string + City string + PhoneNumber string +} + +func newProfile()*Profile{ + return &Profile{} +} + +func(p *Profile)unsafeQueryGetData(uid string)error{ + + /* this funciton use to get data Profile from database with vulnerable query */ + + getProfileSql := fmt.Sprintf(`SELECT p.user_id, p.full_name, p.city, p.phone_number + FROM Profile as p,Users as u + where p.user_id = u.id + and u.id=%s`,uid) //here is the vulnerable query + + rows, err := DB.Query(getProfileSql) + if err != nil{ + log.Printf("query error :%s",err.Error()) + return err //this will return error query to clien hmmmm. + } + defer rows.Close() + //var profile = Profile{} + for rows.Next(){ + err = rows.Scan(&p.Uid,&p.Name,&p.City,&p.PhoneNumber) + if err != nil{ + log.Printf("Row scan error: %s", err.Error()) + return err + } + } + return nil +} + diff --git a/vulnerability/sqli/sqli.go b/vulnerability/sqli/sqli.go index 5a5a2880..6c2fcbb3 100644 --- a/vulnerability/sqli/sqli.go +++ b/vulnerability/sqli/sqli.go @@ -1,21 +1,50 @@ package sqli import( - "govwa/util/database" + + "strconv" "net/http" - "fmt" + + "github.com/julienschmidt/httprouter" + + "govwa/util/middleware" + "govwa/util" + + ) -import "govwa/util" -type User struct{ - Id int `json:"id"` - Name string `json:"name"` +type SQLI struct{} + +func New()SQLI{ + return SQLI{} +} + +func (self SQLI)SetRouter(r *httprouter.Router){ + mw := middleware.New() + r.GET("/sqli1", mw.AuthCheck(sqli1Handler)) } -func New()*User{ - return nil +func sqli1Handler(w http.ResponseWriter, r *http.Request, _ httprouter.Params){ + + uid := util.GetCookie(r,"Uid")//many developer use this style set reference key in cookie with no sanitaze + p := newProfile() + + data := make(map[string]interface{}) + + err := p.unsafeQueryGetData(uid) + + if err != nil{ + data["error"] = err.Error() + } + data["uid"] = strconv.Itoa(p.Uid) + data["name"] = p.Name + data["city"] = p.City + data["number"] = p.PhoneNumber + + util.SafeRender(w,"template.sqli",data) + } -func UnsafeGetData(r *http.Request)(User, error){ +/* func UnsafeGetData(r *http.Request)(User, error){ db, err := database.Connect() if err != nil{ return User{},err @@ -73,4 +102,4 @@ func getUserHandler(w http.ResponseWriter, r *http.Request) { fmt.Println(err.Error()) } util.RenderAsJson(w, data) -} \ No newline at end of file +} */ \ No newline at end of file