Go代码审计学习(一)

news2024/11/26 11:39:57

文章目录

  • Vulnerability-goapp
    • /assets/
    • / 根目录
    • /login
    • /new
    • /top
    • /profile
    • /profile/edit/upload
    • /post /timeline
    • /timeline/searchpost
    • /adminconfirm /adminlogin /adminusers
    • CSRF

网上有关Go的代码审计好少哇,能找到的文章也不多,害,没办法也得学

Vulnerability-goapp

建议用docker启动靶机,靶机漏洞都很简单的,很明显一眼就能找到

完全是为了设计漏洞而设计漏洞,来分析一下

https://github.com/Hardw01f/Vulnerability-goapp

docker-compose up

/assets/

就是一个静态文本目录页面

	http.Handle("/assets/", http.StripPrefix("/assets/", http.FileServer(http.Dir("assets/"))))

请添加图片描述

/ 根目录

func sayYourName(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	fmt.Println(r.Form)
	fmt.Println("path", r.URL.Path)
	fmt.Println("scheme", r.URL.Scheme)
	fmt.Println("r.Form", r.Form)
	fmt.Println("r.Form[name]", r.Form["name"])
	var Name string
	for k, v := range r.Form {
		fmt.Println("key:", k)
		Name = strings.Join(v, ",")
	}
	fmt.Println(Name)
	fmt.Fprintf(w, Name)
  // 解析表单内容,不做任何处理就直接返回
  // 所以这里就满足反射型xss的条件了
}

请添加图片描述

/login

登录页,就是一些检查,成功就返回 /top

if r.Method == "GET" {
		if cookie.CheckSessionID(r) {
			http.Redirect(w, r, "/top", 302)
		} else {
			t, _ := template.ParseFiles("./views/public/login.gtpl")
		}
	} else if r.Method == "POST" {
if isZeroString(r.FormValue("mail")) && isZeroString(r.FormValue("passwd")) {
			if id != 0 {	// id存在
				if name != "" { // name存在
				} else {	// name不存在
					t, _ := template.ParseFiles("./views/public/error.gtpl")
				}
			} else {	// id 不存在
				t, _ := template.ParseFiles("./views/public/error.gtpl")
			}
		} else {	// passwd mail为空
			fmt.Println("username or passwd are empty")
			outErrorPage(w)
		}
	} else {
		http.NotFound(w, nil)
	}

/new

注册页,这里其实是可以在跳转 /top的时候可以 xss

if CheckUserDeplicate(r.FormValue("mail")) {
			if RegisterUser(r) {
        
				http.SetCookie(w, cookieSID)
				http.SetCookie(w, cookieUserName)
				p := Person{UserName: name}
				t, _ := template.ParseFiles("./views/public/success_register.gtpl")
				t.Execute(w, p)
			}
_, err = db.Exec("insert into user (name,mail,age,passwd) value(?,?,?,?)", r.FormValue("name"), r.FormValue("mail"), age, r.FormValue("passwd"))
// r.FormValue 和 r.Form 的区别就是 FormValue拿第一个同名的值,也就是不能覆盖

请添加图片描述
请添加图片描述

/top

同样是从 cookie中拿到 userName,然后没做任何处理的返回

userName, sessionID, userID, err := cookie.GetUserIDFromCookie(r)
	if sessionID == "" {
		t, _ := template.ParseFiles("./views/public/error.gtpl")
	} else {
		if r.Method == "GET" {
			if userID != 0 {

				http.SetCookie(w, cookieUserID)
				http.SetCookie(w, deleAdminID)
				p := Person{UserName: userName}
				t, _ := template.ParseFiles("./views/public/top.gtpl")
				t.Execute(w, p)
	}
<ul id="nav">
  <li><div class="username">{{.UserName}}</div></li>
  <li><a href="/top">Home</a></li>
  <li><a href="/profile">Profile</a></li>
  <li><a href="/timeline">TimeLine</a></li>
  <li><a href="/post">Post</a></li>
  <li><a href="/hints">Hints</a></li>
  <li><a href="/db">DB</a></li>
  <li><a href="/logout">Logout</a></li>
<ul>

请添加图片描述

/profile

后台同样是存在多处的xss,原因同 /top,没做任何处理拿到 userName直接返回

这里还存在存储xss,同样是没做任何处理就存数据库,读也是一样

_, err = db.Exec("update vulnapp.userdetails set address = ?, animal = ?, word = ? where uid = ?", address, animal, word, uid)


	var userImage, address, animal, word string
	res, err := db.Query("select userImage,address,animal,word from vulnapp.userdetails where uid=?", uid)

请添加图片描述

请添加图片描述
请添加图片描述

/profile/edit/upload

任意文件上传,和php利用方式不同,没有像一句话马这种东西,而且访问也是通过路由访问,而不是文件路径

这里也没对文件名检测,所以可以任意位置上传文件,但是好像没啥用,权限给的0666,没有执行权限

file, handler, err := r.FormFile("uploadfile")
			defer file.Close()
			f, err := os.OpenFile("./assets/img/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
			defer f.Close()

/post /timeline

一个留言板,存储型xss,同样是直接就可以叉

postText := r.FormValue("post")

			fmt.Println(reflect.TypeOf(postText))

			StorePost(uid, postText)

			http.Redirect(w, r, "/post", 301)
_, err = db.Exec("insert into vulnapp.posts(uid,post) values (?,?)", uid, postText)

请添加图片描述

/timeline/searchpost

存在SQL注入

testStr := "mysql -h mysql -u root -prootwolf -e 'select post,created_at from vulnapp.posts where post like \"%" + searchWord + "%\"'"

// 直接闭合掉 %" 就行
// paidx0%" and if(2>1,sleep(3),1)#

请添加图片描述

/adminconfirm /adminlogin /adminusers

SQL注入,闭合就行,同上

commandLine := "mysql -h mysql -u root -prootwolf -e 'select adminsid from vulnapp.adminsessions where adminsessionid=\"" + adminSessionCookie + "\";'"

cmd := "mysql -h mysql -u root -prootwolf -e 'select adminid from vulnapp.admins where mail=\"" + requestMail + "\" and passwd=\"" + requestPasswd + "\";'"

cmd := "mysql -h mysql -u root -prootwolf -e 'select id,name,mail,age,created_at,updated_at from vulnapp.user where name not in (\"" + userName.Value + "\");'"


CSRF

csrf基本都是,因为都没有对数据提交来源做检测,只有修改确认密码这里做了检测

也就是说我们可以用burpsuit生成一个csrf的临时假服务器去伪造用户执行命令

func ConfirmPasswdChange(w http.ResponseWriter, r *http.Request) {
	if r.Method == "POST" {
		if cookie.CheckSessionID(r) {
			if r.Referer() == "http://localhost:9090/profile/changepasswd" {
				_, _, uid, err := cookie.GetCookieValue(r)
				if err != nil {
					fmt.Printf("%+v\n", err)
				}

				newPasswd := r.FormValue("passwd")
				confirmPassword := r.FormValue("confirm")
				fmt.Println(newPasswd, confirmPassword, uid)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络协议—应用层的HTTP协议

URL&#xff0c;叫作统一资源定位符。之所以叫统一&#xff0c;是因为它是有格式的。HTTP 称为协议&#xff0c;www.163.com 是一个域名&#xff0c;表示互联网上的一个位置。正是因为这个东西是统一的&#xff0c;所以当你把这样一个字符串输入到浏览器的框里的时候&#xff0…

软件测试是要学习什么技能?

推荐阅读&#xff1a; 2022年简历石沉大海&#xff0c;软件测试行业当前找工作有多难&#xff1f; [内部资源] 想拿年薪30W的软件测试人员&#xff0c;这份资料必须领取~ 在确定软件开发可行的状态下&#xff0c;对软件是要实现的各个功能做到详细分析。要求分析阶段是一个很…

两起并购!深兰科技完成自动驾驶新能源车产业生态链布局

近日&#xff0c;深兰科技集团全资控股的熊猫汽车(上海)有限公司分别与一汽凌源、湖南加立减新能源科技正式签约&#xff0c;完成了对这两家公司的并购&#xff0c;为企业自动驾驶新能源汽车产业生态链的建设蓝图添上了浓重的一笔。 此次被深兰科技并购的一汽凌源汽车制造有限公…

Java二维数组拓展练习

例 1 对角线输出&#xff1a; 已知一个n*n的矩阵&#xff08;n<20&#xff09;&#xff0c;把矩阵二条对角线上的元素值加上10&#xff0c;然后输出这两条新对角线上的所有元素之和。 注意当n为奇数时两条对角线交叉的那个元素改变时只需要改变一次&#xff0c;累加的时候…

46.for循环嵌套之九九乘法表

46.for循环嵌套之九九乘法表 文章目录46.for循环嵌套之九九乘法表1. 目标任务2. 完成第1行输出2. 分析前3行规律3. 编写第1行代码4. 编写前2行代码5. 调整输出格式6. 完成总代码1. 目标任务 本节的任务是利用for循环嵌套编写九九乘法表。 1*11 1*22 2*24 1*33 2*36 3*39 1…

语音识别之语音激活(VAD)检测(一)

导读 语音激活检测(Vioce Activation Detection)简称VAD&#xff0c;用来检测语音信号是否存在。VAD技术在语音领域中应用非常的广泛&#xff0c;在语音识别中我们可以对长语音通过VAD来检测出语音信号的空隙&#xff0c;通过这个空隙来分割语音&#xff0c;将长语音切分成短语…

正大国际期货:如何摆脱炒黄金期货被套单?

投资失败无非两点&#xff1a;一是自身原因&#xff0c;自己没有经验&#xff0c;盲目的操作肯定会造成亏损&#xff1b;二是指导老师的实力问题&#xff0c;指导老师对行情的方向把握不准&#xff0c;经常喊反弹&#xff0c;造成你的亏损。想要走得快&#xff0c;就独自上路&a…

Python每日一练 09——多文件操作

Python每日一练 09——多文件操作 文章目录Python每日一练 09——多文件操作一、单文件拆分为多个文件二、多文件合并为单文件1、获取数据文件名2、获取股票名列表3、读单支股票数据4、读多支股票数据5、多文件中数据合并到一个文件一、单文件拆分为多个文件 我们写一个txt文件…

数字图像处理(入门篇)九 图像数据预处理之滤波

目录 1 模板运算 &#xff08;1&#xff09;模板卷积 &#xff08;2&#xff09;模板排序 2 均值滤波 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果图 3 高斯滤波 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果图 4 中值滤波 &#…

IB数学HL/SL考试大纲简单介绍

IB数学难度怎么样&#xff1f;IB数学内部评估和外部评估是怎么评分的&#xff0c;IB数学HL和SL的考试大纲&#xff1f; 下面介绍IB数学框架体系IB数学SL考试大纲 SL数学为必修课 考试内容相对比较基础 代数&#xff08;Algebra&#xff09;&#xff1a;涉及数列问题&#xff…

CentOS虚拟机搭建Hive环境

注&#xff1a;本文是对 https://www.bilibili.com/video/BV1CU4y1N7Sh 的实践。 关于如何搭建Hadoop集群&#xff0c;请参考我另一篇文档。 环境 CentOS 7.7JDK 8Hadoop 3.3.0Hive 3.1.2 准备 确认Hadoop的 etc/hadoop/core-site.xml 文件包含如下配置&#xff1a; <…

3D建模师做多了女人会不会找不到老婆?次世代美少女战士建模流程讲解

什么是次世代&#xff1f; 次世代是个舶来语&#xff0c;“次世代游戏”指代和同类游戏相比下更加先进的游戏&#xff0c;即“下一代游戏”。 次世代是利用高模烘焙的法线贴图回帖到低模上&#xff0c;让低模在游戏引擎里可以及时显示高模的视觉效果。模型面数比较高&#xf…

Python实现PSO粒子群优化卷积神经网络CNN回归模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法&#xff08;Particle Swarm Optimization&#xff09;的英文缩写&#xff0c;是一…

学完这篇,再不怕防火墙NAT策略问题

Q&A 1、配置了nat server后Tracert防火墙上的global地址&#xff0c;显示信息是什么? 无论具有Inside地址的设备在防火墙内部有多少跳&#xff0c;Tracert时全部显示nat server的global的地址。如果有3跳&#xff0c;则显示3次global地址。 2、nat server和destination-n…

艾美捷CMRL-1066培养基背景和化学性质分析

艾美捷CMRL-1066培养基背景&#xff1a; CMRL-1066是20世纪60年代后期在康诺医学研究实验室开发的一种化学定义的培养基。CMRL-1066最初设计用于非补充培养物中的小鼠L细胞。虽然CMRL-1066是为无血清培养而开发的&#xff0c;但它可以补充血清并用于支持多种细胞类型的生长。适…

[激光原理与应用-50]:《激光焊接质量实时监测系统研究》-1-绪论 (模式识别)

目录 1.1 问题概述 1.2 激光焊接质量监测在国内外的研究现状 1.2.1 国内外研究概况、水平和发展趋势 1.2.2 信号检测与传感器 1.2.3 信号分析与缺陷诊断 &#xff08;DSP或FPGA&#xff09; 1.3 本课题研究内容及意义 后记&#xff1a; 1.1 问题概述 激光焊接是一种高效…

YOLO v3

参考 YOLO v3 - 云社区 - 腾讯云 摘要 我们对YOLO进行了一些更新&#xff01;我们做了一些小的设计改变使它更好。我们还训练了这个非常棒的新网络。比上次大一点&#xff0c;但更准确。不过还是很快的&#xff0c;别担心。在320 320的情况下&#xff0c;YOLOv3在28.2 mAP下…

跳板攻击中如何追踪定位攻击者主机(上)

前段时间西北工业大学遭受NAS攻击事件中&#xff0c;TAO在针对西北工业大学的网络攻击行动中先后使用了54台跳板机和代理服务器&#xff0c;主要分布在日本、韩国、瑞典、波兰、乌克兰等17个国家&#xff0c;其中70%位于中国周边国家&#xff0c;如日本、韩国等。 同时&#x…

芯片漫游指南(3)-- UVM通信

目录1.TLM通信1.1 概述1.2 基本概念1.3 分类1.4 端口的使用2. 单向通信2.1 概念2.2 方法2.3 示例3.双向通信3.1 概述3.2 分类3.3 transport4. 多向通信4.1 概述4.2 示例5.通信管道5.1 概述5.2 TLM FIFO5.3 Analysis Port5.4 analysis TLM FIFO5.5 request & response通信管…

[附源码]JAVA毕业设计疫情防控期间人员档案追演示录像下(系统+LW)

[附源码]JAVA毕业设计疫情防控期间人员档案追演示录像下&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#x…