资源共享吧|易语言论坛|逆向破解教程|辅助开发教程|网络安全教程|www.zygx8.com|我的开发技术随记

 找回密码
 注册成为正式会员
查看: 927|回复: 0

[网络安全/渗透测试] 代码审计入门教学(二)

[复制链接]

4

主题

4

帖子

0

精华

新手上路

Rank: 1

资源币
10
积分
12
贡献
0
在线时间
2 小时
注册时间
2020-2-19
最后登录
2020-5-2
发表于 2020-2-19 23:00:48 | 显示全部楼层 |阅读模式
代码审计入门教学(二)

1、首先通过sublime编辑器打开上次的XXXcms文件夹:
2、搜索关键特征:
小白:“说道关键特征仔仔你理解吗?”
仔仔:“关键特征应该是数据库查询的语句吧~”
小白:“你这么说也勉强可以,不过仅仅是数据库查询语句还不够,还需要数据库查询语句能拼接我们可以控制的参数才可以。”
仔仔:“那怎么才能知道哪些参数我们可以控制呢?”
小白:“我这里给你简单的科普下吧。”
首先是php获取参数的内置全局服务器变量有:
$_GET、$_POST、$_SERVER、$_COOKIE等方法。
其中$_GET是最常见的GET请求,如:
http://www.yuesec.com/index.php?id=1
http://www.yuesec.com/index.php?classid=1
http://www.yuesec.com/news.php?id=1
GET请求类似于以上的3个URL,index.php中的index可能是其他字符串哦,仔仔你可不要以为只有index.php和news.php的脚本才可以注入哦。
我们访问这些请求,如下面这些代码就可以获取id的值并输出:

dm13.jpg

可以看到id参数的值和页面输出的值都是“hello guys! ”。
其实这段代码也是存在安全问题的,不信可以构造ID值如下:
id=1%3E%3Cscript%3Ealert(1)%3C/script%3E%3C
然后网页访问:

DM14.jpg

可以看到网页会弹出个窗口,不小心就弄出个XSS哈,论安全编码的重要性。
仔仔我只跟你说$_GET获取参数值的例子,其它的你自己去了解哈。
仔仔:“嗯嗯,我回去了解的,你继续。”
小白:“要构成SQL注入需要数据库查询语句能拼接我们可以控制的参数,$_GET可控参数我们了解了,接下来组合起来。”
$id = $_GET[‘id’];
$sql = “select *from userid=$id;”;
这段代码表示通过GET请求获取id的值,然后拼接到$sql变量里面,接下来进行数据库查询就构成了SQL注入。
说了那么说,其实就是通过搜索$_GET关键字确认注入点位置。
通过sublime在文件中搜索存在$_GET关键字的文件:

DM15.jpg


26个文件中存在247个匹配,我们需要在这么多的结果中筛选出能与数据库查询语句拼接的GET请求参数。

通过正则语法搜索既存在mysql_query又存在$_GET[的行:

mysql_query.*?\$_GET\[

Dm16.jpg


第一个注入验证:
DM17.jpg


先进入该段代码对应的源文件:
DM18.jpg


从代码中可以看出$type变量的值等于edit条件成立就执行elseif块里面的内容。

$row = mysql_fetch_array(mysql_query("SELECT * FROM sc_bannerWHERE ID=".$_GET["ID"]));

这段代码表示先通过GET请求获取ID参数传过来的值,并且ID参数的值未做编码转换,然后拼接到数据库查询语句里面,最后执行数据库查询语句。可以看到$type的值并没有拼接到数据库查询语句里面,就算该变量过滤的再严格也是存在SQL注入的。

可以往上看$type确实是做了编码处理,不过不影响我们的注入:

DM19.jpg

从这段代码中可以看出脚本从GET请求获取type的值并进行编码,然后判断它的值是add还是edit,根据值的不同进入不同的条件块。得出以下注入链接:
?type=edit&ID=1
由于是后台登录后才能进行的访问,所以需要把上一篇文章提到的Cookie绕过也要利用到。
接下来验证下是否是注入:

DM20.jpg

构造的URL页面是存在的。

接下来通过burpsuite截包保存为test.txt文档再用Sqlmap进行注入:


DM21.jpg


第二个注入认证:

DM22.jpg

好,就选择这段代码了,双击跳转到这段代码的文件:
DM23.jpg


这段代码也是获取GET请求传过来的参数的值,然后带入数据库查询语句里执行。

构造好链接访问:



DM24.jpg
通过输入and 1=1、and 1=2、’ and ‘1’=’1和’ and ‘1’=’2判断是否存在注入:

and 1=1

DM25.jpg

and 1=2
DM26.jpg



‘ and ‘1’=’1
DM27.jpg


‘ and ‘1’=’2
DM28.jpg




可以看到只有and 1=1返回的页面和正常页面内容一致,可以得出该处注入点是数字型注入。

小白:“仔仔你会手工注入吗?貌似这不是盲注哦!”

仔仔:“手工注入不大会诶。”

小白:“不会就算咯。”

仔仔:“你会手工注入吗?会的话教我呗。”

小白:“看大家支不支持你学咯。”

仔仔:“大家赶紧在下面评论‘支持仔仔学习手工注入’吧,仔仔在此多谢了。”

小白给仔仔发了一张获取数据库版本的截图:

DM29.jpg


接下来重复下面的截包注入操作:
DM30.jpg

sqlmap -rlgid.txt –dbs
dm31.jpg


回复

使用道具 举报

 点击右侧快捷回复  

本版积分规则

小黑屋|资源共享吧 ( 琼ICP备2021005790号-1 )

GMT+8, 2024-6-1 20:52 , Processed in 0.051782 second(s), 16 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表